如何在CentOS 7上安装Cacti 1.2
Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。它通过SNMP来获取数据,使用 RRDtool绘画图形,本文介绍如何在CentOS 7上安装Cacti 1.2

将SELinux设置为permissive模式
sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
reboot
安装EPEL库
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
安装SNMP和RRDTool
yum -y install net-snmp net-snmp-utils net-snmp-libs rrdtool
安装PHP
Centos 7的初始PHP版本不符合Cacti的最低要求,因此我们安装PHP 7.3版本。
- 安装Remi库
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
- 安装PHP 7.3
yum install -y --enablerepo=remi-php73 php php-xml php-session php-sockets php-ldap php-gd php-gmp php-intl php-mbstring php-mysqlnd php-pdo php-process php-snmp
安装MariaDB
Centos 7预装的MariaDB 5.4不符合Cacti的最低要求,这里我们安装MariaDB官方最新版本,直接复制下框所有命令设置安装源:
cat <<EOF>> /etc/yum.repos.d/mariadb.repo
[mariadb]name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
使用如下命令安装:
yum install -y MariaDB-server MariaDB-client
数据库优化
编辑MariaDB配置文件:
vi /etc/my.cnf.d/server.cnf
修改[mysqld]参数如下:
collation-server = utf8mb4_unicode_ci
character-set-server=utf8mb4
max_heap_table_size = 64M
tmp_table_size = 64M
join_buffer_size = 64M
innodb_file_format = Barracuda
innodb_large_prefix = 1
innodb_flush_log_at_timeout = 3
innodb_buffer_pool_size = 1GB
innodb_buffer_pool_instances = 10
# Based on what type for storage you use. The below values are for SSD drives.
# Change it if Cacti reports issues during the installation
innodb_read_io_threads = 32
innodb_write_io_threads = 16
innodb_io_capacity = 5000
innodb_io_capacity_max = 10000
启用服务
systemctl start httpd snmpd mariadb
systemctl enable httpd snmpd mariadb
创建Cacti数据库
- MariaDB初始化
mysql_secure_installation
按照提示设定数据库root用户密码及完成其它设置(都可以选择默认)。
- 创建Cacti数据库
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)]> flush privileges;
MariaDB [(none)]> exit
其中cactiuser是数据库用户名,cactipassword是数据库密码,都可以自定义,但是下文设置需与之匹配。
Cacti要求新创建的数据库用户cactiuser需要有权限去访问mysql.time_zone_name表,我们导入mysql_test_data_timezone.sql到mysql并授权来实现这个要求。
mysql -u root -p mysql < /usr/share/mysql/mysql_test_data_timezone.sql
Enter password:*******
mysql -u root -p
Enter password:*******
MariaDB [(none)]> GRANT SELECT ON mysql.time_zone_name TO cactiuser@localhost;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
安装Cacti
yum安装cacti
yum -y install cacti
将默认数据库导入到cacti数据库
mysql cacti < /usr/share/doc/cacti-*/cacti.sql -u root -p
Enter password:*******
编辑数据库配置文件
vi /usr/share/cacti/include/config.php
设定名称,主机名,用户和密码信息
/* make sure these values reflect your actual database/host/user/password */
$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cactiuser";
$database_password = "cactipassword";
$database_port = "3306";
$database_ssl = false;
编辑crontab文件
vi /etc/cron.d/cacti
取消注释以下条目以实现每五分钟轮询一次(删掉该条目前面的#号)
*/5 * * * * apache /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1
编辑/etc/php.ini文件设置时区
vi /etc/php.ini
更新时区
date.timezone = Aisa/Shanghai #需要删除前面的;号
memory_limit = 512M
max_execution_time = 60
编辑Apache配置文件
vi /etc/httpd/conf.d/cacti.conf
把Require host localhost修改为Require all granted,修改前:
<Directory /usr/share/cacti/>
<IfModule mod_authz_core.c>
# httpd 2.4
Require host localhost
</IfModule>
<IfModule !mod_authz_core.c>
# httpd 2.2
Order deny,allow
Deny from all
Allow from localhost
</IfModule>
</Directory>
修改后:
<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>
安装cacti-spine
由于效率的原因,在需要大量采集数据时,如果使用自带的cmd.php轮询器会比较慢,1分钟1次的采集频率可能无法完成轮询所有的被监控的机器,从而可能导致部分监控项目不出图或图形断断续续。为了解决效率问题,Cacti官方也推出spine,采用多线程的方式高效的轮询。
- 安装spine
yum -y install cacti-spine
- 设置spine
vi /etc/spine.conf
填写主机名,用户和密码信息
DB_Host localhost
DB_Database cacti
DB_User cactiuser
DB_Pass cactipassword
DB_Port 3306
重新启动服务
systemctl restart httpd snmpd mariadb
设定防火墙
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
设置cacti
打开浏览器输入http://your-ip-address/cacti登陆后按照安装向导完成Cacti安装。默认密码为admin/admin
安装完成后,记得在[系统设置] -> [设置] -> [Poller]选项卡下将采集类型由cmd修改为spine。
其它
Cacti 1.2.11有一个小bug,输入用户名和密码无法登陆,打开php配置文件,注释掉如下内容即可(在前面加#号):
vi /usr/share/cacti/include/config.php
# $cacti_cookie_domain = 'cacti.net';