Zabbix Agent主动模式下内网JBOSS服务HTTP状态检测方案咨询
刚好之前处理过类似的防火墙限制场景,给你几个靠谱的Zabbix主动模式下检测内网JBOSS服务状态的方案,都是能直接落地的:
方案1:用Zabbix Agent内置键值检测端口监听状态
这个是最简单的方案,利用Agent的内置能力直接检测本地8084端口是否在监听:
- 先确认你的Zabbix Agent已经配置为主动模式:配置文件里
ServerActive指向公网Zabbix Server地址,并且StartAgents=0(完全禁用被动模式)或者保留少量Agent进程但主要用主动模式。 - 在Zabbix Server上,把目标主机的监控模式设置为主动式。
- 创建主动式Item:
- 类型选择「Zabbix agent(主动式)」
- 键值填
net.tcp.listen[8084] - 信息类型选「数字(无正负)」,更新间隔按需设置(比如60秒)
- 配置触发器:当Item返回值为0时触发告警,表达式示例:
{你的主机名:net.tcp.listen[8084].last()}=0
方案2:检测JBOSS进程是否运行
如果担心端口被其他进程占用导致误判,可以直接检测JBOSS的进程状态:
- 同样确保Agent是主动模式。
- 创建主动式Item,键值根据你的JBOSS进程调整:
- 如果JBOSS是通过java进程启动,且启动参数包含"jboss",用
proc.num[java,,,"jboss"] - 如果进程名直接是
jboss-as这类,就用proc.num[jboss-as]
- 如果JBOSS是通过java进程启动,且启动参数包含"jboss",用
- 触发器设置:当返回值为0时告警,表达式示例:
{你的主机名:proc.num[java,,,"jboss"].last()}=0
方案3:自定义脚本检测HTTP服务可用性(最准确)
前面两个方案只能确认端口/进程存在,没法验证JBOSS是否真的能正常响应请求。这个方案用本地脚本模拟HTTP请求,返回服务状态:
- 在Agent所在主机创建检测脚本,比如
/usr/local/bin/check_jboss_http.sh,内容如下:#!/bin/bash # 可以根据JBOSS的实际健康检查路径修改URL,比如http://localhost:8084/health RESPONSE_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8084) if [ "$RESPONSE_CODE" -eq 200 ]; then echo 1 else echo 0 fi - 给脚本添加执行权限:
chmod +x /usr/local/bin/check_jboss_http.sh - 修改Zabbix Agent配置文件,添加自定义参数:
UserParameter=jboss.http.status,/usr/local/bin/check_jboss_http.sh - 重启Zabbix Agent服务:
systemctl restart zabbix-agent(根据你的操作系统调整命令) - 在Zabbix Server创建主动式Item:
- 类型「Zabbix agent(主动式)」,键值填
jboss.http.status - 信息类型选「数字(无正负)」
- 类型「Zabbix agent(主动式)」,键值填
- 配置触发器:当返回值为0时告警,还可以设置连续3次失败才触发,避免偶发网络波动导致误报,表达式示例:
{你的主机名:jboss.http.status.nodata(3m)}=1 or {你的主机名:jboss.http.status.last(3)}=0
注意事项
- 确保Zabbix用户(默认是
zabbix)有执行脚本和调用curl的权限,必要时可以给脚本设置SUID或者调整权限。 - 测试脚本:切换到zabbix用户执行
/usr/local/bin/check_jboss_http.sh,确认返回1(服务正常)或0(服务异常)。 - 如果JBOSS需要认证才能访问,脚本里可以添加curl的认证参数,比如
-u username:password。
内容的提问来源于stack exchange,提问作者Ronaldo Lanhellas
相关产品推荐
相关产品推荐

