Zabbix是100%免费开源的企业级监控软件,旨在监控IT基础设施组件和服务的可用性和性能。Zabbix可安装在任何Linux发行版上,本教程将展示在CentOS 8上如何安装Zabbix 5.0 LTS和Zabbix 5.4版本。

Zabbix 5.0 LTS 版本官方支持至 2025年5月,Zabbix 5.4 标准版官方支持至 2021年12月。


首先我们安装和配置 Zabbix 服务器,然后是数据库,最后是WEB前端frontend。

STEP 1. 设置Selinux

将Selinux设置为permissive模式

setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

STEP 2. 安装zabbix-server, zabbix-web和zabbix-agent

Zabbix 5.0:

rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
dnf clean all
dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-agent

Zabbix 5.4:

rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm
dnf clean all
dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-agent

可以看出5.4多了zabbix-sql-scripts这个组件。

STEP 3. 安装和配置MariaDB数据库

安装MariaDB和启用MariaDB服务
dnf -y install mariadb-server && systemctl start mariadb && systemctl enable mariadb
  • 配置MariaDB

输入如下命令初始化配置:

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密码。

创建数据库
mysql -uroot -p
Enter password:
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> create user zabbix@localhost identified by 'your zabbix DB password';
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost;
MariaDB [(none)]> quit;

这里创建了一个名为zabbix的数据库,然后创建了一个名为zabbix的用户,把'your zabbix DB password'中''里面的内容替换为你自己的密码。

导入初始架构和数据

Zabbix 5.0:

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Enter password:

Zabbix 5.4:

zcat /usr/share/doc/zabbix-sql-scripts/mysql/create.sql.gz | mysql -uzabbix -p zabbix
Enter password:

如果出现报错ERROR 1118 (42000) at line 1284: Row size too large (> 8126),可以通过如下命令临时关闭strict mode:

mysql -uroot -p
Enter password:
MariaDB [(none)]>set global innodb_strict_mode='OFF';
MariaDB [(none)]> quit;

然后再执行上面的数据导入步骤,数据导入完毕后再开启strict mode:

mysql -uroot -p
Enter password:
MariaDB [(none)]>set global innodb_strict_mode='ON';
MariaDB [(none)]> quit;
修改zabbix_server.conf配置文件

编辑配置文件 /etc/zabbix/zabbix_server.conf

vi  /etc/zabbix/zabbix_server.conf

把Zabbix数据库密码修改为上面设定的密码:

DBPassword= your zabbix DB password

假如你设定的数据库名和用户名不是为zabbix,对应的也是在这个文件中把数据库名和用户名修改为你设定的名字。

STEP 4. 配置防火墙

firewall-cmd --add-service={http,https} --permanent
firewall-cmd --add-port={10051/tcp,10050/tcp} --permanent
firewall-cmd --reload

STEP 5. 配置Zabbix前端frontend

配置PHP中的时区参数

编辑/etc/php-fpm.d/zabbix.conf文件:

vi /etc/php-fpm.d/zabbix.conf

删除php_value date.timezone Europe/Riga前面的; 号(取消注释),然后修改为正确的时区:

php_value[date.timezone] = Asia/Shanghai

点击时区列表查看各个时区。

重启zabbix-server, zabbix-agent, http和php服务进程
systemctl restart zabbix-server zabbix-agent httpd php-fpm && systemctl enable zabbix-server zabbix-agent httpd php-fpm
配置Web前端

用浏览器打开网址http://server_ip_or_name/zabbix,根据提示一步一步往下进行配置,在DB配置页面输入正确的数据库密码:

最后输入默认的用户名密码Admin/zabbix登录。

至此,你已经在CentOS 8上成功安装了Zabbix 5,现在您可以监控任何东西了。下面是一些优化设定,请根据实际情况设定。

STEP 6. (可选)优化Zabbix服务器参数

如果你监控的设备不多,就没必要进行此步骤,但如果计划监控大量设备,请执行此步骤。
编辑配置文件 /etc/zabbix/zabbix_server.conf

vi  /etc/zabbix/zabbix_server.conf

在任何位置加入如下参数:

StartPollers=100
StartPollersUnreachable=50
StartPingers=50
StartTrappers=10
StartDiscoverers=15
StartPreprocessors=15
StartHTTPPollers=5
StartAlerters=5
StartTimers=2
StartEscalators=2
CacheSize=128M
HistoryCacheSize=64M
HistoryIndexCacheSize=32M
TrendCacheSize=32M
ValueCacheSize=256M

请根据实际情况进一步优化,假设您不使用 ICMP 检查,则将StartPingers参数设置为1,或者如果您不使用活动代理,则将StartTrappers设置为1。您可以在官方文档中找到有关Zabbix配置文件中支持的参数的更多信息 。

STEP 7. (可选)优化MySQL/MariaDB数据库

创建自定义MySQL配置文件

通过命令vi /etc/my.cnf.d/zabbix_db.cnf创建zabbix_db.cnf数据库配置文件:

vi /etc/my.cnf.d/zabbix_db.cnf

然后粘贴如下配置:

[mysqld]
max_connections = 404
innodb_buffer_pool_size = 800M

innodb-log-file-size = 128M
innodb-log-buffer-size = 128M
innodb-file-per-table = 1
innodb_buffer_pool_instances = 8
innodb_old_blocks_time = 1000
innodb_stats_on_metadata = off
innodb-flush-method = O_DIRECT
innodb-log-files-in-group = 2
innodb-flush-log-at-trx-commit = 2

tmp-table-size = 96M
max-heap-table-size = 96M
open_files_limit = 65535
max_connect_errors = 1000000
connect_timeout = 60
wait_timeout = 28800

赋予权限:

chown mysql:mysql /etc/my.cnf.d/zabbix_db.cnf
chmod 644 /etc/my.cnf.d/zabbix_db.cnf

这样设定后可以避免一些报错,比如参数max_connections = 404可以解决这个报错:“[Z3001] connection to database 'zabbix' failed: [1040] Too many connections”。值得注意的是max_connections参数必须大于所有Zabbix代理进程总数+150,我们可以使用如下命令计算出来:

egrep "^Start.+=[0-9]" /etc/zabbix/zabbix_server.conf | awk -F "=" '{s+=$2} END {print s+150}'

还有一个比较重要的参数是innodb_buffer_pool_size,这个参数决定了MySQL可以获得多少内存来缓存 InnoDB表和索引数据。如果服务器只运行了数据库,我们建议将这个值设定为系统内存的70%;这里我们同时运行了数据库、Zabbix-Server及WEB服务,我们建议将这个值设定为系统内存的40%,假如系统内存为2G,那么这个值为800MB。

重启进程
systemctl restart zabbix-server 
systemctl restart mariadb

STEP 8. (可选)在History和Events表上创建MySQL分区

Zabbix的housekeeping进程负责删除旧的trend和history数据,这个动作会对数据库性能产生负面影响,有时会产生这个烦人的警报:Zabbix housekeeper processes more than 75% busy
使用数据库分区可以轻松解决该问题。分区每小时或每天创建表,并在不再需要时删除它们。SQL DROP 比 DELETE 语句更有效。
MySQL分区教程请详见本网站为Zabbix在History和Events表上创建MySQL分区博文教程。