跳至内容

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

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

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 Prechecks

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

如果您一直按照步骤进行,那么您应该将其保存在安全的地方。单击“数据库”按钮。这里只需要“用户”和“密码”。执行完此操作后,单击“检查凭据”按钮。

LibreNMS Database

如果返回绿色,请单击“构建数据库”按钮。

LibreNMS Database Status

现在“创建管理员用户”按钮将变为可用。单击此按钮。接下来将提示您输入管理员用户名。在实验室中,它是“admin”。为该用户创建一个密码。

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

LibreNMS Administrative User

现在您将看到一个“完成安装”屏幕。将只剩下一个项目需要完成安装,即一条要求您“验证安装”的行。

单击链接。将重定向到登录页面。使用您的管理员用户和密码登录。

添加设备

同样,其中一个假设是您使用的是 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。在“社区”字段中添加“LABone”社区字符串。

单击“添加设备”按钮。假设一切正确,此过程将成功完成。

如果您遇到“添加失败”错误,请检查工作站的 SNMP 设置,或者检查防火墙(如果存在)。对 CentOS 服务器重复“添加设备”过程。

接收警报

如开头所述,本文档仅供您开始使用 LibreNMS。存在大量其他配置项、一个广泛的 API(应用程序编程接口)、一个提供大量传递选项的警报系统,称为“传输”,以及更多内容。

本文档不包含任何警报规则创建步骤。相反,您将编辑内置的警报规则“设备故障!由于没有 ICMP 响应”,该规则在开箱即用时预先配置。对于“传输”,请使用“邮件”,这只是电子邮件。请注意,您不限于此警报。

邮件必须正常工作才能使用电子邮件进行传输。使用此Postfix 流程来启动它。

传输

您需要一种发送警报的方式。如前所述,LibreNMS 支持大量传输。此处使用定义为“邮件”传输的电子邮件警报。要设置传输

  1. 转到仪表板
  2. 将鼠标悬停在“警报”上
  3. 向下滚动到“警报传输”,然后单击它
  4. 单击“创建警报传输”按钮(注意“创建传输组”按钮。您可以使用此按钮让警报发送给多个人)
  5. 在“传输名称:”字段中,输入“通过电子邮件提醒”
  6. 在“传输类型:”字段中,使用下拉菜单选择“邮件”
  7. 确保“默认警报:”字段为“开启”
  8. 在“电子邮件:”字段中,输入管理员的电子邮件地址

将设备组织到组中

设置警报的最佳方式是根据逻辑组织您的设备。目前,您在设备中有一个工作站和一台服务器。通常情况下,您不会将两者结合起来,就像这里所做的那样。

此示例也具有冗余性,因为存在一个“所有设备”组,该组同样适用于此。要设置设备组

  1. 转到仪表板
  2. 将鼠标悬停在“设备”上
  3. 向下滚动到“管理组”,然后单击它
  4. 单击“+ 新建设备组”按钮
  5. 在“名称”字段中,输入“ICMP 组”
  6. 在描述字段中输入您认为有助于描述该组的任何内容
  7. 将“类型”字段从“动态”更改为“静态”
  8. 将每个设备添加到“选择设备”字段中,然后保存更改

设置警报规则

接下来配置警报规则。默认情况下,LibreNMS 已为您创建了一些警报规则

  1. 转到仪表板
  2. 将鼠标悬停在“警报”上
  3. 向下滚动到“警报规则”,然后单击它
  4. 此处最上面的活动规则将是“设备故障!由于没有 ICMP 响应”。转到“操作”(最右边一列),然后单击铅笔图标以编辑规则。
  5. 将顶部所有字段保持默认值。在“匹配设备、组和位置列表:”字段中,单击该字段内部。
  6. 从列表中选择“ICMP 组”
  7. 确保“列表中除外所有设备:”字段为“关闭”
  8. 单击“传输:”字段内部,选择“邮件:通过电子邮件提醒”,然后保存规则。

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

LibreNMS Alert Rule

如果这两个设备出现故障或恢复正常,它们现在将通过电子邮件通知您。

结论

LibreNMS 是一款功能强大的监控工具,在一个应用程序中提供了完整的特性集。本文档仅略微涉及其功能。一些更简单的屏幕未显示。

当您添加设备时,假设所有 SNMP 属性都已正确设置,您将开始在每个设备上接收带宽、内存使用率和 CPU 使用率图表。本实验室未向您展示除“邮件”以外的众多可用传输。

本文档已向您展示了足够的信息,让您能够很好地开始监控您的环境。掌握 LibreNMS 的所有元素需要一些时间。您应该访问该项目的出色的文档以获取更多信息。

作者:史蒂文·斯宾塞

贡献者:埃塞奎尔·布鲁尼、甘娜·齐尔诺娃