Zabbix-Trigger中的time函数坑

63 阅读1分钟

问题描述

由于功能需求,需要限制trigger的报警时间,所以加了如下的报警限制

and (time()>010000 and time()<045959)

但是事与愿违,报警的时间总是对不上

1.png 但是,Zabbix设置的时区就是北京时间,应该是没有问题的

问题研究

根据报警的时间,与预期时间相对比,发现总是差了8个小时,所以怀疑是不是哪里的时区设置不正确,采用排除法,最终确定是服务器本身设置的时区在UTC导致

解决方案

需要修改服务器对应的时区

查看当前时区

timedatectl

Local time: Wed 2023-10-25 12:34:56 UTC
Universal time: Wed 2023-10-25 12:34:56 UTC
RTC time: Wed 2023-10-25 12:34:56
Time zone: UTC (UTC, +0000)

列出所有的时区

timedatectl list-timezones |grep Asia

设置时区

sudo timedatectl set-timezone <时区名称>

验证时区是否修改成功

timedatectl

总结

根据这个解决方案可以看出,zabbix的time()函数应该是直接调用了服务器的time命令,因此,跟Zabbix这个服务无关,我们需要针对运行服务器做针对性修改