Zabbix自定义监控项,监控网站HTTP响应码
Zabbix默认模板可以监控很多指标,但监控网站HTTP响应码通常需要自定义监控项。
这篇文章会从零开始,教你用脚本和UserParameter在Zabbix Agent上创建一个自定义监控项,用来获取指定URL的HTTP状态码,并配置触发器和图形,最终在Zabbix前端看到实时数据。
整个过程适合零基础用户,只要按步骤操作就能完成。
准备工作:明确监控目标和环境
在开始配置之前,先确认以下条件:
- 已经部署好Zabbix Server和Zabbix Agent,并且Agent处于运行状态。
- 被监控主机上安装了
curl命令,用于发送HTTP请求。 - 知道要监控的网站URL,例如
https://www.example.com。 - 拥有Zabbix Agent配置文件的修改权限,通常路径是
/etc/zabbix/zabbix_agentd.conf。
关键点:自定义监控项需要Zabbix Agent主动执行脚本,因此脚本必须放在Agent能访问的路径下,并且Agent运行用户要有执行权限。
编写获取HTTP响应码的脚本
首先,在Zabbix Agent所在主机上创建一个脚本,例如/usr/local/bin/check_http_code.sh。
#!/bin/bash
# 检查网站HTTP响应码
# 用法: ./check_http_code.sh
URL="$1"
if [ -z "$URL" ]; then
echo "0"
exit 1
fi
# 使用curl获取HTTP状态码,-s静默模式,-o /dev/null丢弃页面内容,-w输出状态码
code=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 10 --max-time 20 "$URL")
# 如果curl执行失败,返回000
if [ $? -ne 0 ]; then
echo "000"
else
echo "$code"
fi
保存后赋予执行权限:
chmod +x /usr/local/bin/check_http_code.sh
避坑提示:脚本中--connect-timeout和--max-time可以避免因网络问题导致长时间阻塞。
如果网站需要忽略证书错误,可以加上-k参数。
返回000表示请求失败,便于后续触发器判断。
配置Zabbix Agent的UserParameter
下一步,告诉Zabbix Agent如何调用这个脚本。
编辑Agent配置文件:
vim /etc/zabbix/zabbix_agentd.conf
在文件末尾添加一行UserParameter:
UserParameter=http.code[*],/usr/local/bin/check_http_code.sh "$1"
这里的http.code是自定义监控项键名,[*]表示可以传入参数,$1代表第一个参数,即URL。
保存后重启Zabbix Agent:
systemctl restart zabbix-agent
验证方法:在Zabbix Server上使用zabbix_get测试:
zabbix_get -s -k http.code[https://www.example.com]
如果返回类似200、301、404的数字,说明配置成功。
如果报错ZBX_NOTSUPPORTED,请检查脚本路径、权限和配置文件语法。
在Zabbix前端创建监控项和触发器
登录Zabbix Web界面,进入“配置”->“主机”,找到目标主机,点击“监控项”,然后“创建监控项”。
- 名称:网站HTTP响应码
- 键值:
http.code[https://www.example.com] - 信息类型:数字(无正负)
- 更新间隔:30秒(根据需求调整)
- 历史数据保留时长:按需设置
点击“添加”保存。
接着创建触发器,用于在响应码异常时告警。
点击“触发器”,然后“创建触发器”。
- 名称:网站HTTP响应码异常
- 严重性:警告
- 表达式:
{主机名:http.code[https://www.example.com].last()}<>200
这个表达式表示最近一次获取的响应码不等于200时触发告警。
你也可以根据实际情况只监控4xx或5xx,例如:
{主机名:http.code[https://www.example.com].last()}>=400
避坑提示:如果网站正常返回301或302跳转,需要将表达式调整为不等于301和302,或者根据业务需求设置。
常见问题与排查思路
- zabbix_get返回ZBX_NOTSUPPORTED:检查Agent配置文件中的UserParameter是否写错,重启Agent后重试。确保脚本第一行是
#!/bin/bash,并且有执行权限。 - 获取的响应码总是000:可能是网络不通、DNS解析失败或超时。手动执行脚本测试,例如
/usr/local/bin/check_http_code.sh https://www.example.com,查看curl错误信息。 - 监控项显示“不支持”:在Zabbix前端查看监控项的最新错误信息,通常会有具体原因,比如权限拒绝或键值错误。
- 触发器频繁告警:适当调整更新间隔和触发器表达式,避免网络抖动导致误报。
效果验证与后续优化
配置完成后,等待几分钟,在Zabbix前端的“监测”->“最新数据”中筛选该主机,应该能看到“网站HTTP响应码”的最新值。
如果显示200,说明监控正常。
你还可以创建图形,直观查看响应码变化。
进入“配置”->“主机”->“图形”,创建图形并添加该监控项。
总结:通过自定义脚本和UserParameter,Zabbix可以灵活监控网站HTTP响应码。
核心步骤是编写脚本、配置UserParameter、重启Agent、创建监控项和触发器。
遇到问题时,优先用zabbix_get测试,再检查脚本和配置文件。
这套方法同样适用于监控其他自定义指标,比如API返回内容或页面关键字。