• 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

  • 相关阅读:
    SIEBEL应用概述
    Picklist的配置
    MVG配置
    Siebel计划和实施
    Siebel学习笔记
    Siebel界面的搭建
    标签a点击以后,5秒内禁止点击,5秒后激活
    表单重复提交的常见应用场景
    h5做app和原生app有什么区别?
    Maven + Eclipse + Tomcat
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/16373621.html
Copyright © 2020-2023  润新知