暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

大型监控项目采集延迟处理经验总结

IT那活儿 2023-02-03
1756
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

一、告警数据处理

未恢复的历史告警如果较多,zabbix_server会不断地去检索未恢复的告警并更新告警持续时间,造成zabbix_server压力较大。此时需要禁用掉用户不关注/不必要的告警,然后删除历史告警信息。

1.1 禁用监控模板下各类资产信息的警告/提示等非重要的告警触发器
1.2 告警数据删除
1)停止zabbix server 、alartm-center、amp
删除以下表数据:
events
problem
snc_alarms
snc_alarms_trigger_value
snc_alarms_history
snc_alarms_handle_record
snc_alarms_history_handle_record
snc_alarms_history_trigger_value
snc_notice_alerts_detail
snc_notice_alerts

2)清除以下topic

AMP_ALARM_CENTER
AMP_ALARM_CENTER_TOPIC
AMP_EVENT_ALARM
AMP_EVENT_ALARM
AMP_STRATEGY_INFO
alarm_notifies
alarm_values
alarm_values_transformed
alarm_values_transformed_err
amp_alarm_info
amp_alarm_notice
amp_zabbix
snc_alarm_notice
notification_default

二、数据库参数优化及大表清理

2.1 数据库参数调优

由于发现zabbix server同步数据较慢,疑似数据库写入较慢导致,可以考虑调整数据库参数来优化数据库性能,具体需要咨询数据库专家,以所属地24c和40G内存的mysql数据库为例

参数说明:

  • innodb_write_io_threads和innodb_read_io_threads一般配置为cpu核数的一半,再根据读写的实际情况稍微调整,写的事务大于读的事务,就将innodb_write_io_threadss参数稍微大于innodb_read_io_threads参数,反之则调换。
  • innodb_page_cleaners 为page cleaner线程从buffer pool中刷脏页的线程数量,innodb_buffer_pool_instances可以开启多个内存缓冲池,把需要缓冲的数据hash到不同的缓冲池中,这样可以并行的内存读写,两个参数配合一起使用。
  • allowed_package  传输包的上限值,可理解成一个事务传送的包最大值,太大会导致整个事务卡住。
2.2 写入/更新数据报错排查处理
重点关注zabbix_server日志中是否存在插入数据或更新数据报错情况,如下为所属地发现的event_recovery表插入数据报主键冲突。
排查发现数据量达到了两亿多条,表数据过大,导致事件恢复数据插入到event_recovery表时报错。清除event_recovery表数据后无就未报错了。
  • 表数据量可能会很大,清表时可能会导致事务拥塞,可能需要等很长时间(所属地清这张表花了45分钟左右)。
2.3 对数据库千万以上数据量大表配置自动分区
查询数据库中的大表,对达到千万条数据量及以上的表可以先清数据后配置自动分区,常见大表一般为events、event_recovery、items和last等。
表数据量查询建议sql如下:

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='amp' and table_rows>=5
order by table_rows desc, index_length desc ;

三、proxy状态排查和参数优化

3.1 查看proxy进程的执行时间

查看zabbix_proxy的进程,看有没有耗时比较大的进程,如果耗时普遍比较大,就需要考虑给zabbix_proxy减压,增加proxy的数量,拆分部分挂载机器。
ps -ef|grep zabbix_procy
3.2 查看proxy服务器的磁盘空间
查看proxy服务器的磁盘空间,/目录和proxy所在的目录空间是否占满,所属地曾出现过一次proxy服务器的/达到100%,无法执行命令导致proxy和zabbix_server无法正常同步数据,导致整个采集都受到影响。所以平时一定要把各服务器的磁盘空间/分区纳入到监控和配置短信告警。
3.3 proxy参数检查
重点关注proxy的配置文件zabbix_proxy.conf的ConfigFrequency参数是否合理。

 ConfigFrequency为proxy向zabbix_server获取监控配置(监控项,主机清单等)的配置项,过于频繁向zabbix_server获取数据会导致zabbix_server压力过大。小董项目原来的ConfigFrequency=120,后来调整成ConfigFrequency=1800.

