如何在CentOS 8/RHEL 8上安装Cacti
Cacti是一个开源的基于Web的网络监控工具,可以用于监控系统的CPU、内存、进程数和网络带宽利用率等图形数据。使用Cacti我们可以通过SNMP监控路由器或交换机的网络流量。本文将介绍如何在CentOS 8/RHEL 8上安装Cacti。
STEP 1. SELinux设定
将Selinux设置为permissive模式
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
STEP 2. 环境准备
安装最新EPEL库:
[root@localhost ~]# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
安装SNMP和RRDTool,RRDTool为Cacti数据轮询工具:
[root@localhost ~]# yum install -y net-snmp net-snmp-utils net-snmp-libs rrdtool
安装MariaDB数据库:
[root@localhost ~]# yum install -y mariadb-server mariadb
安装PHP组件:
[root@localhost ~]# yum install -y php php-xml php-session php-sockets php-ldap php-gd php-json php-mysqlnd php-gmp php-mbstring php-posix php-snmp php-intl
启用相关服务:
[root@localhost ~]# systemctl start httpd snmpd mariadb php-fpm
[root@localhost ~]# systemctl enable httpd snmpd mariadb php-fpm
STEP 3. 数据库调优
建议更改MySQL参数以获得更好的性能,参数请根据系统详细参数调整。
vi /etc/my.cnf.d/mariadb-server.cnf
在[mysqld]部分添加以下参数:
collation-server=utf8mb4_unicode_ci
character-set-server=utf8mb4
max_heap_table_size=32M
tmp_table_size=32M
join_buffer_size=64M
# 25% Of Total System Memory
innodb_buffer_pool_size=1GB
# pool_size/128 for less than 1GB of memory
innodb_buffer_pool_instances=10
innodb_flush_log_at_timeout=3
innodb_read_io_threads=32
innodb_write_io_threads=16
innodb_io_capacity=5000
innodb_io_capacity_max=10000
innodb_file_format=Barracuda
innodb_large_prefix=1
重启服务:
[root@localhost ~]# systemctl restart mariadb
STEP 4. 创建Cacti数据库
初始化Maridb:
[root@localhost ~]# mysql_secure_installation
配置步骤和参数供参考:
Enter current password for root (enter for none): 敲回车
Set root password? [Y/n]: Y
New password: <Enter root DB password>
Re-enter new password: <Repeat root DB password>
Remove anonymous users? [Y/n]: Y
Disallow root login remotely? [Y/n]: Y
Remove test database and access to it? [Y/n]: Y
Reload privilege tables now? [Y/n]: Y
这里为root用户创建了一个MariaDB密码。
为Cacti创建一个数据库:
[root@localhost ~]# mysql -u root -p
Enter password:
MariaDB [(none)]> create database cacti;
MariaDB [(none)]> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY 'cactipassword';
MariaDB [(none)]> quit;
数据名为cacti
,数据库用户名为cactiuser
,把cactipassword
修改为你自己的密码。
新创建的数据库用户cactiuser
需有权访问mysql.time_zone_name
表。要做到这一点,需要先把mysql_test_data_timezone.sql
表导入到MySQL的数据库。
[root@localhost ~]# mysql -u root -p mysql < /usr/share/mariadb/mysql_test_data_timezone.sql
Enter password:
再次配置数据库,授权用户cactiuser
访问mysql.time_zone_name
表:
[root@localhost ~]# mysql -u root -p
Enter password:
MariaDB [(none)]> GRANT SELECT ON mysql.time_zone_name TO cactiuser@localhost;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit;
将zoneinfo目录路径名传递给mysql_tzinfo_to_sql程序并将输出发送到mysql程序:
[root@localhost ~]# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p
Enter password:
STEP 5. 安装和配置Cacti
安装Cacti:
[root@localhost ~]# yum install -y cacti
将默认数据库导入Cacti 数据库:
[root@localhost ~]# mysql cacti < /usr/share/doc/cacti/cacti.sql -u cactiuser -p
Enter password:
编辑Cacti配置文件以指定数据库名称、主机名、用户和密码信息:
[root@localhost ~]# vi /usr/share/cacti/include/config.php
进行相应的修改:
$database_type = 'mysql';
$database_default = 'cacti';
$database_hostname = 'localhost';
$database_username = 'cactiuser';
$database_password = 'cactipassword';
$database_port = '3306';
在crontab文件中编辑Cacti的cron条目以每五分钟轮询一次:
[root@localhost ~]# vi /etc/cron.d/cacti
删除前面的#号以取消注释改行:
*/5 * * * * apache /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1
编辑 Apache 配置文件使Cacti能被远程访问:
[root@localhost ~]# vi /etc/httpd/conf.d/cacti.conf
删除Require host localhost
行,添加内容Require all granted
:
Alias /cacti /usr/share/cacti
<Directory /usr/share/cacti/>
<IfModule mod_authz_core.c>
# httpd 2.4
Require all granted
</IfModule>
<IfModule !mod_authz_core.c>
# httpd 2.2
Order deny,allow
Deny from all
Allow from localhost
</IfModule>
</Directory>
修改PHP时区及其它配置:
[root@localhost ~]# vi /etc/php.ini
删除;date.timezone =
前面的; 号(取消注释),然后修改为正确的时区,并顺便优化相关PHP参数:
date.timezone = Asia/Shanghai
memory_limit = 512M
max_execution_time = 60
点击时区列表查看各个时区。
重启相关服务:
[root@localhost ~]# systemctl restart httpd php-fpm snmpd mariadb
STEP 6. 防火墙设定
允许http连接:
[root@localhost ~]# firewall-cmd --permanent --add-service=http
[root@localhost ~]# firewall-cmd --reload
STEP 7. (可选) 安装和配置Spine
在需要大量采集数据时,如果使用自带的cmd.php轮询器会比较慢,尤其在设定1分钟1次的采集频率下可能无法完成轮询所有的被监控的机器,从而可能导致部分监控项目不出图或图形断断续续。为了解决效率问题,Cacti官方也推出spine,采用多线程的方式高效的轮询。
安装spine:
[root@localhost ~]# yum install cacti-spine
设置spine:
[root@localhost ~]# vi /etc/spine.conf
填写主机名,用户和密码信息:
DB_Host localhost
DB_Database cacti
DB_User cactiuser
DB_Pass cactipassword
DB_Port 3306
测试spine:
[root@localhost ~]# /usr/bin/spine
SPINE: Using spine config file [/etc/spine.conf]
Version 1.2.17 starting
Time: 0.2350 s, Threads: 1, Devices: 2
重启相关服务:
[root@localhost ~]# systemctl restart httpd php-fpm snmpd mariadb
STEP 8. 网页端设置
浏览器访问http://your-ip-address/cacti
输入默认账号admin/admin后根据提示设置和安装。
这个步骤可能会有一些报错,请根据具体提示修改相关参数:
安装完成后,记得在[系统设置] -> [设置] -> [Poller]选项卡下将采集类型由cmd修改为spine: