以前用zabbix,都是简简单单的把服务端、客户端一搭,模板监控项一弄就完了。没怎么真正去弄过优化啊之类的。现在有个场景就是获取zabbix的数据贼慢,得对zabbix进行优化,开始动手分析一下。

 

先看以下几张图,这是优化前后的对比图

 

1)队列数

 

优化前:

 

zabbix队列10分钟以上一万二 zabbix队列积压_数据

 

优化后:

 

zabbix队列10分钟以上一万二 zabbix队列积压_服务器_02

 

通过grafna可视化图形看:

 

zabbix队列10分钟以上一万二 zabbix队列积压_服务器_03

 

 

2、zabbix-server上poller进程的性能监控

 

优化前:

 

zabbix队列10分钟以上一万二 zabbix队列积压_服务器_04

 

 

优化后:

 

zabbix队列10分钟以上一万二 zabbix队列积压_服务器_05

 

 

3、zabbix-server收集数据时各个进程的性能监控,一直处于100%的可以看到是zabbix busy poller process;优化后降了很多

 

zabbix队列10分钟以上一万二 zabbix队列积压_zabbix队列10分钟以上一万二_06

 

 

预测原因

 

1)是不是zabbix-server端主机的性能不行,要不要切分出来,做代理之类的。但是通过数据可以看到CPU只用了不到%6,说明主机还没有完全跑起来,岂不是浪费资源了。所以,可以增加zabbix服务端收集数据的各个进程数量。那就动手试试看。

 

zabbix队列10分钟以上一万二 zabbix队列积压_数据_07

 

 

先了解一下zabbix-server收集数据时,需要哪些进程,以及对应与zabbix server配置文件里的哪个配置项,分别代表是什么意思?

 

收集数据时的进程有如下:

 

zabbix队列10分钟以上一万二 zabbix队列积压_数据_08

 

 

对应的配置文件如下:

StartTrappers=20                     Trappers初始子进程数
StartPollers=20                      初始化时启动子进程数量,数量越多,则服务端吞吐能力越强,最系统资源消耗越大
StartIPMIPollers=1                   主要用于IPMI技术用于获取硬件状态场景,如果无相关监控项,建议设置为0
StartDiscoverers=1                   用于设置自动发现主机的子进程数量
StartPingers=10                      用于设置启用icmp协议PING主机方式启动子进程数量
StartHTTPPollers=1                   HTTP主动监测的进程数
StartProxyPollers=1                  启用多少子进程与代理端通信
StartPollersUnreachable=10           默认情况下,zabbix会启动指定进程用于探测某些不可达主机(含IPMI场景);若场景中含有代理端,建议使用默认,若直接agent较多,根据值调整
StartDBSyncers=4                     DB同步进程数量

 

 

通过ps -ef |grep zabbix来看一下zabbix服务端的进程分别代表什么意思:

 

zabbix队列10分钟以上一万二 zabbix队列积压_服务器_09

 

报警器(alerter)                                该类型的进程是用来发送报警通知的;
配置同步器(configuration syncer)               用于将配置文件中的配置信息同步到内存中缓存;
数据发送器(data sender)                        服务器代理节点用于发送数据的进程(服务器端没有这类进程);
数据库看门狗(db watchdog)                      该进程用于监视zabbix系统的数据库状态,当数据库状态变为不可用时,发送警告信息(服务器代理端不支持这类型进程)。
自动发现器(discoverer)                         用于自动发现设备的进程;
步骤(escalator)                               用于处理动作中的步骤的进程;
心跳发送器(heartbeat sender)                   服务器代理端用于发送心跳信息(服务器端没有这类型的进程);
历史数据同步器(history syncer)                 用于写历史数据表;
管家(housekeeper)                             用于清理过期的历史数据的进程;
HTTP 轮询器(http poller)                      用于轮询web类的监控项目;
Ping检查器(icmp pinger)                       用于定期的进行ICMP PING检查;
ipmi 轮询器(ipmi poller)                     用于定期进行ipmi监控项目的检查;
java 轮询器(java poller)                      用于轮询java 监控项目;
分布式节点看守器(node watcher)                  用于在不同的分布式节点发送历史数据和配置信息更新的进程;
轮询器(poller)                                用于普通的被动监控项目的轮询;
服务器代理轮询(proxy poller)                   用于服务器代理的被动轮询;
自我监控(self-monitoring)                     用于收集Zabbix系统内部的监控信息;
定时器(timer)                                 用于处理触发器中也时间相关的函数和维护模式的进程;
陷入器(trapper)                               用于处理主动采集、陷入以及分布式节点间或服务器代理的通信;
不可到达轮询器(unreachable poller)             用于轮询不可到达到的设备;
vmware 收集器(vmware collector)               负责从vmware服务进程中收集数据(服务器代理端不支持这种类型的进程);

 

图片版的:

 

zabbix队列10分钟以上一万二 zabbix队列积压_zabbix队列10分钟以上一万二_10

 

 

然后根据自己的zabbix服务状态,我把我的配置文件打开了这几个配置项,并修改了参数值;那么这些参数值具体调多少合适呢?

我的理解:这里得根据你的客户端数,服务器性能,然后得慢慢调,去测试才行

 


 

StartPollers=20
StartIPMIPollers=1
StartPollersUnreachable=10
StartTrappers=20
StartPingers=10
StartDBSyncers=4

 

知识项


1)队列(Queue) 


在Adminstartion --> Queue 这里可以看到

zabbix队列10分钟以上一万二 zabbix队列积压_服务器_11

 

这里的队列表示的是正在等待刷新的监控项;这里的图片越绿越好,绿色表示我们的zabbix 服务端运行良好;像前面的图片中有其他颜色的,表明有等待,可以通过最右上角那里查看是什么具体的细节;如:

 

zabbix队列10分钟以上一万二 zabbix队列积压_服务端_12

 

 

2)zabbix的NVPS(number of values processed per second)

 

每秒处理数值数,可以作为衡量zabbix服务端性能指标之一

 

zabbix队列10分钟以上一万二 zabbix队列积压_服务器_13