起因:近几日zabbix报警的恢复时间变得很长,页面有卡顿的现象。抓包查看发现,确实是收到了最近正常的值,但是面板不更新,重新zabbix_server进程,才能完成面板更新。
1. Zabbix性能概述
当zabbix性能低时会出现多种状况,Zabbix前端页面出现无响应、卡顿、列队无法更新,zabbix图形中经常出现断图,无图。一些item获取不到数据。列队中出现大多被延迟的item
如何判断zabbix-server性能
首页导航中通过zabbix状态可以看到zabbix的主机数量、监控项的数目、触发器的数目。并通过zabbix的NVPS(每秒处理数值数)衡量性能标准,NVPS是通过PHP代码编写实现的计算,从总体上反映出了zabbix-server的处理速度。
NVPS与History的保留时间和Trends的保留时间都有直接关系。如下图中zabbix状态性能提升空间还很大,可以调整主机模版、修改被禁用和不支持的监控项及触发器。
我这里因为服务器比较老,再加上zabbix,mysql都是比较老的所以数字会很低
可以通过看zabbix对于本身server列队的监控,来确定是什么类型的监控项造成的性能问题,见下图。等待的列队越多、时间越长,说明zabbix-server性能越差。可以针对受影响的监控类型做调整,比如调整监控项的时间间隔,或者根据监控类型定制模版,将模版写到最简。如果以上方法还是没有效果,那么就说明zabbix server压力过大,采用搭建proxy分布式架构,将server的压力分担给proxy
上图是我调整后的
调整前
从上图可以看出有几个监控项延迟达到3年。。。。。
先将这几个延迟超长的监控项禁用掉,完事看看队列是否有变化
2. Zabbix配置文件优化
Zabbix自带模版还会监控各工作进程的状态,可对数据收集过程中的性能做分析,见下图,数据采集过程和使用缓存的空间容量。需要特别注意的有:
Zabbix busy housekeeper processes,in %##管家处理数据占缓存的百分比
Zabbix busy history syncer processes,in %##写入数据库的同步程序占缓存的百分比
Zabbix busy poller processes,in % ## zabbix轮询进程占比
Zabbix busy unreachable poller processes in %##不可达的轮询进程占比
root@localhost ~]# vim /etc/zabbix/zabbix_server.conf
#配置文件前面内容为初始安装zabbix时需要配置的基本参数。找到高级配置这一行开始,涉及优化内容用红色标识填充
############ ADVANCED PARAMETERS #################
### Option: StartPollers
# Number of pre-forked instances of pollers.
#
# Mandatory: no
# Range: 0-100
# Default:
StartPollers=5
#填写范围0-100,默认5 。轮询处理监控项的进程数,增加太大会影响服务器本身性能,保持此参数的值尽可能低,20000个监控项大概控制在80左右即可。
StartIPMIPollers=0
#IPMI轮询进程实例个数,服务器使用IPMI协议监控时需要更改此项,默认0为关闭
StartPollersUnreachable=10
#不可达主机轮询数量。此值特别耗费性能,设置在10-20之间即可,默认1
StartTrappers=5
#负责处理agents和proxy推送过来的数据的进程数,默认为5,如果zabbix-agent监控类型较多需要加大此参数
StartPingers=1
# ICMP- ping进程轮询实例数,默认为1.,建议更改为20-50之间,根据业务填写即可。
StartDiscoverers=1
#自动发现子进程实例数,默认为1,范围0-250
StartHTTPPollers=1
#HTTP进程轮询实例个数,默认1,范围0-1000,web监控不多选择默认即可
HousekeepingFrequency=1
#zabbix执行管家的频率,从数据库中删除过期的数据。为了防止 housekeeper 过载 (例如, 当历史和趋势周期大大减小时), 对于每一个item,不会在一个housek周期内删除超过4倍HousekeepingFrequency 的过时信息. 因此, 如果 HousekeepingFrequency 是 1, 一个周期内不会删除超过4小时的过时信息,为了降低server压力,kousekeeping延后server启动30分钟,默认为1,最大24,为0时关闭使用。
MaxHousekeeperDelete=5000
#执行一个Housekeeping周期时,默认删除的数据条目数。默认5000条。如果设置为0,不限制删除的行数,这种情况数据库多数会崩溃。
CacheSize=8M
#缓存大小,单位字节。用于存储主机、监控项、触发器数据的共享内存大小,默认8M最大8G。根据自身zabbix业务需求配置合理的参数。
CacheUpdateFrequency=60
#zabbix缓存更新频率,单位秒。设置范围1-3600
HistoryCacheSize=1024M
#历史数据缓存大小,单位字节
TrendCacheSize=256M
#趋势数据缓存大小,单位字节。用于存储趋势数据的共享内存大小
ValueCacheSize=1024M
#历史数据缓存大小, 单位bytes.缓存item历史数据请求的共享内存大小.0即禁止缓存(不建议这么做)
Timeout=3
#agent, SNMP 设备或外部检查的超时时长(单位秒),填写范围1-30
以上为配置优化主要参数,其他内容配置文件中均有简要说明,可根据业务需求更改优化。对配置参数进行合理的设置会使zabbix处于正常的工作状态。值越大,越高消耗的CPU和内存越多。修改配置文件后,需要重启zabbix-server进程。加载新配置生效
当以上方法不能有效时,建议清楚一下趋势数据。当然如果有保存的需求,那就只能做分片了(本文不涉及分片)。
truncate table history;
truncate table history_str;
truncate table history_uint;
truncate table trends;
truncate table trends_uint;