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

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

前提条件

已经部署好的zabbix监控系统,可参考之前的文章(使用docker-compose快速部署zabbix监控系统)进行快速部署。

编写脚本

1.1 编写docker容器名获取脚本

vim docker_find.sh
#!/bin/bash
name_json="{\"data\":["
A='1'
docker_name=$(docker ps -a | grep -v 'STATUS' | awk '{printf $NF "\n"}')
docker_num=$(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"
docker_num=$(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=$(docker ps -a | grep -w "${docker_name}" | awk -F 'ago' '{printf $2 "\n"}' | awk '{printf $1 "\n"}')
  if [[ ${docker_status} = "Up" ]];then
    docker_health=$(docker ps -a | grep -w "${docker_name}" | grep "health")
    if [[ ${docker_health:-"nohealthcheck"} = "nohealthcheck" ]];then
      echo '1'
    else
      health_status=$(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
        echo '0'
      fi
    fi
  else
    echo '0'
  fi
fi

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

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

使用zabbix agent客户端的形式配置自动发现

这是使用zabbix agent客户端进行docker的自动发现并监控其运行状态,制作完后,可将其配置及脚本一同打包进zabbix agent快速部署包中(zabbix agent快速部署包制作),后续安装便会自带此自动发现功能,只需要给主机关联上该模板即可使用。

2.1 修改zabbix agent配置文件

vim zabbix_agentd.conf

增加下图配置:

7OHgtMtz6371a28ecf9bf.png

1是拓展配置文件路径,方便管理;

2是打开参数传递限制。

2.2 添加自定义键值

然后到刚拓展的路径下面定义docker状态的键值文件:

自定义键值格式:UserParameter=键值[*],执行脚本

oLIYoZXe6371a2a6da6c8.png

2.3  配置脚本到指定路径

创建自定义键值中的脚本路径,同时将脚本移动到该脚本路径。

上面定义了路径:/usr/local/zabbix_agent/scripts/

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

rDmmpXCZ6371a2b481eab.png

查看docker.sock权限

DQGSOsi86371a2c447fd0.png

普通用户无权限,授权

vG1G8NKJ6371a2d1d378b.png

2.4 重启zabbix agent客户端

systemctl restart zabbix_agentd.service

lY3Xhngd6371a2e491044.png

2.5 添加自动发现模板

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

Pyz8E9NM6371a44d730b4.png


然后创建自动发现规则

名称自定义,选择类型为zabbix客户端,键值填上面定义的容器发现的键值

H3qhA9l16371a46ddb7f9.png

添加完成后如图:

ZaBQutGm6371a47bbd7d8.png

然后点击添加监控项原型,创建监控项原型

名称自定义,选择类型为zabbix客户端,键值填上面定义的容器状态的键值

G38oj7g36371a4d5d56f9.png

添加完成后如图所示:

然后点击触发器原型

qZwsauMM6371a4e6629c0.png

创建触发器原型

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

Ytx5k8OJ6371acba09264.png



2.6 关联模板并检验效果

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

FRgkS77S6371a51b96dcd.png

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

PQogMwDB6371a52dbb756.png

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

Y8CBHWk46371a53d0ef8c.png


上面是使用zabbix agent客户配置的自动发现监控。还可以使用外部检查的方式进行配置,下一篇文章将会发布使用外部检查的方式进行配置。

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

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
我是一只小菜鸡
我是一只小菜鸡

小菜鸡

12 篇文章

作家榜 »

  1. 乐维君 397 文章
  2. YOHOHO 14 文章
  3. 机灵小和尚 13 文章
  4. 我是一只小菜鸡 12 文章
  5. 细雨闲花 11 文章
  6. 。。。 9 文章
  7. 御前侍卫张五哥 9 文章
  8. 小黄人 8 文章