zabbix安装与配置

介绍

Zabbix是一个企业级的开源监控软件,可以监控IT基础架构的可用性和应用的性能,为用户提供集中管理、分布式监控的一站式(all in one)监控解决方案,是一款真正的开源产品(True Open source)。采用GPL协议发布,不论是商业或非商业的使用没有任何限制,可以说是绝对的自由使用。

Zabbix最基本的目的是收集监控数据,将收集的数据统一保存到数据库中进行分析处理,利用Web前端页面可以轻松的将这些监控数据实时展示出来。通过与设定的阈值进行比较触发特定的事件并产生相应的动作,发出告警通知或执行远程命令。Zabbix 提供了多种监控方式用来监控基础架构的各个方面,不仅有专用的Agent,还支持External checks、SNMP、IPMI、JMX monitoring、SSH checks等多种方式收集监控数据,具有丰富的功能和灵活的扩展性。事实上,几乎所有你能想到的都可以在Zabbix中实现监控。

概念

组件

Zabbix监控系统包含四个主要组件:Zabbixserver、Zabbix proxy、Zabbix database和Zabbix GUI。每个组件都有其自身的特点和要求:

  • Zabbix server:这是核心引擎,负责收集或接收来自被监控设备的数据。它是用C语言开发的,与Zabbix agents、Zabbix proxy和 Zabbix database进行通信。它是最主要的组件,管理所有的规则(包括收集监控数据、触发器、告警等等)。
  • Zabbix GUI:这是 Zabbix Web前端管理页面,用户通过Web前端页面可以查看Zabbixserver收集的数据,也可以对Zabbix server进行配置。它是用 PHP 开发的,使用支持 PHP程序运行的 web 服务器 (Apache或Nginx),并与 Zabbix 数据库通信。
  • Zabbix database: 这是 Zabbix 数据存储库。 Zabbix的后端数据库可以是 Oracle、 IBM DB2、PostgreSQL、MySQL 或 SQLite3。在这本书中,我们将使用MySQL 作为数据库。
  • Zabbix proxy:这是一个可选的组件,利用它来实现分布式监控架构或分担Zabbix server的负载,提高Zabbix server的性能。它的主要功能是协助 Zabbix server从被监视的主机或设备收集数据。Zabbix proxy收集的数据首先存放到本地临时数据库中,随后定时发送到 Zabbix server中,即便Zabbix server和Zabbix proxy的连接断开也不会导致数据的丢失(数据保留的时间可在proxy的配置文件中设置)。在3.0版本中原生支持Zabbix server和Zabbix proxy之间的数据加密传输(基于证书或者基于共享秘钥的加密都是支持的)。

架构

Zabbix是一个三层架构,在实现时我们需要安装以下三个服务器,即Web服务器、Database服务器和Zabbix服务器。如果需要监控的规模比较小(几台或几十台主机),三个服务器可以同时安装在一个物理服务器中,这种方式的优点是安装配置简单快速,初期部署成本比较低。随着监控规模的不断扩大,需要保存和处理更多的监控数据,也会有更多的运维人员访问Zabbix Web前端页面,这样势必会让Zabbixserver的处理性能下降,出现断图、Web前端页面访问慢等问题。这时我们可以将Web服务器、Database服务器和Zabbix服务器拆分,分别安装到不同的物理服务器中。这种方式中每个服务器组件使用专用的硬件资源,可以解决相应的性能问题,但是需要增加服务器硬件的投入。

zabbix数据处理流程

在标准的Zabbix数据处理流程中,主要是通过几个不同的数据源端发送数据到Zabbix server,所有的数据都会保存到数据库中,并通过Web GUI为用户展现结果。发送数据的主要源包括:

  • Zabbix agent
  • Zabbix sender
  • Other agent (如脚本或者自定义的第三方的agent)
  • Zabbix proxy

zabbix部署架构

Zabbix在大部分场景中以集中式架构部署即可满足要求,所谓集中式架构就是无论Zabbix server、Database server和Web server是否安装在同一台服务器中,所有的监控数据都是由Zabbix server收集。如果你需要监控的IT基础架构有多个分中心或分支机构,建议采用分布式架构部署,在每个分中心或分支机构增加Zabbix proxy,由Zabbix proxy收集本地的监控数据后统一传输到Zabbix server中存储和处理,实现分布式架构、集中监控的方案。

安装与配置

