zabbix 监控项自定义时间间隔(调度)
背景:
在对接一个云平台的监控数据时,发现有监控项获取不到数据,但通过手动执行脚本发现数据是可正常获取的。最初开始以为是执行用户的问题,切换agent执行用户以后继续执行,返回结果仍是正常的。
通过多次执行分析,若在每分钟的前20秒内执行,基本都是失败,只有在每分钟的20秒到59秒之间执行脚本才会正常返回数据。为什么会这样无法细究,这个是云平台内部的问题。在我的角度是尽可能避开监控项在这个时间段内(每分钟前20秒)执行。
解决:
尝试指定监控项固定执行时间,避开每分钟前20秒执行。
现在拿一台主机中的某个监控项为例
1. 现在这台主机的ping检查,设置的就是一分钟的采集间隔。
可以看到这个监控项的采集时间是每分钟的第10秒。通常像这种具体的时间点分配是系统默认调度行为,系统会自动将相同间隔的监控项的执行时间错开,目的是避免所有监控项在同一时刻并发执行,提升系统性能和稳定性。
1. 如需指定具体执行时间点可以在监控项中的自定义时间间隔中配置“调度”模式。
l 更新间隔改为0,意思是不再用这个间隔来定义取值时间。若沿用之前的1m,那每隔一分钟之后仍会取得一个值。
l 自定义时间间隔选择“调度”,间隔框内写s30,意思是每分钟的第30秒执行取值。
另外需要注意的是调度的方式只能用于被动模式类型的监控项(即是由proxy或者server发起请求的类型,如“简单检查”、“Zabbix客户端”这种类型),而不能用于主动式类型的监控项(即是由监控对象主动推送数据到proxy或者server的类型,如“Zabbix客户端(主动式)”)。
3. 经过取值刷新以后,再查看监控项的取值具体时间,可以看到现在的取值变为固定的每分钟第30秒。
关于调度的取值配置说明:
调度的取值过滤器前缀的有效
前缀
描述
md
Month days
1-31
1-31
wd
Week days
1-7
1-7
h
Hours
0-23
0-23
m
Minutes
0-59
0-59
s
Seconds
0-59
0-59
l md为月,有效值为1-31
l wd为周,有效值为1-7
l h为时,有效值为0-23
l m为分,有效值是0-59
l s为秒,有效值是0-59
实际上是调度的执行间隔写法很灵活,以下是调度方式的取值间隔写法参考:
m0-59
每分钟执行一次
h9-17/2
从9:00开始每2小时执行一次(9:00,11:00 ...)
m0,30 or m/30
在每小时的hh:00 和 hh:30执行
m0,5,10,15,20,25,30,35,40,45,50,55 or m/5
每5分钟执行
wd1-5h9
每周一至周五9:00
wd1-5h9-18
每个星期一到星期五在9:00,10:00,...,18:00
h9,10,11 or h9-11
每天上午9:00,10:00和11:00
md1h9m30
每个月的第一天在9:30
md1wd1h9m30
如果是星期一,每个月的第一天在9:30执行
h9m/30
在9:00,9:30执行
h9m0-59/30
在9:00,9:30执行
h9,10m/30
在9:00,9:30,10:00,10:30执行
h9-10m30
在9:30,10:30执行
h9m10-40/30
在9:10,9:40执行
h9,10m10-40/30
在9:10,9:40,10:10,10:40执行
h9-10m10-40/30
在9:10,9:40,10:10,10:40执行
h9m10-40
在9:10,9:11,9:12,... 9:40执行
h9m10-40/1
在9:10,9:11,9:12,... 9:40执行
h9-12,15
在9:00,10:00,11:00,12:00,15:00执行
h9-12,15m0
在9:00,10:00,11:00,12:00,15:00执行
h9-12s30
在9:00:30,9:01:30,9:02:30 ... 12:58:30,12:59:30执行
h9m/30;h10 (API-指定语法)
在9:00,9:30,10:00执行