查看原文
其他

真实案例:Zabbix调用脚本超时解决方案

Zabbix大叔_乐维 twt企业IT社区 2024-02-18

【作者】许远,任职于广州九一乐维信息科技有限公司 


场景模拟:

  1. 企业需要对某台执行一个清理系统垃圾的脚本

  2. 企业需要对某台数据库执行一个查询数据库的脚本

  3. 企业需要对某台监控设备进行一系列动作的脚本

现象分析:

使用过zabbix调用脚本的运维人员都知道的一个现象,就是如果脚本运行的时间超过30秒,就会获取该脚本执行的结果。

上述原因是zabbix的内部源码造成的,它限制了脚本执行的时间最多不超过30s。

现象重现:

我们在 /usr/local/zabbix/scripts/ 目录下创建一个test目录,并创建一个test.py脚本,(shell脚本也行)

我们在脚本中加一个time .sleep(35) ,模拟脚本调用超时现象

执行改脚本。Time python test.py

从上图可以看出。手动执行改脚本是可以输出结果的。

接着在zabbix创建脚本,执行调用该脚本的操作

调用脚本

上图证明zabbix调用脚本有超时限制

解决方案:

第一步:

采用zabbix_agent内置键调用test .py 脚本

System.run[command,nowait]

Command :要执行的命令或者脚本

Nowait:不等待用户返回的结果,永远返回1

图中的{HOST .IP} zabbix的内置宏,他的作用是自动获取该脚本的主机ip

注意:最好写绝对路径,否则可能出现报错

图中如果system .run 的command参数中间有空格请加单引号或者双引号

第二步:

再次调用该脚本看一下

如果,此时脚本其实已经调用成功了,不会再出现超时提示。

第三步:

接收超时脚本的结果

创建一个zabbix采集器的监控项,命名为test

调整test .py 脚本结合zabbix_sender使用

总的过程就是通过system .run [command,nowait]内置键,触发该脚本,然后test .py 脚本执行完成后,把结果发送到监控主机上。

再次调用该脚本,永远返回1.

检查zabbix-server上的名称为test这个zabbix采集器的监控项有没有clean finish的字符串,有则说明,zabbix调用脚本成功。

验证成功。上述方法已经解决了脚本超时无法执行的问题

原题:企业真实案例:Zabbix调用脚本超时解决方案如有任何问题,可点击文末阅读原文,到社区原文下评论交流
觉得本文有用,请转发或点击“在看”,让更多同行看到


 资料/文章推荐:


欢迎关注社区 "zabbix"技术主题 ,将会不断更新优质资料、文章。地址:

https://www.talkwithtrend.com/Topic/9739


下载 twt 社区客户端 APP


长按识别二维码即可下载

或到应用商店搜索“twt”


长按二维码关注公众号

*本公众号所发布内容仅代表作者观点,不代表社区立场

继续滑动看下一个

真实案例:Zabbix调用脚本超时解决方案

Zabbix大叔_乐维 twt企业IT社区
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存