Zabbix进阶4--性能优化相关

Zabbix进程及其功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
报警器(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服务进程中收集数据(服务器代理端不支持这种类型的进程);

配置文件解析

1
2
3
4
5
6
7
8
9
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同步进程数量

Zabbix Server

配置详解: http://t.zoukankan.com/Rohn-p-14788840.html
下面是部分参数的展示

配置 默认值 推荐值
StartDBSyncers 4 8,不宜太高,默认值已能处理4000 NVPS
StartAlerters 3 6
StartDiscoverers 1 3
StartPollers 5 12
StartPreprocessors 3 6
StartProxyPollers 1 3
StartTrappers 5 12
StartLLDProcessors 2 3
StartEscalators 1 1
CacheSize 256M 缓存大小, 单位为字节。 用于存储主机、监控项、触发器数据的共享内存大小。 Zabbix2.2.3以前的版本最大可配置值为2GB。
CacheUpdateFrequency 60 Zabbix 配置缓存更新频率, 单位为秒
DebugLevel 3 指定调试等级: 0 - Zabbix进程的起停基本信息 1 - 严重(Critical)信息 2 - 错误(Error)信息 3 - 警告(Warning)信息 4 - 调试(Debug)信息 (产生大量信息) 5 - 扩展调试 (产生更多信息)
ExportFileSize 1G 每个导出文件的最大限制,单位为字节。仅当ExportDir参数设置后才使用,用于轮转生成导出的文件。 此参数从Zabbix 4.0.0开始支持。
HistoryCacheSize 128M 历史缓存数据大小, 单位为字节。
HistoryIndexCacheSize 16M 历史索引缓存大小, 单位为字节。缓存一个item大概需要大小为100字节的空间。 该参数从Zabbix 3.0.0开始支持。
HistoryStorageDateIndex 1 启用历史数据预处理,可以将数据存储到不同的基于时间的索引: 0 - 禁止 1 - 允许
HistoryStorageURL 你的ES URL 历史数据存储 HTTP[S] URL,用于把历史数据存储到ElasticSearch。 这个参数参考 Elasticsearch进行配置。
HistoryStorageTypes uint,dbl,str,log,text 以逗号分隔的列表配置哪些类型的历史数据需要存储到Elasticsearch。 这个参数参考 Elasticsearch 进行配置
HousekeepingFrequency 3 Zabbix 执行 housekeeping 的频率 (单位为小时)。 housekeeping负责从数据库中删除过期的信息。注意: 为了防止 housekeeper 负载过大 (例如, 当历史和趋势周期大大减小时), 对于每一个监控项,不会在一个housekeeping周期内删除超过4倍HousekeepingFrequency 的过期数据。 因此, 如果 HousekeepingFrequency 是 1小时, 一个周期内不会删除超过4小时的过期信息 (从最旧的数据开始) 。  备注: 为降低 server压力, housekeeping将在server启动以后,延迟30分钟执行。 因此, 如果 HousekeepingFrequency 是1小时,server启动30分后执行第一次 housekeeping , 然后按1小时为周期重复执行。从Zabbix 2.4.0以后有了这种延迟行为。 从Zabbix 3.0.0开始,可以设置HousekeepingFrequency为0来禁止自动housekeeping。 此时 housekeeping 只能通过 housekeeper_execute 启动, 在一个housuekeeping周期内删除的过期信息时长为从最后一次housekeeping以来到配置周期的4倍,不少于4小时且不大于4天。 也可参见运行控制 选项。
LogFile 日志文件名称。
LogFileSize 128 日志文件大小,单位 MB。 0 - 禁止日志文件自动回滚. 注意: 如果日志文件达到限定的大小,文件回滚失败, 不管是什么原因, 现有的日志会被截断,并重新记录日志。
LogType file 日志输出类型: file - 写入LogFile 参数指定的日志文件中, system - 写入syslog, console - 控制台输出. 从Zabbix 3.0.0开始支持该参数。
LogSlowQueries 3000 数据库查询消耗时间,大于该时间将会记入日志 (毫秒)。 0 - 不记录慢查询日志。 DebugLevel=3时该选项可用。 从Zabbix 1.8.2开始支持该参数
MaxHousekeeperDelete 5000 一个housekeeping周期内,一个任务删除的最大行数 (相应的表名,字段名,值)。 如果设置为0,不限制删除的行数,这种情况,你必须清楚这样做的影响! 从Zabbix 1.8.2 开始支持该参数,仅在对已经被删除的监控项进行历史和趋势数据删除操作时有效
ProxyConfigFrequency 180 Zabbix server 多少秒向Zabbix proxy 发送一次配置数据,用于被动模式的proxy 。 从Zabbix 1.8.3开始支持该参数。
ProxyDataFrequency 1 Zabbix server 多少秒向Zabbix proxy请求一次历史数据, 用于被动模式的proxy。从Zabbix 1.8.3开始支持该参数。
StartDBSyncers 8 数据库进程的初始实例数量。 在版本1.8.5之前,上限是64。 这个参数从Zabbix 1.8.3开始得到了支持
StartAlerters 12 报警进程的初始实例数量。 从Zabbix 3.4.0开始支持该参数
StartDiscoverers 12 发现进程的初始实例数量。 在Zabbix 1.8.5版本之前,最大能设置为255。
StartEscalators 12 escalators进程的初始实例数量。 从Zabbix 3.0.0开始支持该参数
StartHTTPPollers 6 HTTP 轮询进程的初始实例数量. 在Zabbix 1.8.5版本之前,最大能设置为255。
StartIPMIPollers 3 IPMI 轮询进程的初始实例数量。 在Zabbix 1.8.5版本之前,最大能设置为255。
StartJavaPollers 6 Java 轮询子进程的初始实例数量。. 从Zabbix 2.0.0开始支持该参数。
StartLLDProcessors 2 Number of pre-forked instances of low-level discovery (LLD) workers1. The LLD manager process is automatically started when an LLD worker is started. This parameter is supported since Zabbix 4.2.0.
StartPingers 12 ICMP pingers进程的初始实例数量1. 在Zabbix 1.8.5版本之前,最大能设置为255。
StartPollersUnreachable 6 不可达主机 (包括IPMI 和 Java)的轮询进程的初始实例数量。1. 从Zabbix 2.4.0开始,如果IPMI或Java轮询器启动,那么至少有一个针对不可访问主机的轮询进程必须运行。 在Zabbix 1.8.5版本之前,最大能设置为255。 这个参数从Zabbix 1.8.3版本缺失。
StartPollers 12 轮询进程的初始实例数量。.注意如果要内部,聚合,计算的监控项能正常工作,这个参数值必须非0。
StartPreprocessors 12 预处理工作进程的初始实例数量。预处理管理进程将跟随预处理工作进程启动. 从Zabbix 3.4.0开始支持该参数。

数据库优化

如果数据库和zabbix在一台机器,可以使用socket连接,速度会提高。数据库zabbix来说,选择InnoDB引擎,效率是其它引擎的1.5倍

对history类型的(history、history_uint等)大表进行拆分操作,关闭housekeeper禁止自动定期清除历史记录数据,因为对于数据库特别是对于InnoDB引擎大数据删除貌似很蛋疼。

可以对数据库配置文件调优,因为都要提交到数据库中,当机器很多时,数据库压力会很大

如果还是太多,可以考虑将mysql单独一台,并设置读写分离,可以用中间件实现。

服务端配置优化

关闭服务端的housekeep

housekeep是清理历史的机制,配置文件中,默认是每小时启动一次,然后清除监控项设置之外的多余历史记录。比如mysql监控项默认保存90天,他会清除90天以外的,这会导致经常去清理,有时会报错:Zabbix housekeeper processes more than 75% busy

调整监控项

很多监控项都是无用的或者目前用不到的,像redis监控模板中的调阅/发布监控项应该去掉。

监控项的类型最好使用数字,尽量避免使用字符。字符在数据库中的存储空间使用较大,在设置trigger时也相对麻烦,并且zabbix本身处理数字的效率要相对高。如果业务需要字符类型的监控项,可以适当的降低数据采集的时间间隔以提高处理效率

Trigger中,正则表达式函数last(),nodata()的速度最快,min()、max()、avg()的速度最慢。在使用过程中,尽量选择速度较快的函数。配置Trigger时,也应注意使用正确的逻辑,错误的逻辑可能导致数据库查询较慢的现象。

item监控性默认大部分都是保留90d(天)或者1w(周)的历史数据,趋势图数据保留365天。

其实有趋势图数据即可,历史数据保留7天足够了,采集频率,像磁盘,文件大小等很久才变化的,采集频率可以加大,以达到缓解压力和节省空间的作用

如果主机数量太多,采用代理

如果主机数量太多,可以考虑分机房,分业务,分组的方式来用代理中转。zabbix_proxy可以代替服务端收集数据和监控,但是监控结果还是发送到服务端汇总,代理是没有web界面的。

如果机器太多,可以用主动模式,当前所有默认都是被动模式的,客户端启动10051端口,服务端需要去10051取数据。

  • 减少 history 保存时间
  • 减少 item 获取间隔时间
  • 减少不必要的监控项