目前生产环境的kubernetes集群涉及的所有workload/pods/Deployment等,均已经使用prometheus自动发现加入到监控。
然而,我需要一个kubernetes集群组件的整体监控,也就是如下命令的显示结果:
kubectl get cs
一番思考,准备使用zabbix LLD来完成。
思路:
1、将 Kubectl get cs 的执行结果输出到文本
2、脚本读取文本内容,使用zabbix LLD动态的自动发现加入到监控
环境:
IP |
角色 |
主机名 |
10.4.10.41 |
k8s-master、zabbix-agent |
master41 |
10.4.10.57 |
zabbix-server |
zabbix-server |
编写脚本
[root@master41~]# cat etc/zabbix/script/check_k8s_health.sh
#!/bin/bash
kubectl get cs|grep -iv name> tmp/k8s.txt
res="/tmp/k8s.txt"
function module_discovery(){
MODULE=($(cat $res |awk '{print$1}'))
printf '{\n'
printf '\t"data":[\n'
for((i=0;i<${#MODULE[@]};i++))
do
num=$(echo $((${#MODULE[@]}-1)))
if [ "$i" != ${num} ];
then
printf "\t\t{ \n"
printf"\t\t\t\"{#MODULEENAME}\":\"${MODULE[$i]}\"\n"
printf "\t\t},\n"
else
printf "\t\t{ \n"
printf "\t\t\t\"{#MODULENAME}\":\"${MODULE[$num]}\"}"
fi
done
printf "\n\t\t]\n"
printf "}\n"
}
function get_status(){
module=$1
case $2 in
status)
cat $res |grep $module|awk '{print $3}'
;;
esac
exit 0
}
case "$1" in
module_discovery)
module_discovery
;;
get_status)
get_status $2 $3
;;
*)
echo "Usage:$0{module_discovery|get_status [MODULE]}"
;;
esac
exit 0
脚本调试:
[root@master41script]# sh check_k8s_health.sh module_discovery
{
"data":[
{
"{#MODULEENAME}":"controller-manager"
},
{
"{#MODULEENAME}":"scheduler"
},
{
"{#MODULEENAME}":"etcd-2"
},
{
"{#MODULEENAME}":"etcd-1"
},
{
"{#MODULENAME}":"etcd-0"}
]
}
[root@master41script]# sh check_k8s_health.sh get_status etcd-1 status
{"health":"true"}
10.4.10.41 Zabbix-agent 添加对应的配置
[root@master41 ~]#cat etc/zabbix/zabbix_agentd.d/check_k8s_health.conf
UserParameter=k8s.module.discovery,/etc/zabbix/script/check_k8s_health.shmodule_discovery
UserParameter=k8s.module[*],/etc/zabbix/script/check_k8s_health.shget_status $1 $2
Zabbix-server 10.4.10.57上使用zabbix_get进行调试
[root@zabbix-server~]# usr/bin/zabbix_get -p 10050 -s 10.4.10.41 -k k8s.module.discovery
{
"data":[
{
"{#MODULEENAME}":"scheduler"
},
{
"{#MODULEENAME}":"controller-manager"
},
{
"{#MODULEENAME}":"etcd-0"
},
{
"{#MODULEENAME}":"etcd-1"
},
{
"{#MODULENAME}":"etcd-2"}
]
}
[root@zabbix-server~]# usr/bin/zabbix_get -p 10050 -s 10.4.10.41 -k k8s.module[etcd-1,status]
{"health":"true"}
Zabbix界面新增字段发现规则
注意:监控项为"字符"类型
查看zabbix 采值情况
新增触发器
{10.4.10.41:k8s.module[{#MODULEENAME},status].str(true)}=0
and
{10.4.10.41:k8s.module[{#MODULEENAME},status].str(ok)}=0
调试触发告警
https://www.modb.pro/db/95824