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/bashkubectl get cs|grep -iv name> tmp/k8s.txtres="/tmp/k8s.txt"function module_discovery(){MODULE=($(cat $res |awk '{print$1}'))printf '{\n'printf '\t"data":[\n'for((i=0;i<${#MODULE[@]};i++))donum=$(echo $((${#MODULE[@]}-1)))if [ "$i" != ${num} ];thenprintf "\t\t{ \n"printf"\t\t\t\"{#MODULEENAME}\":\"${MODULE[$i]}\"\n"printf "\t\t},\n"elseprintf "\t\t{ \n"printf "\t\t\t\"{#MODULENAME}\":\"${MODULE[$num]}\"}"fidoneprintf "\n\t\t]\n"printf "}\n"}function get_status(){module=$1case $2 instatus)cat $res |grep $module|awk '{print $3}';;esacexit 0}case "$1" inmodule_discovery)module_discovery;;get_status)get_status $2 $3;;*)echo "Usage:$0{module_discovery|get_status [MODULE]}";;esacexit 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.confUserParameter=k8s.module.discovery,/etc/zabbix/script/check_k8s_health.shmodule_discoveryUserParameter=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
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号