一、Spring Boot 获取健康状态数据
先要Springboot 把/actuator/health健康检查打开,另外需要能抓到eureka的各应用状态数据,访问http://ip:8000/actuator/health|jq . 可以获取下面数据即可
上面这图的数字代表该应用对应副本有几个是存活的,3是有3个副本是正常状态,2是2个副本是正常状态,1也是类似,只有小于1也就是0的情况就是故障,根据这种情况可以后面zabbix定制触发器的时候定制小于1的时候告警,当然这个可以灵活如果你生产所有应用的副本都给固定比如5个副本,那触发器可以做小于5的时候告警,这样可以知道哪个应用有副本故障,只是个别副本故障的应用还是可以正常访问的。
二、定制Zabbix模板跟服务发现规则
1、写服务发现脚本
[root@test zabbix_agentd.d]# vi ../zabbix_scripts/spring_discovery.sh #!/bin/bash proarray=($(curl -s http://101.211.1.33:8000/actuator/health |jq . | python -c "import sys, json; print json.load(sys.stdin)['details']['discoveryComposite']['details']['discoveryClient']['details']['services']"|sed "s/u'/ /g"|sed "s/'\,/ /g"|sed "s/\[/ /g"|sed "s/'\]/ /g")) length=${#proarray[@]} printf "{\n" printf '\t'"\"data\":[" printf "\t" for ((i=0;i<$length;i++)) do printf '\n\t\t{' printf "\"{#SPRING}\":\"${proarray[$i]}\"}" if [ $i -lt $[$length-1] ];then printf ',' fi done printf "\n\t]\n" printf "}\n"
脚本说明
执行如下
转成Zabbix对应的格式
2、写获取的Spring Boot 对应应用的状态值脚本
zabbix获取状态值脚本内容如下:
[root@test zabbix_agentd.d]# vi ../zabbix_scripts/springboot_status.sh #!/bin/bash spring_name=`echo $1 | tr '[a-z]' '[A-Z]'` curl -s http://101.211.1.33:8000/actuator/health |jq . | python -c "import sys, json; print json.load(sys.stdin)['details']['discoveryComposite']['details']['eureka']['details']['applications']['$spring_name']"
执行脚本结果如下即可:
[root@test zabbix_agentd.d]# ../zabbix_scripts/springboot_status.sh zipkinserver 2
数据处理完的就定制Zabbix模板
三、Zabbix 模板定制
定制方法就不详细说明的,跟自定义模板方法类似网络上很多就不说明,文章后面会附件相关模板。
1、zabbix监控视图效果如下
如果服务多的这样一个一个很麻烦可以通过Grafana把这些服务聚合在一个视图里面,多条线来区分
2、Grafana 服务聚合
2.1、安装Grafana zabbix插件
首先先安装插件Zabbix plugin for Grafana(alexanderzobnin-zabbix-app),官方插件地址:https://grafana.com/grafana/plugins/alexanderzobnin-zabbix-app;官方页面安装
2.2、配置Grafana zabbix源

然后导入我的附件里面的Spring Boot 的Dashboards模板,效果如下
监控脚本模板下载zabbix_springboot,记得修改本解压文件里面脚本的IP跟端口
Great content! Super high-quality! Keep it up! 🙂
# ./spring_discovery.sh
Traceback (most recent call last):
File “”, line 1, in
KeyError: ‘details’
{
“data”:[
]
}
你好我在运行这个脚本的时候出错这个错误不知道是什么问题
@天天 你看看是不是你没有装jq