Server端

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
===================================================================================
环境:
系统:CentOS Linux release 7.4.1708 (Core),地址:192.168.2.140,此次测试将Server端与agent端安装在同一台主机上。关闭防火墙与SELinux。
===================================================================================
------------------------------
安装mariadb数据库
------------------------------
[root@zabbix ~]# yum install mariadb-server
# 也可以安装mysql5.7。
# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
# yum -y install mysql57-community-release-el7-10.noarch.rpm
# yum -y install mysql-community-server
[root@zabbix ~]# vim /etc/my.cnf
[mysqld]
skip_name_resolve = ON
innodb_file_per_table = ON
# skip-grant-tables
# 如果开始无法登录mysql,可以加入此行,这样就可以跳过密码验证使用mysql直接登录了
[root@zabbix ~]# systemctl start mariadb.service
[root@zabbix ~]# systemctl enable mariadb.service
[root@zabbix ~]# mysql_secure_installation
[root@zabbix ~]# mysql -uroot -pcentos
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
# zabbix4.4.6版本时要这样创建数据库,不然安装zabbix时无法通过
MariaDB [(none)]> GRANT ALL ON zabbix.* TO 'zbxuser'@'%' IDENTIFIED BY 'zbxpass';
MariaDB [(none)]> FLUSH PRIVILEGES;
# 如果root用户没有权限给其他用户授权,可以使用
# select host,user,grant_priv,Super_priv from mysql.user;来查询grant_priv是否为Y,
# 如果不是,可以使用update mysql.user set grant_priv='Y' where host='localhost';改成Y,
# 之后flush privileges;,之后就可以给其他用户授权了。如果执行grant all时提示密码强度不够,可以
# 使用set global validate_password_policy=0;改变密码强度,
# set global validate_password_length=4;可以改变密码长度,之后就可以用简单密码了。

-----------------------------
安装zabbix_server
-----------------------------
[root@zabbix ~]# wget https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
# 4.0版本下载地址:rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
# 4.4版本:rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/8/x86_64/zabbix-release-4.4-1.el8.noarch.rpm
[root@zabbix ~]# yum install -y zabbix-release-3.0-1.el7.noarch.rpm
# 下载源文件并安装
[root@zabbix ~]# vim /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=http://repo.zabbix.com/zabbix/3.0/rhel/7/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX

