Cacti

出自 ArchWiki

Cacti 是一个基于 Web 的系统监控和绘图解决方案。

安装

要使用 Cacti,你需要一个可用的 Web 服务器(例如 NginxApache HTTP Server)设置,该服务器将请求转发到应用服务器(例如 uWSGIphp-fpm)。

接下来,安装 cacti 并配置 MariaDB(如果将使用本地 MySQL 服务器)。

注意: Cacti 应该仅通过 TLS 访问(除非直接从运行它的机器访问),因为它否则会暴露密码和用户数据。

配置

要将 Cacti 部署在顶级域名下而不是 /cacti/ 下(即 https://example.tld/ 而不是 https://example.tld/cacti/),请使用 $url_path 配置选项

/etc/webapps/cacti/config.php
$url_path = '/';

PHP

注意: 由于未解决的上游问题,Cacti 无法保持在其自身的 PHP 环境中 [1]。必需的 PHP 模块必须在系统的全局 /etc/php/php.ini 中激活。

Cacti 需要启用以下 PHP 扩展

/etc/php/php.ini
extension=gd
extension=gettext
extension=gmp
extension=ldap
extension=mysqli
extension=pdo_mysql
extension=snmp
extension=sockets

Cacti 需要 PHPopen_basedir [2] 中的某些目录和可执行文件才能正常运行

/tmp/:/usr/share/webapps/cacti:/etc/webapps/cacti:/var/cache/cacti:/var/lib/cacti:/var/log/cacti:/proc/meminfo:/usr/bin/rrdtool:/usr/bin/snmpget:/usr/bin/snmpwalk:/usr/bin/snmpbulkwalk:/usr/bin/snmpgetnext:/usr/bin/snmptrap:/usr/bin/sendmail:/usr/bin/php:/usr/bin/spine:/usr/share/fonts/TTF/

Cacti 需要在 /etc/php/php.ini 中设置 date.timezone。请查看上游文档 [3]时区 以供参考。

SNMP

如果 Cacti 需要监控其运行的机器,请配置 snmpd

MySQL

Cacti 需要自己的数据库来存储其数据,以及一个数据库用户帐户来访问数据库。

以 root 身份运行以下命令

# mysqladmin -u root -p create cactidb
# mysql -u root -p cactidb </usr/share/webapps/cacti/cacti.sql
# mysql -u root -p
mysql> GRANT ALL ON cactidb.* TO cactiuser@localhost IDENTIFIED BY 'some_password';
mysql> FLUSH PRIVILEGES;
mysql> exit

或者,使用 PhpMyAdmin 来实现相同的结果

  • 创建一个名为 cactidb 的空数据库。
  • 将文件 /usr/share/webapps/cacti/cacti.sql 导入到 cactidb 数据库中。
  • 创建一个用户 cactiuser,并授予该用户访问 cactidb 数据库的权限。

添加数据库详细信息

/etc/webapps/cacti/config.php
$database_type = "mysql";
$database_default = "cactidb";
$database_username = "cactiuser";
$database_password = "some_password";

托管

注意: Cacti 需要以其自己的用户和组(即 cacti)运行。它使用 /etc/webapps/cacti/var/lib/cacti/var/log/cacti/run/cacti 分别用于配置、缓存、日志和(可能)套接字!

Apache

此文章或章节需要扩充。

原因: Apache 章节需要 uWSGI 示例。(在 Talk:Cacti 中讨论)

apache Web 服务器 可以借助模块(例如 mod_proxy_fcgimod_proxy_uwsgi)来服务动态 Web 应用程序。

php-fpm

安装 并配置 Apache HTTP Serverphp-fpm。使用以用户和组 cacti 运行的 。套接字文件应可由 http 用户和/或组访问,但需要位于 /run/cacti 下。

在您的 Apache HTTP Server 配置(即 /etc/httpd/conf/httpd.conf)中包含以下配置,并重启 Web 服务器

/etc/httpd/conf/cacti.conf
Alias /cacti "/usr/share/webapps/cacti"
<Directory "/usr/share/webapps/cacti">
    DirectoryIndex index.html index.php
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/cacti/cacti.sock|fcgi://127.0.0.1/"
    </FilesMatch>
    AllowOverride All
    Options FollowSymlinks
    Require all granted
</Directory>

文件 /usr/share/webapps/cacti/.htaccess 也控制访问。配置或删除它。

Nginx

Nginx 可以代理应用程序服务器,例如 php-fpmuWSGI,它们运行动态 Web 应用程序。以下示例描述了基于文件夹的设置,该设置通过非默认端口(为了简单起见)。

提示: 有关 nginx 中的服务器条目管理,请查看 Nginx#管理服务器条目
注意: Postfixadmin 附带了 uWSGI 的配置。

php-fpm

安装 php-fpm。使用 php-fpm 设置 nginx,并使用以用户和组 cacti 运行的 。套接字文件应可由 http 用户和/或组访问,但需要位于 /run/cacti 下。这可以通过将以下行添加到 php-fpm 配置并重启它来实现。

/etc/php/php-fpm.d/www.conf
 
[cacti]
user = cacti
group = cacti
listen = /run/cacti/cacti.sock
listen.owner = http
listen.group = http
pm = ondemand
pm.max_children = 4

nginx 添加以下配置,并重启它。

/etc/nginx/sites-available/cacti.conf
server {
  listen 8081;
  server_name cacti;
  root /usr/share/webapps/cacti/;
  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;
  }
   
  location ~* \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    include fastcgi_params;
    fastcgi_pass unix:/run/cacti/cacti.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_buffer_size 16k;
    fastcgi_buffers 4 16k;
  }
}