四、zabbix_server进程观察及参数调优

4.1 重点关注preproces进程中待处理数据的积压情况和history syncer进程的时间消耗情况

1)用于处理agent数据的preproces进程
watch -tn 0.2 'ps -fC zabbix_server | grep preprocessing'
这个预处理的值是一个动态值,正常值在0-10000之间,如果持续不断增加的话,最终待处理数据会把内存撑爆,最终内存溢出,操作系统会主动kill调zabbix_server进程。
此时需要调整StartPollers和StartPreprocessors参数,以便zabbix_server收集和处理来自agent的数据能用一个良好的配合。
2)历史数据同步进程
watch -tn 0.2 'ps -fC zabbix_server | grep history'
如果历史数据同步耗时较高,基本达到30秒以上,就表明数据库写入数据过慢,需要查看数据库I/O负载,数据库慢查询是不是过多消耗了数据库性能,是否能优化参数提升数据库的写性能,同时稍微调整zabbix_server的ValueCacheSize参数。
4.2 查询zabbix_server error日志,修改或禁用问题监控项
过滤出zabbix_server所有error日志,大部分是由于采集数据的长度,监控脚本同步失败导致采集异常的异常json串等,需要重新正常下发监控脚本解决采集异常的问题,如果不能解决,可以考虑经验模板或具体监控目标的监控项。
4.3 小董项目zabbix_server参数调优情况

4.4 zabbix_server.cnf参数说明

  • HistoryStorageDateIndex=1
    将历史数据保存到不同的elasticsearch索引;
  • ExportFileSize=100M
    定义每个导出文件的最大大小;
  • StartPollers=400
    启动多少个进程收集来自agent的数据,默认轮询方式,处理完一个agent的数据换下一个进程;
  • StartPreprocessors=200
    预启动多少个进程用于处理zabbix agent数据;
  • StartPollersUnreachable=50 
    对不可达主机的进行轮询探测的进程的初始实例启动数量;
  • StartTrappers=100
    预启动的Trappers(告警触发器)进程数据;
  • StartPingers=50
    ICMP ping进程的初始实例数量;
  • StartDiscoverers=50
    自动发现主机的进程数量;
  • StartTimers=10
    计时器实例数量,计时器用于记录问题的发生时间和步骤同步等;
  • StartEscalators=10
    escalators进程的初始实例数量,用于处理动作中的自动步骤的进程的数量;
  • StartAlerters=30
    告警实例预启动数量;
  • VMwareCacheSize=2G
    vmware数据缓存大小,会占用zabbix server服务器内存;
  • HousekeepingFrequency=0
    多少小时清理一次代理端数据库的历史数据;
  • CacheSize=8G
    缓存大小;
  • CacheUpdateFrequency=3600
    Zabbix更新缓存数据的频率,单位为秒,范围是1-3600;
  • StartDBSyncers=100
    zabbix和数据库同步数据的进程数量;
  • HistoryCacheSize=2G  
    历史数据的缓存大小,128K-2G;
  • HistoryIndexCacheSize=2G  
    历史数据索引缓存的大小,128K-2G;
  • TrendCacheSize=2G    
    用于设置划分多少系统共享内存用于存储计算出来的趋势数据,此参数值从一定程度上可缓解数据库读压力,范围是128K-2G;
  • ValueCacheSize=32G 
    历史值缓存的大小,用于缓存历史数据请求的共享内存大小;
  • Timeout=4        
    数据获取等待超时时间,1-30s,过期不候,哪怕数据来了也是记录超时;
  • UnreachableDelay=60  
    当主机不可到达了,多久检查一次该主机的可用性,单位为秒,范围是1-3600;
  • StartProxyPollers=100  
    启用多少子进程与代理端通信,若代理较多可考虑加大此数值,范围是0-250;
  • ProxyConfigFrequency=300  
    proxy被动模式下,server多少秒同步配置文件至proxy,该参数仅用于被动模式下的代理,范围是1-3600*24*7;
  • ProxyDataFrequency=120    
    被动模式下,zabbix server间隔多少秒向proxy请求历史数据,1-3600s。

END


本文作者:IT那活儿(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论