Cacti 部署笔记

本文记录在 Debian Bookworm(12.7) 上,部署 Cacti 开源(Cacti/cacti)网络监控系统注意点。

安装 nginxsnmpd 与配置 snmpd

snmpd 会用到私有 MIBS,因此需要在 /etc/apt/sources.list 中加入 non-free 软件包仓库。

# /etc/apt/sources.list

deb https://mirrors.huaweicloud.com/debian bookworm main
deb https://mirrors.huaweicloud.com/debian bookworm-updates main
deb https://mirrors.huaweicloud.com/debian-security bookworm-security main
deb https://mirrors.huaweicloud.com/debian bookworm-backports main

然后执行命令

$ sudo apt install -y nginx snmpd

安装 nginxsnmpd 两个软件包。

配置 snmpd

  • 修改 /etc/default/snmpd,加入 export MIBS=ALL

  • 修改 /etc/snmp/snmp.conf,加入

mibs :
rocommunity public localhost

注意:加入这个配置后,sudo systemctl status snmpd 会显示如下信息。

 snmpd[11916]: /etc/snmp/snmp.conf: line 5: Warning: Unknown token: rocommunity.

似乎这个告警并不重要。

下载 non-free 的 MIB 文件

$ sudo apt install -y snmp-mibs-downloader
$ sudo service snmpd restart
$ sudo service snmpd status

安装 Cacti 与 Spine

cacti-spine,Spine 是 Cacti 的多线程数据收集器,能够大规模地从连接了网络的设备中提取数据。他使 Cacti 系统安装,扩大到每个 Cacti 系统监控上万台主机。Spine 采用 C 语言编写,利用 POSIX 线程的优势,直接与 Net-SNMP 库链接,以达到最佳的数据采集速度。Spine 是默认的 cmd.php 数据收集器的替代品,后者的可扩展性有限。

$ sudo apt install -y cacti cacti-spine

在安装 Cacti 的过程中,系统会询问咱们是否希望 dbconfig-common 自动为 Cacti 设置 MySQL。这将为 Cacti 创建用户和数据库,然后导入必要的数据。

注意:这里设置的口令,将是安装随后登录用到的口令,而非网络上所说的 admin/admin

Cacti 将安装在 /usr/share/cacti但是,我们不会使用这个 apt 安装的 Cacti

Nginx 配置

我们会使用从 Cacti 下载 的源码包(cacti-1.2.28.tar.gz),解压到 /home/it/cacti-1.2.28,然后另外创建目录 mrtg,并在其下建立到 /home/it/cacti-1.2.28 的软链接(建立软链接的目的是后面更方便升级,以及 Nginx 配置的实现)。

$ mkdir mrtg && cd mrtg
$ ln -s ~/cacti-1.2.28 cacti

Nginx 运行在 it:www-data 下,因此需要将 /usr/share/cacti 目录修改为 it:www-data 所有。并建立 /var/log/cacti 及设置为 it:www-data 所有。

Nginx 配置文件

$ cat /etc/nginx/conf.d/cacti.conf
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;

server {
        # listen 443 ssl default deferred;
        # server_name mrtg.xfoss.com;
        listen 8081;
        server_name _;
        # listen 443 ssl;
        root /home/it/mrtg/;
        index index.php;
        charset utf-8;

        access_log /var/log/nginx/cacti-access.log;
        error_log /var/log/nginx/cacti-error.log;


        location / {
                # try_files $uri $uri/ /index.php$query_string;
                root /home/it/mrtg/cacti;
                index index.php index.html;
        }

        location ~ \.php$ {
                alias /home/it/mrtg/cacti;
                index index.php
                        try_files $uri $uri/ =404;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;

                # you may have to change the path here for your OS
                fastcgi_pass unix:/run/php/php8.3-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }

        location /cacti {
                root /home/it/mrtg/;
                index index.php index.html index.htm;

                location ~ ^/cacti/(.+\.php)$ {
                        try_files $uri =404;
                        root /home/it/mrtg;

                        # you may have to change the path here for your OS
                        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        include fastcgi_params;
                }

                location ~* ^/cacti/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                        expires max;
                        log_not_found off;
                }
        }

        ssl_certificate /etc/ssl/xfoss.com/PEM/_.xfoss.com.pem;
        ssl_certificate_key /etc/ssl/xfoss.com/PEM/_.xfoss.com.privatekey.pem;
}

上述在 /home/it/mrtg 下建立到 /home/it/cacti-1.2.28 软链接的目的,也是因为这个 Nginx 配置文件,否则会出现如下问题。

2024/10/16 15:56:27 [error] 24759#24759: *1 "/home/it/cacti-1.2.28/cacti/install/index.php" is not found (2: No such file or directory), client: 192.168.234.1, server: _, request: "GET /cacti/install/ HTTP/1.1", host: "192.168.234.130:8081"

图形安装

在上述配置下,就可以打开 http://192.168.234.130:8081 URL,进入图形界面了。此时需要以 admin/admin 进入安装过程,并在随后立即要求修改密码(要求有大小写字母特殊符号)。然后安装过程检查环境,需要根据提示,修改以下配置文件。

  • /etc/php/8.3/fpm/php.ini

  • /etc/mysql/mariadb.conf.d/50-server.cnf

注意:其中两项 MariaDB 的配置:

max_heap_table_size   = 64M
tmp_table_size        = 64M

在上述配置文件中并没有,需要新加入。

修改配置后,执行以下命令分别重启 php8.3-fpmmariadb

sudo systemctl restart php8.3-fpm mariadb

Cacti 安装过程-环境检查

随后安装过程环境检查通过,正式进入安装步骤。其间,根据提示还需执行以下命令创建出一个所需目录。

$ sudo mkdir -p /var/lib/cacti/csrf
$ sudo chown -R it:it /var/lib/cacti/csrf/

安装完成后,如下图所示。

Cacti 安装成功后截图

交换机配置与添加设备

首先,需要在要监控的交换机上开启并配置 snmp-agent,根据品牌型号的不同,配置有所不同。

H3C S5500V2-54S-EI

system-view

snmp-agent
snmp-agent community read h3ca2022
# 可写权限配置为可选配置
snmp-agent community write h3ca123456
# 适应所有snmp版本
snmp-agent sys-info version v2c

注意:其中 h3ca2022h3ca123456 分别是 readwrite 的秘密。

使用 snmpwalk 命令验证:

snmpwalk -v 2c -c h3ca123456 10.15.0.1

华为 FuturMatrix S5735S-L48T4S-A1

[FutureMatrix] snmp-agent
[FutureMatrix] snmp-agent protocol source-interface vlanif 999
[FutureMatrix] snmp-agent sys-info version ?
[FutureMatrix] snmp-agent sys-info version v2c
[FutureMatrix] snmp-agent community read hwca123456
[FutureMatrix] snmp-agent target-host trap address udp-domain 10.15.0.249 params securityname hwca123456 v2c
[FutureMatirx] ctrl + z 
<FutureMatrix> save

使用 snmpwalk 命令验证:

snmpwalk -v 2c -c h3ca123456 10.11.0.1

在 Cacti 中添加交换机

此步骤涉及 Cacti 中设备添加,以及随后的从设备创建图形。

添加设备

Cacti 添加设备

图 1,Cacti 添加设备

提供设备参数

图 2,提供设备参数

创建图形

Cacti 从设备创建图形

此外,Cacit 中还有树,Trees,的设置等,都较为简单。在查看图形时,点击 Graphs 标签页的标签,即可调出侧边栏的 Default Tree 来。

参考

Last change: 2024-10-22, commit: b05b54d