uWSGI

安装 uwsgi-plugin-php,为 uWSGI 创建一个每个应用程序的套接字(请参阅 UWSGI#uWSGI 套接字的可访问性 以供参考),并激活 cacti@uwsgi-secure.socket 单元。

为 nginx 添加以下配置,并重启 nginx

/etc/nginx/sites-available/cacti.conf
    server {
      listen 8081;
      server_name cacti;
      root /usr/share/webapps/cacti/;
      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;
      }

      # pass all .php or .php/path urls to uWSGI
      location ~ ^(.+\.php)(.*)$ {
        include uwsgi_params;
        uwsgi_modifier1 14;
        uwsgi_pass unix:/run/cacti/cacti.sock;
      }
    }

设置

打开浏览器并访问 http://your_server/cacti/。您应该会看到 Cacti 安装程序。

  • 使用用户名 "admin" 和密码 "admin" 登录。
  • 根据要求更改密码,然后单击保存
  • 按照剩余的安装步骤和建议进行操作。
  • (可选)如果您选择安装 spine,请按照以下说明进行设置。
    • 单击控制台选项卡左侧面板上的设置
    • 选择Poller 选项卡。
    • 将 Poller 类型更改为 spine。
    • 根据需要调整页面上的任何其他设置,然后单击保存
    • 选择路径选项卡。
    • 将 Spine Poller 文件路径设置为 /usr/bin/spine,然后单击保存

技巧与提示

Spine

(可选)安装 cacti-spineAUR,这是一个更快的 Cacti 轮询器。使用数据库访问详细信息配置它

/etc/spine.conf
DB_User cactiuser
DB_Pass some_password

Systemd

提示: uWSGI 的配置集成了基于 cron 的方法,这使得不需要单独的 systemd 单元。

Cacti 使用轮询器来收集数据,因此创建一个 Systemd 服务来运行 poller.php,以及一个定时器来每 5 分钟运行该服务

/etc/systemd/system/cacti_poller.service
[Unit]
Description=Cacti Poller

[Service]
User=cacti
Type=simple
ExecStart=/usr/bin/php /usr/share/webapps/cacti/poller.php
/etc/systemd/system/cacti_poller.timer
[Unit]
Description=Cacti Poller Timer

[Timer]
OnCalendar=*:0/5:0
Unit=cacti_poller.service
AccuracySec=1

[Install]
WantedBy=multi-user.target
注意: 不要启动或启用 cacti_poller.service。相反,仅启动/启用 cacti_poller.timer,它每 5 分钟调用一次该服务。
提示: journalctl 可用于监视轮询器的日志消息,这些消息将类似于以下内容
Sep 27 15:50:00 hoom php[4072]: OK u:0.00 s:0.01 r:0.35
Sep 27 15:50:00 hoom php[4072]: OK u:0.00 s:0.01 r:0.38
Sep 27 15:50:00 hoom php[4072]: OK u:0.00 s:0.01 r:0.40
Sep 27 15:50:01 hoom php[4072]: 09/27/2015 03:50:01 PM - SYSTEM STATS: Time:0.6176 Method:cmd.php Processes:1 Threads:N/A Hosts:5 HostsPerProcess:5 DataSources:169 RRDsProcessed:15

参见