LibreNMS 监控服务器
LibreNMS 文档未更新至 Rocky Linux 10 之后
虽然 LibreNMS 项目似乎仍然生机勃勃,根据 LibreNMS GitHub 站点的提交和更改,但安装和运行(在此处找到,在 LibreNMS 站点上基本未更改)的说明对于 Rocky Linux 10 来说并不奏效。目前,建议在彻底调查完所有更改之前,暂缓在 Rocky Linux 10 上进行安装。
简介¶
网络和系统管理员几乎总是需要某种形式的监控。这可以包括在路由器端点上绘制带宽使用情况图、监控各种服务器上运行的服务状态等。存在许多监控选项,但一个不错的选择是 LibreNMS,它提供了许多(如果不是全部)监控组件。
本文档只是 LibreNMS 的起点。作者将引导您参考该项目的出色(且广泛)的文档以了解更多选项。作者使用过许多其他监控解决方案,其中 Nagios 和 Cacti 是两个,但 LibreNMS 将这两个项目提供的功能集中在一个地方。
安装将密切遵循官方安装说明。本文档的解释和对该过程的微小更改,使其优于那份出色的文档。
前提条件、假设和约定¶
- 运行 Rocky Linux 的服务器或容器(是的,LibreNMS 可以在容器中运行。如果您需要监控大量内容,最好安装在独立硬件上)。所有命令都假定为 Rocky Linux 的全新安装。
- 假设:您可以以 root 用户身份运行命令,或可以使用 sudo 提升权限。
- 具备命令行工具的实践知识,包括 vi 等文本编辑器。
- 假设:使用 SNMP v2。如果您想使用 SNMP v3,LibreNMS 支持它并且会正常工作。您需要更改设备上的 SNMP 配置和选项以匹配 v3。
- 本文档中包含了 SELinux 的过程。作者在实验室使用的容器默认不包含 SELinux。因此,SELinux 的过程**尚未**在实验室进行测试。
- 在本文档中,示例使用 vi 编辑器。当文档提示保存更改并退出时,请使用 Shift+:+W+Q+!。
- 该过程需要一些故障排除技能,包括日志监控、Web 测试等。
安装包¶
以 root 用户身份输入这些命令。开始之前,请注意,此安装过程侧重于 httpd,而不是 nginx。如果您倾向于后者,请按照 LibreNms 安装说明和其中的指南进行操作。
首先,安装 EPEL 仓库(企业 Linux 的额外包)
dnf install -y epel-release
当前版本的 LibreNMS 需要最低 PHP 版本为 8.1。Rocky Linux 9.0 包含 PHP 8.0。为此新版本启用第三方存储库(Rocky Linux 8.6 也需要)。
您安装的存储库版本将取决于您运行的 Rocky Linux 版本。此处假定为版本 9,但请根据您运行的版本进行相应更改。
dnf install http://rpms.remirepo.net/enterprise/remi-release-9.rpm
然后设置 dnf 使用 remi 包而不是常规包。
dnf module reset php
dnf module enable php:8.1
安装完 EPEL 和 REMI 存储库后,就可以安装软件包了。
dnf install bash-completion cronie fping git httpd ImageMagick mariadb-server mtr net-snmp net-snmp-utils nmap php-fpm php-cli php-common php-curl php-gd php-gmp php-json php-mbstring php-process php-snmp php-xml php-zip php-mysqlnd python3 python3-PyMySQL python3-redis python3-memcached python3-pip python3-systemd rrdtool unzip wget
所有这些软件包都代表了 LibreNMS 功能集的一部分。
设置 'librenms' 用户¶
复制并粘贴(或输入)以下内容:
useradd librenms -d /opt/librenms -M -r -s "$(which bash)"
此命令将用户的默认目录设置为 /opt/librenms
,但 -M
选项表示“不创建目录”。原因是这个目录是在 LibreNMS 安装过程中创建的。-r
表示将此用户设为系统帐户,-s
表示设置其 shell(在本例中为“bash”)。
下载 LibreNMS 并设置权限¶
Git 促进了下载。您可能熟悉这个过程。首先,切换到 /opt
目录。
cd /opt
克隆仓库
git clone https://github.com/librenms/librenms.git
更改目录权限
chown -R librenms:librenms /opt/librenms
chmod 771 /opt/librenms
setfacl -d -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
setfacl -R -m g::rwx /opt/librenms/rrd /opt/librenms/logs /opt/librenms/bootstrap/cache/ /opt/librenms/storage/
setfacl
命令代表“设置文件访问控制列表”,是保护目录和文件的另一种方法。
以 librenms
用户身份安装 PHP 依赖项¶
LibreNMS 内的 PHP 依赖项需要以 librenms
用户身份安装。为此,请运行:
su - librenms
输入以下内容:
./scripts/composer_wrapper.php install --no-dev
返回到 root
exit
PHP 依赖项安装失败的解决方法¶
LibreNMS 文档指出,当您位于代理服务器后面时,上述过程可能会失败。它也可能由于其他原因而失败。因此,稍后会有一个安装 Composer 的过程。
设置时区¶
您需要确保系统和 PHP 的设置正确。您可以在PHP 有效时区设置中找到列表。例如,对于中部时区,常见的条目是“America/Chicago”。首先编辑 php.ini
文件。
vi /etc/php.ini
找到 date.timezone
行并进行修改。请注意,该行被注释掉了,所以请删除行开头的“;”,然后在“=”号后添加您的时区。对于中部时区示例,请使用:
date.timezone = America/Chicago
保存更改并退出 php.ini
文件。
您还需要确保系统时区正确。使用中部时区示例,执行以下操作:
timedatectl set-timezone America/Chicago
MariaDB 设置¶
在开始 LibreNMS 的数据库要求之前,请先完成MariaDB 过程,特别是“保护 mariadb-server”部分,然后返回此处进行这些特定设置。修改 mariadb-server.cnf
文件。
vi /etc/my.cnf.d/mariadb-server.cnf
在“[Mysqld]”部分添加以下行:
innodb_file_per_table=1
lower_case_table_names=0
然后启用并重启 mariadb
服务器。
systemctl enable mariadb
systemctl restart mariadb
以 root 用户身份访问 mariadb
。请记住使用您在之前执行的“保护 mariadb-server”部分创建的密码。
mysql -u root -p
为 LibreNMS 进行一些特定更改。使用下面的命令,请记住将密码“password”更改为安全的密码,并将其记录在安全的位置。
在 mysql
提示符下运行:
CREATE DATABASE librenms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'librenms'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON librenms.* TO 'librenms'@'localhost';
FLUSH PRIVILEGES;
输入“exit”退出 mariadb
。
配置 PHP-FPM¶
此项未更改,与官方文档相同,只是文件的路径有所不同。首先,复制 www.conf
。
更改 librenms.conf
文件。
cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/librenms.conf
vi /etc/php-fpm.d/librenms.conf
将“[www]”更改为“[librenms]”。
将用户和组更改为“librenms”。
user = librenms
group = librenms
更改“listen”行以反映一个唯一的名称。
listen = /run/php-fpm-librenms.sock
保存更改并退出文件。如果这是此计算机上运行的唯一 Web 服务,您可以删除旧的
rm -f /etc/php-fpm.d/www.conf
配置 httpd
¶
首先创建此文件。
vi /etc/httpd/conf.d/librenms.conf
在此文件中输入以下内容:
<VirtualHost *:80>
DocumentRoot /opt/librenms/html/
ServerName librenms.example.com
AllowEncodedSlashes NoDecode
<Directory "/opt/librenms/html/">
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
# Enable http authorization headers
<IfModule setenvif_module>
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</IfModule>
<FilesMatch ".+\.php$">
SetHandler "proxy:unix:/run/php-fpm-librenms.sock|fcgi://"
</FilesMatch>
</VirtualHost>
您应该删除旧的默认站点 welcome.conf
。
rm /etc/httpd/conf.d/welcome.conf
启用 httpd
和 php-fpm
。
systemctl enable --now httpd
systemctl enable --now php-fpm
SELinux¶
如果您不打算使用 SELinux,请跳到下一节。如果您在不支持 SELinux 的容器上使用 LibreNMS,或者容器默认不包含 SELinux,这也可能适用。
要使用 SELinux 设置所有内容,您需要安装一个额外的软件包。
dnf install policycoreutils-python-utils
配置 LibreNMS 上下文¶
您需要设置以下上下文才能使 LibreNMS 与 SELinux 正常工作:
semanage fcontext -a -t httpd_sys_content_t '/opt/librenms/html(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/opt/librenms/(logs|rrd|storage)(/.*)?'
restorecon -RFvv /opt/librenms
setsebool -P httpd_can_sendmail=1
setsebool -P httpd_execmem 1
chcon -t httpd_sys_rw_content_t /opt/librenms/.env
允许 fping
¶
在任何地方创建一个名为 http_fping.tt
的文件。位置无关紧要。安装在此处进行。此文件的内容是:
module http_fping 1.0;
require {
type httpd_t;
class capability net_raw;
class rawip_socket { getopt create setopt write read };
}
#============= httpd_t ==============
allow httpd_t self:capability net_raw;
allow httpd_t self:rawip_socket { getopt create setopt write read };
使用以下命令安装此文件:
checkmodule -M -m -o http_fping.mod http_fping.tt
semodule_package -o http_fping.pp -m http_fping.mod
semodule -i http_fping.pp
如果您遇到问题并怀疑是 SELinux 问题,请运行以下命令:
audit2why < /var/log/audit/audit.log
firewalld
配置¶
firewalld
说明遵循官方文档。
用于 firewalld
允许规则的命令如下:
firewall-cmd --zone public --add-service http --add-service https
firewall-cmd --permanent --zone public --add-service http --add-service https
作者对这种简单的 firewalld
规则集有些疑问。此规则允许您的 Web 服务向世界开放,但这是否是您对监控服务器的需求?
通常**不是**这种情况。如果您想采用更精细的方法使用 firewalld
,请参阅本文档,然后根据需要修改您的 firewalld
规则。
为 lnms
命令启用符号链接和选项卡自动补全¶
首先,您需要在 lnms
命令上创建一个符号链接,以便可以从任何地方运行它。
ln -s /opt/librenms/lnms /usr/bin/lnms
接下来,为自动补全进行设置。
cp /opt/librenms/misc/lnms-completion.bash /etc/bash_completion.d/
配置 snmpd
¶
SNMP 代表“简单网络管理协议”,被许多监控程序用于提取数据。此处使用的版本 2 需要一个“社区字符串”,该字符串特定于您的环境。
将此“社区字符串”分配给您想要监控的网络设备,以便 snmpd
(这里的“d”代表守护进程)能够找到它。如果您的网络不是全新的,您可能已经在使用“社区字符串”了。
从 LibreNMS 复制 snmpd.conf
文件。
cp /opt/librenms/snmpd.conf.example /etc/snmp/snmpd.conf
编辑此文件并将社区字符串从“RANDOMSTRINGGOESHERE”更改为您使用的或将使用的任何社区字符串。在本例中,为“LABone”。
vi /etc/snmp/snmpd.conf
更改此行:
com2sec readonly default RANDOMSTRINGGOESHERE
为:
com2sec readonly default LABone
保存更改并退出。
使用 cron 作业实现自动化¶
运行以下命令设置 cron 作业。
cp /opt/librenms/librenms.nonroot.cron /etc/cron.d/librenms
轮询器必须运行一次,即使没有什么可轮询的,然后再运行 Web 安装过程。这可以节省一些故障排除的时间,避免在后续的验证部分中出现轮询器错误时感到困惑。
轮询器以“librenms”用户身份运行,虽然可以切换到该用户并运行 cron 文件,但最好让轮询器自行完成。确保至少经过 5 分钟让 cron 运行,然后继续“Web 安装”部分。
日志轮转¶
LibreNMS 随着时间的推移会创建大量日志。您需要设置日志轮转以节省磁盘空间。为此,请运行此命令:
cp /opt/librenms/misc/librenms.logrotate /etc/logrotate.d/librenms
安装 composer(解决方法)¶
PHP Composer 是当前安装的要求(在之前的过程中已提到)。如果之前运行的安装失败,您将需要执行此操作。
开始之前,您需要将当前版本的 php
二进制文件链接到路径中的某个位置。此过程使用了 REMI 安装来获取正确版本的 PHP,而它并未安装在路径中。
这可以通过符号链接来修复,并且将使您在执行后续步骤时更加轻松。
ln -s /opt/remi/php81/root/usr/bin/php /usr/bin/php
访问Composer 网站,并确保以下步骤没有更改。然后,在机器上的某个地方运行这些命令。完成后,您将移动 composer。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
将其移动到路径中的某个位置。为此使用 /usr/local/bin/
。
mv composer.phar /usr/local/bin/composer
Web 安装¶
在安装和配置好所有组件后,下一步是通过 Web 完成安装。在实验室版本中,您没有设置主机名。要完成设置,您需要通过 IP 地址访问 Web 服务器。
实验室机器的 IP 地址是 192.168.1.140。在 Web 浏览器中导航到以下地址以完成安装:
http://192.168.1.140/librenms
如果一切正常,将跳转到安装前检查页面。如果所有项目都显示为绿色,您可以继续。
LibreNMS 徽标下方有四个按钮。最左边的第一个按钮用于安装前检查。第二个按钮用于数据库。您将需要之前为“librenms”数据库用户设置的密码。
如果您一直跟着操作,那么您已将其保存在安全的地方。点击“Database”按钮。此处只需要“User”和“Password”。完成此操作后,点击“Check Credentials”按钮。
如果验证通过(显示绿色),请点击“Build Database”按钮。
现在,“Create Admin User”按钮将处于活动状态。点击它。接下来会提示输入管理员用户名。在实验室中,它是“admin”。为该用户创建一个密码。
确保密码安全,并将其保存在安全的地方,例如密码管理器。您还需要添加管理员用户的电子邮件地址。完成后,点击“Add User”按钮。
您现在将看到“Finish Install”屏幕。完成安装还剩最后一项:一个要求您“validate your install”(验证您的安装)的链接。
点击链接。将跳转到登录页面。使用您的管理员用户名和密码登录。
添加设备¶
再次强调,其中一个假设是您正在使用 SNMP v2。请记住,您添加的每个设备都必须属于您的社区字符串。这里作者使用了两个设备示例:一个 Ubuntu 工作站和一个 CentOS 服务器。
您很可能需要添加托管交换机、路由器和其他设备。作者的经验告诉您,添加交换机和路由器比添加工作站和服务器更容易。
Ubuntu 工作站设置¶
首先,在工作站上安装 snmpd
并更新软件包以确保安全。
sudo update && sudo apt-get upgrade && sudo apt-get install snmpd
接下来,您需要更改 snmpd.conf
文件。
sudo vi /etc/snmpd/snmpd.conf
找到描述您工作站的行,并将其更改为标识工作站的内容。
sysLocation Desktop
sysContact Username <user@mydomain.com>
当您在 Ubuntu 上安装 snmpd
时,它仅绑定到本地地址。它不监听您的机器 IP 地址。这不允许 LibreNMS 连接到它。您需要注释掉此行。
agentaddress 127.0.0.1,[::1]
添加新行:(在此示例中,您的工作站的 IP 地址是 192.168.1.122,您设置的 UDP 端口是“161”)
agentAddress udp:127.0.0.1:161,udp:192.168.1.122:161
您需要指定只读访问的社区字符串。找到以下行并按所示方式注释掉它们。
#rocommunity public default -V systemonly
#rocommunity6 public default -V systemonly
添加一行:
rocommunity LABone
保存更改并退出。
启用并启动 snmpd
。
sudo systemctl enable snmpd
sudo systemctl start snmpd
如果您在内部工作站上运行防火墙,则需要更改防火墙以允许来自监控服务器或网络的 UDP 流量。LibreNMS 还希望能够“ping”您的设备。请确保来自服务器的 ICMP 端口 8 不被过滤。
CentOS 或 Rocky Linux 服务器设置¶
假定您是 root 用户,或者您可以使用 sudo
提升权限。您需要安装一些软件包。
dnf install net-snmp net-snmp-utils
创建一个 snmpd.conf
文件。与其尝试导航包含的文件,不如移动此文件以重命名它,然后创建一个全新的空文件。
mv /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig
和
vi /etc/snmp/snmpd.conf
将此复制到新文件中:
# Map 'LABone' community to the 'AllUser'
# sec.name source community
com2sec AllUser default LABone
# Map 'ConfigUser' to 'ConfigGroup' for SNMP Version 2c
# Map 'AllUser' to 'AllGroup' for SNMP Version 2c
# sec.model sec.name
group AllGroup v2c AllUser
# Define 'SystemView', which includes everything under .1.3.6.1.2.1.1 (or .1.3.6.1.2.1.25.1)
# Define 'AllView', which includes everything under .1
# incl/excl subtree
view SystemView included .1.3.6.1.2.1.1
view SystemView included .1.3.6.1.2.1.25.1.1
view AllView included .1
# Give 'ConfigGroup' read access to objects in the view 'SystemView'
# Give 'AllGroup' read access to objects in the view 'AllView'
# context model level prefix read write notify
access AllGroup "" any noauth exact AllView none none
CentOS 和 Rocky 使用映射约定来定向事物。显示的文件包含注释以定义正在发生的事情,但未包含原始文件中的所有杂乱内容。
进行更改后,保存并退出文件。
启用并启动 snmpd
。
systemctl enable snmpd
systemctl start snmpd
防火墙¶
如果您运行的是服务器,那么您**正在**运行防火墙,对吗?如果您运行的是 firewalld
,则假定您使用“trusted”区域,并且只想允许来自您的监控服务器 192.168.1.140 的所有流量。
firewall-cmd --zone=trusted --add-source=192.168.1.140 --permanent
如果“trusted”区域不适合您的环境,请根据需要进行更改。在添加规则之前,请考虑您的规则及其影响。
在 Librenms 中添加设备¶
在您的示例设备已配置为接受来自 LibreNMS 服务器的 SNMP 流量后,下一步是将这些设备添加到 LibreNMS。打开 LibreNMS 的 Web 界面,然后点击添加设备。
输入测试设备使用的信息。首先输入 Ubuntu 工作站的 IP。在此示例中,为 192.168.1.122。在“Community”字段中添加“LABone”社区字符串。
点击“Add Device”按钮。假设一切正确,此过程将成功完成。
如果您遇到“添加失败”错误,请检查工作站的 SNMP 设置或防火墙(如果存在)。对您的 CentOS 服务器重复“Add Device”过程。
获取告警¶
正如一开始提到的,本文档只会帮助您开始使用 LibreNMS。存在大量附加配置项,一个广泛的 API(应用程序编程接口),一个提供海量交付选项的告警系统,称为“Transports”,等等。
本文档不包含任何告警规则创建过程。相反,您将编辑开箱即用的内置告警规则“Device Down! Due to no ICMP response”。对于“Transports”,使用“Mail”,也就是电子邮件。请注意,您不限于此告警。
要使用电子邮件进行传输,电子邮件必须正常工作。使用此Postfix 过程来完成此操作。
传输方式¶
您需要一种发送告警的方式。如前所述,LibreNMS 支持大量的传输方式。此处使用的是电子邮件告警,定义为“Mail”传输。要设置传输:
- 转到仪表板。
- 将鼠标悬停在“Alerts”上。
- 向下滚动到“Alert Transports”并点击它。
- 点击“Create alert transport”(创建告警传输)按钮(注意“Create transport group”按钮。您可以使用它将告警发送给几个人)。
- 在“Transport name:”字段中,输入“Alert By Email”。
- 在“Transport type:”字段中,使用下拉列表选择“Mail”。
- 确保“Default alert:”字段为“On”。
- 在“Email:”字段中,输入管理员的电子邮件地址。
将设备组织到组中¶
设置告警的最佳方法是逻辑地组织您的设备。当前,您在设备中有工作站和服务器。通常,您不会将两者结合起来,就像这里一样。
此示例也是多余的,因为存在一个“All Devices”组,该组也可以用于此目的。要设置设备组:
- 转到仪表板。
- 将鼠标悬停在“Devices”上。
- 向下滚动到“Manage Groups”并点击它。
- 点击“+ New Device Group”(+ 新设备组)按钮。
- 在“Name”字段中,输入“ICMP Group”。
- 在 description(描述)字段中输入任何有助于描述该组的内容。
- 将“Type”(类型)字段从“Dynamic”(动态)更改为“Static”(静态)。
- 将每个设备添加到“Select Devices”(选择设备)字段中,然后保存您的更改。
设置告警规则¶
接下来配置告警规则。默认情况下,LibreNMS 已为您创建了几个告警规则。
- 转到仪表板。
- 将鼠标悬停在“Alerts”上。
- 向下滚动到“Alert Rules”(告警规则)并点击它。
- 此处最顶部的活动规则将是“Device Down! Due to no ICMP response.”(设备离线!由于无 ICMP 响应)。转到“Action”(操作)(最右边的列)并点击铅笔图标以编辑规则。
- 将顶部的所有字段保留为默认值。在“Match devices, groups and locations list:”字段中,点击该字段内部。
- 从列表中选择“ICMP Group”。
- 确保“All devices except in list:”字段为“Off”。
- 点击“Transports:”字段内部,选择“Mail: Alert By Email”,然后保存您的规则。
保存之前,您的规则将是:
现在,如果这两个设备离线或恢复,您将通过电子邮件收到告警。
结论¶
LibreNMS 是一个功能强大的监控工具,在一个应用程序中集成了全套功能。本文档**仅仅**触及了其功能皮毛。一些更简单的屏幕并未显示。
当您添加设备时,假定所有 SNMP 属性都设置正确,您将开始在每个设备上看到带宽、内存利用率和 CPU 利用率图。此实验室未向您展示除“Mail”之外的丰富传输方式。
本文档的内容足以让您开始监控您的环境。LibreNMS 需要一些时间才能精通所有元素。您应该访问该项目的出色文档以获取更多信息。
作者:Steven Spencer
贡献者:Ezequiel Bruni, Ganna Zhyrnova