Zabbix5.0环境安装

Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

Posted by Ruoli on December 23, 2023

一、 环境准备

Linux服务器三台,版本为:CentOS Linux 7

安装Zabbix版本为: Zabbix 5.0.40

三台服务器IP 分别为:

10.0.0.137 安装 server
10.0.0.138 安装 proxy
10.0.0.139 安装 agent

5.0版本对基础环境的要求有大的变化,最大的就是对 php 版本的要求最低要求, 7.2.0 版本对 php 扩展组件版本也有要求,详见官网文档

https://www.zabbix.com/documentation/5.0/zh/manual/introduction/manual_structure

二、安装Zabbix-server

进入 10.0.0.137 服务器

1、关闭防火墙

找到配置文件:/etc/selinux/config

1
2
3
4
5
6
7
8
9
10
11
12
13
#将其中配置项 SELINUX=enforcing 调整为:SELINUX=disabled
[root@TCC01 selinux]# cat config 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

禁用防火墙

1
systemctl disable --now firewalld

2、获取Zabbix官方源

1
rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

此时/etc/yum.repos.d/zabbix.repo文件中的源地址为 repo.zabbix.com,需要更换为国内aliyun地址,下载加速,如下

1
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo

清空本地yum缓存

1
yum clean all

3、安装 zabbix server agent

1
yum install zabbix-server-mysql zabbix-agent -y

4、Software Collections

便于后续安装高版本的 php,默认 yum 安装的 php 版本为 5.4 过低。SCL(Software Collections)可以让你在同一个操作系统上安装和使用多个版本的软件,而不会影响整个系统的安装包。软件包会安装在/opt/rh目录下。

为了避免系统广泛冲突,/opt/rh包安装在目录中,例如,这允许你在CentOs 7机器上安装Pthon 3.5,而不会删除或干扰Python 2.7。

/etc/opt/rh/软件包的所有配置文件都存储在相应的目录中,SCL包提供了定义使用所包含应用程序所需的环境变量的shell脚本。

1
yum install centos-release-scl -y

5、修改Zabbix前端源

1
2
3
4
5
6
7
8
9
vim /etc/yum.repos.d/zabbix.repo


[zabbix-frontend]
name=Zabbix Official Repository frontend - $basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/$basearch/frontend
enabled=1  #将0修改
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591

6、安装Zabbix前端环境

1
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y

7、安装zabbix所需的数据库,直接用centos7自带的mariadb。

1
yum install mariadb-server -y

8、启动数据库、配置开机启动

1
systemctl enable --now mariadb

9、初始化mariadb,并设置root密码

root密码默认为空

1
mysql_secure_installation

10、使用root用户登录mariadb,建立zabbix数据库,这里的编码设置,非常重要

1
2
3
4
5
6
7
8
9
10
#创建数据库zabbix
create database zabbix character set utf8 collate utf8_bin;
#创建用户zabbix,密码为 zabbix
create user zabbix@localhost identified by 'zabbix';
#将zabix数据库授权给zabbix用户
grant all privileges on zabbix.* to zabbix@localhost;
#刷新权限
flush privileges;
#推出数据库
quit;

11、使用以下命令导入 zabbix 数据库

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

12、修改 zabbix server 配置文件

修改配置 文件 /etc/zabbix/zabbix_server.conf,调整密码为 zabbix

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@TCC01 selinux]# grep '^[a-Z]' /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix #调整此项
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1

13、修改Zabbix的前端配置文件

文件位置 /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

将时区修改为亚洲上海

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@TCC01 selinux]# cat /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
[zabbix]
user = apache
group = apache

listen = /var/opt/rh/rh-php72/run/php-fpm/zabbix.sock
listen.acl_users = apache
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 200

php_value[session.save_handler] = files
php_value[session.save_path]    = /var/opt/rh/rh-php72/lib/php/session/

php_value[max_execution_time] = 300
php_value[memory_limit] = 128M
php_value[post_max_size] = 16M
php_value[upload_max_filesize] = 2M
php_value[max_input_time] = 300
php_value[max_input_vars] = 10000
php_value[date.timezone] = Asia/Shanghai #修改此项

14、启动服务

1
2
3
4
#设置重启
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
#设置开机启动
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm

15、访问Zabbix

http://10.0.0.137/zabbix

输入配置数据库zabbix用户的密码:zabbix

设置zabbix server 端口,默认为10051,不用需改

查看安装细节信息

安装成功

登录账号为 Admin,密码为 zabbix,进入Zabbix主界面

三、解决Zabbix图形乱码问题

在server端安装字体:

1
2
yum -y install wqy-microhei-fonts
\cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf

四、安装Zabbix-agent

Zabbix 5.0 版本推出了使用 go 语性,Agent2 有如下特性: 完成的插件框架支持,可扩引服务及应用监控 支持灵活的采集周期调度 更高效的数据采集及传输 可完全替换先有的 agent

1、时间同步

    检查各服务器时间、时区是否一致, 不一致则需要在所有agent和sever端执行时间同步设置

1
2
3
4
5
6
# 设置时间
yum install ntpdate -y
ntpdate -u ntp.aliyun.com
# 设置时区
mv /etc/localtime{,.bak}
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2、设置zabbix源

1
2
3
rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo

3、安装agent2

1
yum install zabbix-agent2 -y

4、查看agent2配置文件及启动文件

1
2
cat /etc/zabbix/zabbix_agent2.conf
ls -l /usr/sbin/zabbix_agent2

5、启动agent2并设置开机自启动

1
systemctl enable --now zabbix-agent2

6、检查端口是否正常

1
2
[root@TCC03 ~]# netstat -tnlp | grep zabbix
tcp6   0  0 :::10050     :::*   LISTEN   7991/zabbix_agent2