[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=0
# 将gpgcheck都改为0
# 上面的repo地址可能连接有问题,可以将[zabbix]中的baseurl改为阿里地址,https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/。
[root@zabbix ~]# yum install -y zabbix40-server-mysql.x86_64 zabbix40-web.noarch zabbix40-get.x86_64 zabbix40-web-mysql.noarch zabbix40-agent.x86_64 zabbix40-sender.x86_64 httpd php php-mysql php-mbstring php-gd php-bcmath php-ldap php-xml
# 安装4.0版本需要先安装libiksemel.so.3,libiksemel.so.3在iksemel-1.4-6.sdl7.x86_64.rpm包中,下载地址:http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el6/en/i386/rpmforge/RPMS/iksemel-1.4-1.el6.rf.i686.rpm
# 安装zabbix相关包
# zabbix程序组件
# zabbix_server:服务端守护进程
# zabbix_aget:agent守护进程
# zabbix_proxy:代理服务器,可选;
# zabbix_database:存储系统,mysql/pgsql
# zabbix_web:web GUI
# zabbix_get:命令行工具,测试向agent端发起数据采集请求使用
# zabbix_sender:命令行,测试向server端发送数据
# zabbix_java_gateway:java网关
# CentOS8安装4.0版本:dnf -y install httpd mariadb-server mariadb libjpeg* php-odbc php-pear php-xmlrpc php-mhash php php-pear php-cgi php-common php-mbstring php-snmp php-gd php-xml php-mysqlnd php-gettext php-bcmath php-json php-ldap
# CentOS8依赖包:dnf -y install gcc make mariadb-devel pcre* libevent-devel libxml2-devel net-snmp-devel libcurl-devel net-snmp curl curl-devel libxml2 libevent-devel.x86_64
#

------------------
导入数据库
------------------
[root@zabbix ~]# cp /usr/share/doc/zabbix-server-mysql-3.0.27/create.sql.gz /root
[root@zabbix ~]# gzip -d create.sql.gz
[root@zabbix ~]# mysql -uzbxuser -h 127.0.0.1 -pzbxpass zabbix < ./create.sql
[root@zabbix ~]# mysql -uroot -pcentos
MariaDB [(none)]> USE zabbix;
MariaDB [(none)]> SHOW tables;
# 这时可以看到导入的表

-----------------------------
配置zabbix_server
-----------------------------
[root@zabbix ~]# cd /etc/zabbix/
[root@zabbix ~]# cp zabbix_server.conf{,.bak}
[root@zabbix ~]# vim zabbix_server.conf
ListenPort=10051
# zabbix-server默认监听端口为10051
SourceIP=192.168.2.140
# 如果Server端有多个IP,此项一定要定义,这是被客户端允许采样的IP
LogType=file
# 日志格式,有三种,默认是file,表示自己记录到一个文件中。这个file就是下面LogFile定义的路径
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=10
# 指明日志文件大小,大于这里指定的数字将会滚动。日志是否滚动,0表示不滚动
DebugLevel=3
# 日志级别,3表示正常,数字越大越详细,最大是5
PidFile=/var/run/zabbix/zabbix_server.pid
DBHost=localhost
# zabbix数据库的地址
DBName=zabbix
# 数据库名字
DBUser=zbxuser
# 连接数据库用的用户名
DBPassword=zbxpass
DBSocket=/var/lib/mysql/mysql.sock
# 连接数据库用的sock,用rpm包安装的mysql,sock在/var/lib/mysql/mysql.sock,这是在my.cnf中定义的
DBPort=3306
#SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
[root@zabbix ~]# systemctl start zabbix-server
[root@zabbix ~]# ss -tln
# 查看是否监听10051端口
[root@zabbix ~]# cd /etc/httpd/conf.d/
[root@zabbix ~]# vim zabbix.conf
php_value date.timezone Asia/Shanghai
# 配置时区
[root@zabbix ~]# systemctl start httpd
下面进入页面访问安装,地址:IP/zabbix

上图输入在mysql中设置的用户名与密码

上图只输入服务器地址与端口即可

上图页面中提示你Zabbix前端已经成功安装,并在目录/etc/zabbix/web/中创建了配置文件zabbix.conf.php。

在上图的Web前端登录页面中,我们输入Zabbix默认的用户名和密码,用户名:Admin,密码:zabbix

agent端

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
27
28
29
----------------------------------------
在zabbixServer主机上安装zabbix_agent
----------------------------------------
[root@zabbix ~]# yum install zabbix-agent zabbix-sender
# 这里以在server端安装agent端为例,可按此方法在其他主机安装agent端
[root@zabbix ~]# cd /etc/zabbix/
[root@zabbix ~]# cp zabbix_agentd.conf{,.bak}
[root@zabbix ~]# vim zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=127.0.0.1,192.168.2.140
# 被动模式下需要设置,从哪个服务器连接agent,这里要输入的是zabbix_server的地址。
ServerActive=127.0.0.1
# 主动模式下需要设置,向哪个服务器发送数据,这里要输入的是zabbix_server的地址。
# 主动与被动指的是客户端主动还是被动
Hostname=Zabbix server
# 主动模式下必须设置,被动模式不需要
Include=/etc/zabbix/zabbix_agentd.d/
[root@zabbix ~]# systemctl start zabbix-agent
[root@zabbix ~]# ss -tln
# 查看是否监听10050端口
[root@zabbix ~]# zabbix_get -s 192.168.2.140 -k "system.cpu.switches"
1456242
# 测试,采集CPU的某个值,IP地址为zabbixServer的地址,此命令只能在zabbixServer主机上使用,如果在
# zabbixAgent主机上使用,会提示:"zabbix_get [25014]: Check access restrictions in Zabbix agent configuration"
[root@zabbix ~]# zabbix_get -s 192.168.2.140 -k "system.cpu.switches"
zabbix_get [4179]: Get value error: cannot connect to [[192.168.2.140]:10050]: [111] Connection refused
# 如果agent服务未启动,采集时会报错。

配置中文页面

点击右上角的Admin图标,进入页面选择Language为Chinese(zh_CN),再次刷新页面后就会变为中文,但还是会有问题。就是在图形展示时,图形下的说明文字会有乱码问题,解决方法如下:

1
2
3
4
5
6
7
8
9
10
11
从windows系统中复制simkai.ttf(楷体)字体到CentOS系统
[root@zabbix ~]# cp simkai.ttf /usr/share/fonts/
# 将字体复制到/usr/share/fonts/
[root@zabbix ~]# chmod +r /usr/share/fonts/simkai.ttf
# 不知此步是否有用,因为看到有教程中simkai.ttf的权限是544
[root@zabbix ~]# alternatives --install /usr/share/zabbix/fonts/graphfont.ttf zabbix-web-font /usr/share/fonts/simkai.ttf 100
# 这是将字体加入到zabbix-web-font中
[root@zabbix ~]# alternatives --display zabbix-web-font
...
Current `best' version is /usr/share/fonts/simkai.ttf.
# 显示zabbix-web-font目前的字体,应该有上面的字样
作者

John Doe

发布于

2019-04-22

更新于

2023-03-17

许可协议