大数跨境
0
0

Zabbix 监控 Web探测如何设置定时触发器 ?

Zabbix 监控 Web探测如何设置定时触发器 ? Linux运维技术之路
2025-07-10
8
导读:Zabbix 监控 Web探测如何设置定时触发器 ?

 










 

Zabbix 监控 Web探测如何设置定时触发器 ?

目标

需求 : 实现一个触发器,当 Web 探测连续失败 3 次时,仅在每天 21:00 ~ 21:30 时间段内触发报警,其他时间不触发。


Zabbix 限制说明

  • • Zabbix 5.0 不支持在触发器表达式中直接使用 time() 函数。(zabbix >5.0 版本 ,触发器可以直接使用 time()函数)
  • • 需要通过创建一个自定义 item 获取当前时间,并在触发器表达式中使用该 item 实现时间判断。

方案一:zabbix开启远程执行命令功能

步骤一:创建获取当前时间的 Item

➤ 登录 Zabbix 前端

  • • 进入主机:HOSTNAME
  • • 选择「Items」标签页

➤ 添加 Item 配置如下:

参数
Name
Current Time (HHMMSS)
Type
Zabbix agent
Key system.run[date +%H%M%S]
Type of Info
Numeric (unsigned)
Update Interval 60
History Storage
根据需求设置,如 7d
Applications
可选,新建或添加到现有的「System」应用组

🔒 注意:

确保 Zabbix agent 配置文件中开启以下设置:

EnableRemoteCommands=1
UnsafeUserParameters=1

编辑配置文件(例如 /etc/zabbix/zabbix_agentd.conf),修改并重启 agent:

sudo systemctl restart zabbix-agent

🛠️ 步骤二:改造 Web 探测触发器

➤ 原始触发器表达式:

{HOSTNAME:web.test.fail[http://192.168.2.76:8072/check.html].count(#3,1,eq)}=3

➤ 改造后表达式:

({HOSTNAME:web.test.fail[http://192.168.2.76:8072/check.html].count(#3,1,eq)}=3)
and
({HOSTNAME:system.run[date +%H%M%S].last()}>=210000 and {HOSTNAME:system.run[date +%H%M%S].last()}<=213000)

➤ 添加触发器操作:

  1. 1. 进入主机:HOSTNAME
  2. 2. 点击「Triggers」→「Create trigger」
  3. 3. 填写字段:
字段
内容
Name
Web 监控失败(仅限 21:00~21:30)
Severity
High(或根据业务重要性选择)
Expression
使用上方的改造表达式粘贴
OK Event Gen.
根据业务需求设置(如:表达式恢复即 OK)
Dependencies
可选

✅ 验证与测试建议

✔ 检查当前时间 item 是否正常工作:

在「Latest data」中搜索:

  • • system.run[date +%H%M%S] 是否定期更新,格式如 210503

✔ 调整时间验证:

  • • 临时把表达式时间段设成当前时间附近,例如 time >= 150000 and <= 160000,以快速测试触发逻辑。

方案二:可选优化方案(安全性)

若不希望启用 system.run,可使用 external script:

1、创建脚本

/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/current_time.sh

#!/bin/bash
date +%H%M%S

2、赋予权限:

chmod +x /usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/current_time.sh

3、配置自定监控项:

UserParameter=current.time,/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/current_time.sh

4、在 Item 中配置:



5、触发器

({HOSTNAME:web.test.fail[http://192.168.2.76:8072/check.html].count(#3,1,eq)}=3) and  ({HOSTNAME:current.time.last()}>="210000" and  {HOSTNAME:current.time.last()}<="213000")

总结

方法
是否适用于 Zabbix 5.0
推荐程度
说明
使用 time() 函数
❌ 不支持
5.0 不支持此函数
添加 system.run[date +%H%M%S] Item
✅ 支持
✅ 推荐
最直接
添加自定义监控 external script 获取时间
✅ 支持
✅ 推荐稳定
更安全灵活

 




 

 


往期回顾


【声明】内容源于网络
0
0
Linux运维技术之路
专注运维架构、高可用、高并发、高性能、大数据、容器化、数据库、python、devops等开源技术和实践的分享。
内容 347
粉丝 0
Linux运维技术之路 专注运维架构、高可用、高并发、高性能、大数据、容器化、数据库、python、devops等开源技术和实践的分享。
总阅读794
粉丝0
内容347