跳至内容

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

启用 httpdphp-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 命令上创建一个符号链接,以便可以从任何地方运行它。

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 Prechecks

LibreNMS 徽标下方有四个按钮。最左边的第一个按钮用于安装前检查。第二个按钮用于数据库。您将需要之前为“librenms”数据库用户设置的密码。

如果您一直跟着操作,那么您已将其保存在安全的地方。点击“Database”按钮。此处只需要“User”和“Password”。完成此操作后,点击“Check Credentials”按钮。

LibreNMS Database

如果验证通过(显示绿色),请点击“Build Database”按钮。

LibreNMS Database Status

现在,“Create Admin User”按钮将处于活动状态。点击它。接下来会提示输入管理员用户名。在实验室中,它是“admin”。为该用户创建一个密码。

确保密码安全,并将其保存在安全的地方,例如密码管理器。您还需要添加管理员用户的电子邮件地址。完成后,点击“Add User”按钮。

LibreNMS Administrative 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 界面,然后点击添加设备。

LibreNMS Add Device

输入测试设备使用的信息。首先输入 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”传输。要设置传输:

  1. 转到仪表板。
  2. 将鼠标悬停在“Alerts”上。
  3. 向下滚动到“Alert Transports”并点击它。
  4. 点击“Create alert transport”(创建告警传输)按钮(注意“Create transport group”按钮。您可以使用它将告警发送给几个人)。
  5. 在“Transport name:”字段中,输入“Alert By Email”。
  6. 在“Transport type:”字段中,使用下拉列表选择“Mail”。
  7. 确保“Default alert:”字段为“On”。
  8. 在“Email:”字段中,输入管理员的电子邮件地址。

将设备组织到组中

设置告警的最佳方法是逻辑地组织您的设备。当前,您在设备中有工作站和服务器。通常,您不会将两者结合起来,就像这里一样。

此示例也是多余的,因为存在一个“All Devices”组,该组也可以用于此目的。要设置设备组:

  1. 转到仪表板。
  2. 将鼠标悬停在“Devices”上。
  3. 向下滚动到“Manage Groups”并点击它。
  4. 点击“+ New Device Group”(+ 新设备组)按钮。
  5. 在“Name”字段中,输入“ICMP Group”。
  6. 在 description(描述)字段中输入任何有助于描述该组的内容。
  7. 将“Type”(类型)字段从“Dynamic”(动态)更改为“Static”(静态)。
  8. 将每个设备添加到“Select Devices”(选择设备)字段中,然后保存您的更改。

设置告警规则

接下来配置告警规则。默认情况下,LibreNMS 已为您创建了几个告警规则。

  1. 转到仪表板。
  2. 将鼠标悬停在“Alerts”上。
  3. 向下滚动到“Alert Rules”(告警规则)并点击它。
  4. 此处最顶部的活动规则将是“Device Down! Due to no ICMP response.”(设备离线!由于无 ICMP 响应)。转到“Action”(操作)(最右边的列)并点击铅笔图标以编辑规则。
  5. 将顶部的所有字段保留为默认值。在“Match devices, groups and locations list:”字段中,点击该字段内部。
  6. 从列表中选择“ICMP Group”。
  7. 确保“All devices except in list:”字段为“Off”。
  8. 点击“Transports:”字段内部,选择“Mail: Alert By Email”,然后保存您的规则。

保存之前,您的规则将是:

LibreNMS Alert Rule

现在,如果这两个设备离线或恢复,您将通过电子邮件收到告警。

结论

LibreNMS 是一个功能强大的监控工具,在一个应用程序中集成了全套功能。本文档**仅仅**触及了其功能皮毛。一些更简单的屏幕并未显示。

当您添加设备时,假定所有 SNMP 属性都设置正确,您将开始在每个设备上看到带宽、内存利用率和 CPU 利用率图。此实验室未向您展示除“Mail”之外的丰富传输方式。

本文档的内容足以让您开始监控您的环境。LibreNMS 需要一些时间才能精通所有元素。您应该访问该项目的出色文档以获取更多信息。

作者:Steven Spencer

贡献者:Ezequiel Bruni, Ganna Zhyrnova