深入浅出Zabbix 3.0 -- 第十八章 分布式监控
第十八章 分布式监控
近日完成《深入浅出 zabbix 4.0》****的录制并正式发布,该教程基于 zabbix 4.2 ,对Zabbix进行全面讲解。欢迎大家围观。课程链接:https://edu.****.net/course/detail/24870
监控跨数据中心、跨地域的IT基础架构时,通过部署Zabbix Proxy,可以实现集中管理、分布式监控的架构,这种分布式架构易于维护,并具有提供一个集中监控解决方案的优势,能够让我们在大型基础架构监测和复杂性之间找到一个平衡点。
18.1 proxy架构
分布式监控架构中至少要有一台Zabbix Server和若干台Zabbix proxy,Zabbix proxy可以放置到公司的分部或者其他的数据中心。如下图18-1所示。
图 18-1
适用场景:
-
跨数据中心、跨地域的网络监控
-
监控拥有不可靠网络连接的区域
-
简化分布式监控的维护
-
卸载Zabbix server的运行负载
Zabbix proxy和Zabbix server不同的是proxy仅仅是一个数据收集器,没有web前端、本地管理,也不能生成通知,这些都由Zabbix server统一管理。proxy支持的功能如下表18-1所示:
表 18-1
功 能 |
Proxy支持 |
|
Items |
Zabbix agent checks |
支持 |
Zabbix agent checks (active) |
支持 |
|
Simple checks |
支持 |
|
Trapper items |
支持 |
|
SNMP checks |
支持 |
|
SNMP traps |
支持 |
|
IPMI checks |
支持 |
|
JMX checks |
支持 |
|
Log file monitoring |
支持 |
|
Internal checks |
支持 |
|
SSH checks |
支持 |
|
Telnet checks |
支持 |
|
External checks |
支持 |
|
Built-in web monitoring |
支持 |
|
Network discovery |
支持 |
|
Low-level discovery |
支持 |
|
Calculating triggers |
不支持 |
|
Processing events |
不支持 |
|
Sending alerts |
不支持 |
|
Remote commands |
不支持 |
Zabbix proxy可以从任意数量的主机或设备收集数据,并将收集的监控数据保存到本地数据库中,这就意味着即使Zabbix server和proxy之间的连接断开也不会造成监控数据的丢失。
18.1 proxy工作机制
Zabbix proxy只连接到Zabbixserver,当proxy连接到Zabbix server时,向server请求收集需要它监控的item配置信息,当收集到item的监控数据后proxy会把这些数据发送到server。可以简单的把proxy理解成一个超级agent,这个超级agent可以像Zabbix server一样使用多种监控方式从很多host中收集监控数据并保存在本地数据库中。
Zabbix proxy 能够运行在两种不同的模式:active(主动式)和passive(被动式)。
当proxy安装完成后默认的是active模式(即ProxyMode设置为1),在此模式中,proxy将初始化所有到Zabbix server的连接,收集由该proxy监控的被监视对象的配置信息,并将收集的监控结果发送给Zabbix server。
Active模式是卸载Zabbix server负载压力的最好办法,在这种模式中Zabbix server只需要等待应答需要监控的items配置信息是否变化的请求或者接收最新的被监控设备的数据。如下图18-2所示。
图 18-2
在实际的基础环境中,我们需要监控DMZ中的设备,从安全的角度,我们认为从内部网络主动连接到被监控设备是比较安全的,在这种场景中,我们需要使用Zabbix提供的passive模式。
在该模式中,Zabbix服务器定期检测proxy服务器,将配置变化信息发送给proxy,并从proxy获得最新的被监控设备的数据。如下图18-3所示。
图 18-3
Passive模式需要Zabbix服务器去查询Proxy,因此会增加一些服务器的开销。在实际场景中不建议使用passive模式,但有时需要active模式和passive模式混合使用,这种方式可以监控到基础架构的每个角落,同时保持简单的架构和中心化的集中管理。
18.2安装 proxy
Zabbix proxy仅仅负责收集数据临时保存在本地,定期将数据发送到Zabbix server进行处理,所以我们安装proxy时也需要安装数据库用以临时保存收集的数据。在下面安装的过程中我们还是选择MySQL数据库,当然你也可以选择其他的数据库,如:SQLite、PostgreSQL或者Oracle数据库。
安装 Zabbix 源
# rpm-ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
安装MySQL与proxy server
# yuminstall mariadb-server zabbix-proxy-mysql
# systemctl enable mariadb.service
# systemctlstart mariadb.service
# /usr/bin/mysql_secure_installation
设置数据库
#mysql -uroot -p
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to [email protected]'%' identified by 'zabbix';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
# cd/usr/share/doc/zabbix-proxy-mysql-3.0.1/
#zcat schema.sql.gz | mysql -uroot -p zabbix
设置防火墙
#firewall-cmd --permanent --add-port=10051/tcp
#firewall-cmd --reload
编辑 zabbix_proxy.conf 文件
# vi/etc/zabbix/zabbix_proxy.conf
Server=<zabbix server ip地址>
Hostname= Zabbix proxy
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=<数据库密码>
启动zabbix-proxy
# systemctlenable zabbix-proxy
#systemctl start zabbix-proxy
检查日志
# tail/var/log/zabbix/zabbix_proxy.log
在日志文件中出现下面的信息,请检查zabbix_proxy.conf中的数据库相关参数设置,修改正确的参数后需要重新启动zabbix-proxy服务:
3451:20160303:150657.321 [Z3001] connection to database 'localhost'failed: [1044] Access denied for user 'zabbix'@'%' to database 'localhost'
3451:20160303:150657.321 Cannot connect to the database. Exiting...
出现下面的信息是因为在Zabbix server中还没有添加proxy的原因:
3466:20160303:150707.639 cannot obtain configuration data fromserver at "192.168.10.112": proxy "Zabbix proxy" not found
3467:20160303:150707.656 cannot send heartbeat message to server at"192.168.10.112": proxy "Zabbix proxy" not found
添加proxy
Zabbix server前端页面中,通过点击Administration--> Proxies,在页面右上角点击 Create proxy按钮。如下图18-4所示。
图 18-4
Proxy标签中各配置参数含义:
-
Proxy name:proxy名称,例如 proxy one。这个名称必须和proxy配置文件中Hostname参数设置的名称是一样的。
-
Proxy mode:Active(主动式)或被动式(Passive)。
-
Hosts:Proxy hosts框中为通过该proxy监控的host,可从Other hosts框中添加。
-
Description:该proxy的说明信息。
步骤如下:
1、 在Proxy标签中输入proxy 名称,选择工作模式。
2、 Encryption标签中选择proxy 与 Zabbix server之间通信的加密方式。
3、 点击Add按钮添加。
18.3配置 proxy
Proxy配置文件中有很多参数和Zabbixserver中的参数是一样的,例如pollers、端口等,也有一些和agent配置参数是一样的,例如hostname、加密设置等。也有proxy特有的参数,搞清楚这些参数的含义对proxy的部署和处理相关的问题非常有帮助。
这些参数主要有:
-
ProxyMode:proxy运行模式。active模式为0,passive模式为1。默认值为0。
-
HeartbeatFrequency:proxy检测Zabbix server是否可用的时间间隔。默认值为60,单位为秒,设置范围0 -3600。proxy为passive模式时该参数会被忽略。
-
ProxyLocalBuffer:proxy在本地保存数据的时长。默认值为0,单位为小时,设置范围0 - 720。设置该参数后即使数据已经发送到server也同样会保存,通常有第三方应用需要调用数据时设置。
-
ProxyOfflineBuffer:proxy和Zabbix server的连接丢失后在本地保存数据的时长。默认为1,单位为小时,设置范围1 -720。注意最旧的数据会被删除。
-
ConfigFrequency:proxy从Zabbix server收集items配置信息的时间间隔。默认值为3600,单位为秒,设置范围1 – 3600*24*7。
-
DataSenderFrequency:proxy发送收集的监控数据到Zabbix server的时间间隔。默认值为1,单位为秒,设置范围1 - 3600。proxy为passive模式时该参数会被忽略。
根据proxy的运行模式,也需要在Zabbix服务器端设置相关的参数。
当proxy运行在主动模式时你需要设置StartTrappers参数的值,该值需要大于active Proxy的数量。Zabbixserver 是用Trapper进程管理所有来自Proxy的信息。
当proxy运行在被动模式时你需要设置以下参数:
-
StartProxyPollers:监听passive模式运行的proxy的进程数量。默认值为1,设置范围0 - 250。这个值要大于或等于Proxy的数量。
-
ProxyConfigFrequency:Zabbix服务器发送items配置信息到Proxy的时间间隔。默认值为3600,单位为秒,设置范围1 - 3600*24*7。
-
ProxyDataFrequency:从Proxy获得被监控设备数据的时间间隔。默认值为1,单位为秒,设置范围1 -3600。
18.4 proxy可用性
使用proxy进行分布式监控时,需要在分中心安装一台proxy,如果proxy出现问题会影响所有在这台proxy下监控的设备,Zabbixserver将无法收集它们的监控数据。Proxy会初始化所有到server的连接,并同步items配置信息和发送监控数据,这也意味着当proxy出现问题时Zabbixserver不会发现proxy已经出问题了。Zabbix已经考虑到这个问题并提供了对proxy可用性进行监控的方法,我们可以通过下面的item来进行监控:
zabbix[proxy, "proxy unique name", lastaccess]
这个item 的类型是Zabbix internal,它将收集最近proxy连接到Zabbix server的时间。
创建Items时注意Units要设置为unixtime。如下图18-5所示。
图 18-5
监控项创建完成后到Monitoring --> Latest data可以查看收集的数据,如下图18-6所示。
图 18-6
接下来我们可以创建一个触发器,其表达式如下:
{host:zabbix[proxy, "proxy unique name",lastaccess].fuzzytime(180)}=0
当proxy最近访问server的时间戳和Zabbix server的时间戳相差180秒时为异常情况,触发告警事件。有时候proxy在某些情况下同步items配置信息和发送监控数据的时间间隔会大于180秒,那不就产生误报了吗?其实不用担心这个问题,在proxy的配置文件中有个参数HeartbeatFrequency,默认设置为60秒,也就是说proxy会每过60秒发送一次心跳检测。