近日完成《深入浅出 zabbix 4.0》视频教程的录制并正式发布,该教程基于 zabbix 4.2 ,对Zabbix进行全面讲解。欢迎大家围观。课程链接:https://edu.csdn.net/course/detail/24870
监控跨数据中心、跨地域的IT基础架构时,通过部署Zabbix 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之间的连接断开也不会造成监控数据的丢失。
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模式混合使用,这种方式可以监控到基础架构的每个角落,同时保持简单的架构和中心化的集中管理。
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 zabbix@'%' 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按钮添加。
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。
使用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秒发送一次心跳检测。