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秒。
关于调度的取值配置说明:
调度的取值过滤器前缀的有效 <from> 和 <to> 值分别为:
前缀 |
描述 |
<from> |
<to> |
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执行 |