美文网首页
Zabbix使用LLD自动发现规则发现监控docker容器(下)

Zabbix使用LLD自动发现规则发现监控docker容器(下)

作者: 乐维_lwops | 来源:发表于2023-01-08 14:28 被阅读0次

    本篇是使用Zabbix监控docker容器下篇。利用ZABBIX自动发现监控功能,在部署zabbix agent客户端的服务器上,编写自定义功能脚本,实现自动获取服务器上运行的docker服务并监控其运行状态。

    前提条件

    已经部署好的zabbix监控系统

    Zabbix服务器需安装sshpass命令

    1. 编写脚本

    1.1. 编写docker容器名获取脚本

    vim docker_find.sh

    #!/bin/bash

    name_json="{\"data\":["

    A='1'

    passwd="$1"

    monitor_ip="$2"

    docker_name=$(sshpass -p "${passwd}" ssh -o StrictHostKeyChecking=no root@${monitor_ip} "docker ps -a" | grep -v 'STATUS' | awk '{printf $NF "\n"}')

    docker_num=$(sshpass -p "${passwd}" ssh -o StrictHostKeyChecking=no root@${monitor_ip} "docker ps -a" | grep -v 'STATUS' | awk '{printf $NF "\n"}' | wc -l)

    for do_name in ${docker_name}

    do

    if [[ $A = ${docker_num} ]];then

    name_json+="{\"{#DOCKER_NAME}\": \"${do_name}\"}"

    else

    name_json+="{\"{#DOCKER_NAME}\": \"${do_name}\"},"

    fi

    ((A++))

    done

    name_json+="]}"

    echo $name_json

    这个脚本旨在输出一个json格式的数据,标准格式为:

    {"data":[{"#aaa": "AAAA"},{....},{"#ccc": "CCC"}]}

    ZABBIX会根据收到的这个数据,来创建监控项。

    1.2. 编写docker容器运行状态监测脚本

    vim docker_health_status.sh

    #!/bin/bash

    docker_name="$1"

    passwd="$2"

    monitor_ip="$3"

    docker_num=$(sshpass -p "${passwd}" ssh -o StrictHostKeyChecking=no root@${monitor_ip} "docker ps -a" | grep -w "${docker_name}" | wc -l)

    if [[ ! "${docker_num}" = 1 ]];then

    docker ps -a | grep -w "${docker_name}" > /tmp/.docker.txt

    cat /tmp/.docker.txt | while read docker_file

    do

    docker_if=$(echo ${docker_file}| awk '{printf $NF "\n"}')

    if [[ ${docker_if} = ${docker_name} ]];then

    docker_status=$(echo ${docker_file} | awk -F 'ago' '{printf $2 "\n"}' | awk '{printf $1 "\n"}')

    if [[ ${docker_status} = "Up" ]];then

    docker_health=$(echo ${docker_file} | grep "health")

    if [[ ${docker_health:-"nohealthcheck"} = "nohealthcheck" ]];then

    echo '1'

    else

    health_status=$(echo ${docker_file} | awk -F 'ago' '{printf $2 "\n"}' | awk -F ')' '{printf $NR "\n"}' | awk -F '(' '{printf $2 "\n"}')

    if [[ ${health_status} = 'healthy' ]];then

    echo '1'

    else

    echo '0'

    fi

    fi

    else

    echo '0'

    fi

    else

    continue

    fi

    done

    else

    docker_status=$(sshpass -p "${passwd}" ssh -o StrictHostKeyChecking=no root@${monitor_ip} "docker ps -a" | grep -w "${docker_name}" | awk -F 'ago' '{printf $2 "\n"}' | awk '{printf $1 "\n"}')

    if [[ ${docker_status} = "Up" ]];then

    docker_health=$(sshpass -p "${passwd}" ssh -o StrictHostKeyChecking=no root@${monitor_ip} "docker ps -a" | grep -w "${docker_name}" | grep "health")

    if [[ ${docker_health:-"nohealthcheck"} = "nohealthcheck" ]];then

    echo '1'

    else

    health_status=$(sshpass -p "${passwd}" ssh -o StrictHostKeyChecking=no root@${monitor_ip} "docker ps -a" | grep -w "${docker_name}" | awk -F 'ago' '{printf $2 "\n"}' | awk -F ')' '{printf $NR "\n"}' | awk -F '(' '{printf $2 "\n"}')

    if [[ ${health_status} = 'healthy' ]];then

    echo '1'

    Else

    这个脚本是将上一个脚本获取的docker容器名,查找对应的容器,判断容器的运行状态(包括配置了docker健康检查探针)并返回一个值:0和1。

    其中1表示运行正常,0表示异常

    2. 使用外部检查的形式配置自动发现

    这是使用zabbix server自带的外部检查监控,进行docker的自动发现并监控其运行状态。

    该方式的优势在于,脚本存放于zabbix server服务器,无需安装zabbix agent客户端,便可监控对应的服务对象。

    缺点是会占用zabbix server服务器资源,提高zabbix server服务器的负载。

    2.1. 修改zabbix server配置文件

    vim zabbix_server.conf

    增加下图配置:

    这个配置是设定一个外部检查脚本的目录,然后将相应的脚本放到该目录下即可。(目录可自定义)

    2.2. 配置脚本到指定目录

    创建上面定义的外部检查脚本存放目录,同时将脚本移动到该脚本目录。

    上面定义了路径:/usr/lib/zabbix/externalscripts

    创建好目录,复制脚本,然后给予启动权限。

    2.3. 重启zabbix server 服务端

    systemctl restart zabbix_server.service

    2.4. 添加自动发现模板

    创建一个新的模板,点击自动发现。

    然后创建自动发现规则

    名称自定义,选择类型为外部检查,键值填我们编写的docker发现脚本名称。

    然后后面配置输入的参数:["{$PASSWORD}","{HOST.HOST}"]

    添加完成后如图:

    然后点击添加监控项原型

    创建监控项原型

    名称自定义,选择类型为外部检查,键值填我们编写的docker状态监控脚本名称。

    然后后面配置输入的参数:["{#DOCKER_NAME}","{$PASSWORD}","{HOST.HOST}"]

    添加完成后如图所示:

    然后添加触发器

    创建触发器原型

    这里选择last,问题表达式的值=0,恢复表达式的值=1.

    2.5. 关联模板并检验效果

    选择要监测docker容器运行的主机并关联模板

    转到宏配置

    配置监控机器的root密码宏

    宏:{$PASSWORD}

    然后添加

    然后点击自动发现,选择,立刻执行

    查看监控项,成功发现并监控

    上面是使用外部检查配置的自动发现监控。但是建议少用,因为这会提高zabbix server的负载

    若是大家对本文有何疑问和建议,请大家评论留言,小菜鸡会随时关注,谢谢!

    附:

    ZABBIX使用LLD自动发现规则发现docker容器,并监测其运行状态(上)

    相关文章

      网友评论

          本文标题:Zabbix使用LLD自动发现规则发现监控docker容器(下)

          本文链接:https://www.haomeiwen.com/subject/bpeucdtx.html