zabbix自动发现kubernetes组件状态并加入到监控

目前生产环境的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

posted @ 2022-06-14 10:16  技术颜良  阅读(615)  评论(0编辑  收藏  举报