7、查看和修改agent2配置文件

1
2
3
4
5
6
7
8
9
[root@TCC03 ~]# grep -Ev '^#|^$' /etc/zabbix/zabbix_agent2.conf 
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=127.0.0.1   #修改为server的IP
ServerActive=127.0.0.1  #修改为server的IP
Hostname=Zabbix server #修改当前agent服务器的主机名
Include=/etc/zabbix/zabbix_agent2.d/*.conf
ControlSocket=/tmp/agent.sock

Server 和 ServerActive 配置为 zabibx server 或 zabbix proxy 地址Hostname 配置为主机名即可。 Agent2 没有组件依赖,可直接拷贝编译好的二进制文件和配置文件在其他主机上运行即可

8、重启agent2

1
systemctl restart zabbix-agent2

9、检测server - client 连通性

在server服务端通过命令主动获取数据,在server端 zabbix-get 工具

1
yum install zabbix-get -y

在server端获取agent数据

1
zabbix_get -s '10.0.0.139' -p 10050 -k 'agent.ping'

五、安装zabbix-proxy

需要关闭proxy服务器防火墙

1、设置zabbix yum源

1
2
3
4
#设置zabbix官方源
rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
#将源地址改为aliyun
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo

2、安装zabbix-mysql 依赖

1
2
yum install zabbix-proxy-mysql zabbix-get -y
yum install mariadb-server mariadb -y

3、启动MySQL并设置开机启动

1
2
systemctl start mariadb
systemctl enable mariadb

4、初始化数据库

root密码默认为空,需要设置root密码

1
2
3
4
5
6
7
8
9
10
11
12
#初始化MySQL
mysql_secure_installation
#创建数据库zabbix
create database zabbix_proxy character set utf8 collate utf8_bin;
#创建用户zabbix,密码为 zabbix
create user zabbix@localhost identified by 'zabbix';
#将zabix数据库授权给zabbix用户
grant all privileges on zabbix_proxy.* to zabbix@localhost;
#刷新权限
flush privileges;
#退出数据库
quit;

5、查看zabbix-proxy-mysql文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@TCC02 yum.repos.d]# rpm -ql zabbix-proxy-mysql
/etc/logrotate.d/zabbix-proxy
/etc/zabbix/zabbix_proxy.conf
/usr/lib/systemd/system/zabbix-proxy.service
/usr/lib/tmpfiles.d/zabbix-proxy.conf
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_proxy_mysql
/usr/share/doc/zabbix-proxy-mysql-5.0.40
/usr/share/doc/zabbix-proxy-mysql-5.0.40/AUTHORS
/usr/share/doc/zabbix-proxy-mysql-5.0.40/COPYING
/usr/share/doc/zabbix-proxy-mysql-5.0.40/ChangeLog
/usr/share/doc/zabbix-proxy-mysql-5.0.40/NEWS
/usr/share/doc/zabbix-proxy-mysql-5.0.40/README
/usr/share/doc/zabbix-proxy-mysql-5.0.40/schema.sql.gz
/usr/share/man/man8/zabbix_proxy.8.gz
/var/log/zabbix
/var/run/zabbix

5、导入zabbix-proxy表结构

1
2
3
#登入MySQL
#使用安装包中提供的SQL初始化数据库
zcat /usr/share/doc/zabbix-proxy-mysql-5.0.40/schema.sql.gz |mysql -uzabbix -pzabbix zabbix_proxy

6、修改proxy配置文件

修改配置文件:zabbix_proxy.conf 中如下三个配置,并核对其他配置

Hostname、DBPassword、Server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@TCC02 zabbix]# grep '^[a-Z]' zabbix_proxy.conf 
Server=10.0.0.137
Hostname=TCC02
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=zabbix
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1

7、启动proxy服务,并设置开机启动

1
2
systemctl restart zabbix-proxy
systemctl enable zabbix-proxy

六、proxy添加agent

添加之前创建的agent,注意 添加agent前,需要将agent 配置文件中的 Server地址改为proxy的地址。

注意 需要在agent端开放 防火墙 给 proxy 访问 10050 端口。

#

问题处理

1、在server端使用 zabbix_get工具访问 agent时报错

1
2
3
[root@TCC01 ~]# zabbix_get -s '10.0.0.139' -p 10050 -k 'agent.ping'
zabbix_get [29207]: Get value error: ZBX_TCP_READ() failed: [104] Connection reset by peer
zabbix_get [29207]: Check access restrictions in Zabbix agent configuration

问题原因

1:可能agent端配置文件中配置的server地址有误

2:agent端防火墙不允许此IP访问

尝试关闭 agent 端防火墙后

1
2
3
[root@TCC03 ~]# systemctl disable --now firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

重新访问回复正常

1
2
[root@TCC01 ~]# zabbix_get -s '10.0.0.139' -p 10050 -k 'agent.ping'
1

关闭防火墙还是一个风险更好的行为,在生产环境不可行,不过可以通过开放端口实现

如下开放10050端口,也可实现访问链接

1
2
3
4
#开放 10050 端口
firewall-cmd --zone=public --add-port=10050/tcp --permanent
#重启防火墙
firewall-cmd --reload   或  systemctl restart  firewalld

可以通过如下命令查看分析防火墙开放端口信息

1
2
3
#查看已打开的端口
[root@TCC03 ~]#  firewall-cmd --zone=public --list-ports
10050/tcp

不过最严格的是仅针对IP开放端口,如下也可以实现

1
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.137" port protocol="tcp" port="10050" accept"

可通过如下命令查看所有以开放的规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@TCC03 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources: 10.0.0.137
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
    rule family="ipv4" source address="10.0.0.137" port port="10050" protocol="tcp" accept

关于防火墙其他操作可参考:

Centos7防火墙关闭和启用iptables操作