LibreNMS 监控服务器¶
简介¶
网络和系统管理员几乎总是需要某种形式的监控。 这可能包括绘制路由器端点的带宽使用情况图表,监控各种服务器上运行的服务状态,以及更多。 存在许多监控选项,但一个好的选项,它在同一个屋檐下提供了许多(如果不是全部)监控组件,就是 LibreNMS。
本文档只是 LibreNMS 的起点。 作者将引导您使用该项目的出色(且广泛)文档来了解更多选项。 作者使用了许多其他监控解决方案,例如 Nagios 和 Cacti,但 LibreNMS 提供了这两个项目单独提供的功能。
安装将严格遵循官方安装说明。 对该过程的解释和微小更改使此过程优于该出色文档。
先决条件、假设和约定¶
- 运行 Rocky Linux 的服务器或容器(是的,LibreNMS 可以在容器中运行。如果您有很多内容要监控,最好的选择是在独立硬件上安装)。 所有命令都假设 Rocky Linux 新安装。
- 假设:您可以以 root 身份运行命令,或者可以使用 sudo 来提升权限
- 熟悉命令行工具,包括文本编辑器,例如 vi
- 假设:使用 SNMP v2。如果您想使用 SNMP v3,LibreNMS 支持它并可以使用。 您需要将设备上的 SNMP 配置和选项切换到与 v3 匹配。
- 本文档包含 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://localhost"
</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,请跳到下一节。如果您在容器上使用 LibreNMS,并且容器不支持 SELinux 或默认情况下不包含 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.cn/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”设置的密码。
如果您一直按照步骤进行,那么您应该将其保存在安全的地方。单击“数据库”按钮。这里只需要“用户”和“密码”。执行完此操作后,单击“检查凭据”按钮。
如果返回绿色,请单击“构建数据库”按钮。
现在“创建管理员用户”按钮将变为可用。单击此按钮。接下来将提示您输入管理员用户名。在实验室中,它是“admin”。为该用户创建一个密码。
确保密码安全,并将其记录在安全的地方,例如密码管理器。您还需要添加管理用户的电子邮件地址。完成后,单击“添加用户”按钮。
现在您将看到一个“完成安装”屏幕。将只剩下一个项目需要完成安装,即一条要求您“验证安装”的行。
单击链接。将重定向到登录页面。使用您的管理员用户和密码登录。
添加设备¶
同样,其中一个假设是您使用的是 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。在“社区”字段中添加“LABone”社区字符串。
单击“添加设备”按钮。假设一切正确,此过程将成功完成。
如果您遇到“添加失败”错误,请检查工作站的 SNMP 设置,或者检查防火墙(如果存在)。对 CentOS 服务器重复“添加设备”过程。
接收警报¶
如开头所述,本文档仅供您开始使用 LibreNMS。存在大量其他配置项、一个广泛的 API(应用程序编程接口)、一个提供大量传递选项的警报系统,称为“传输”,以及更多内容。
本文档不包含任何警报规则创建步骤。相反,您将编辑内置的警报规则“设备故障!由于没有 ICMP 响应”,该规则在开箱即用时预先配置。对于“传输”,请使用“邮件”,这只是电子邮件。请注意,您不限于此警报。
邮件必须正常工作才能使用电子邮件进行传输。使用此Postfix 流程来启动它。
传输¶
您需要一种发送警报的方式。如前所述,LibreNMS 支持大量传输。此处使用定义为“邮件”传输的电子邮件警报。要设置传输
- 转到仪表板
- 将鼠标悬停在“警报”上
- 向下滚动到“警报传输”,然后单击它
- 单击“创建警报传输”按钮(注意“创建传输组”按钮。您可以使用此按钮让警报发送给多个人)
- 在“传输名称:”字段中,输入“通过电子邮件提醒”
- 在“传输类型:”字段中,使用下拉菜单选择“邮件”
- 确保“默认警报:”字段为“开启”
- 在“电子邮件:”字段中,输入管理员的电子邮件地址
将设备组织到组中¶
设置警报的最佳方式是根据逻辑组织您的设备。目前,您在设备中有一个工作站和一台服务器。通常情况下,您不会将两者结合起来,就像这里所做的那样。
此示例也具有冗余性,因为存在一个“所有设备”组,该组同样适用于此。要设置设备组
- 转到仪表板
- 将鼠标悬停在“设备”上
- 向下滚动到“管理组”,然后单击它
- 单击“+ 新建设备组”按钮
- 在“名称”字段中,输入“ICMP 组”
- 在描述字段中输入您认为有助于描述该组的任何内容
- 将“类型”字段从“动态”更改为“静态”
- 将每个设备添加到“选择设备”字段中,然后保存更改
设置警报规则¶
接下来配置警报规则。默认情况下,LibreNMS 已为您创建了一些警报规则
- 转到仪表板
- 将鼠标悬停在“警报”上
- 向下滚动到“警报规则”,然后单击它
- 此处最上面的活动规则将是“设备故障!由于没有 ICMP 响应”。转到“操作”(最右边一列),然后单击铅笔图标以编辑规则。
- 将顶部所有字段保持默认值。在“匹配设备、组和位置列表:”字段中,单击该字段内部。
- 从列表中选择“ICMP 组”
- 确保“列表中除外所有设备:”字段为“关闭”
- 单击“传输:”字段内部,选择“邮件:通过电子邮件提醒”,然后保存规则。
在保存之前,您的规则将是
如果这两个设备出现故障或恢复正常,它们现在将通过电子邮件通知您。
结论¶
LibreNMS 是一款功能强大的监控工具,在一个应用程序中提供了完整的特性集。本文档仅略微涉及其功能。一些更简单的屏幕未显示。
当您添加设备时,假设所有 SNMP 属性都已正确设置,您将开始在每个设备上接收带宽、内存使用率和 CPU 使用率图表。本实验室未向您展示除“邮件”以外的众多可用传输。
本文档已向您展示了足够的信息,让您能够很好地开始监控您的环境。掌握 LibreNMS 的所有元素需要一些时间。您应该访问该项目的出色的文档以获取更多信息。
作者:史蒂文·斯宾塞
贡献者:埃塞奎尔·布鲁尼、甘娜·齐尔诺娃