会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 使用zabbix低级自动发现监控docker容器!

使用zabbix低级自动发现监控docker容器

时间:2025-11-05 01:49:13 来源:益强数据堂 作者:系统运维 阅读:763次

  使用zabbix低级自动发现监控docker容器

  1:在docker宿主机上编写扫描docker容器名称的使用脚本

  [root@node1 zabbix_agentd.d]# cat /etc/zabbix/script/docker_discovery.sh

  #!/bin/bash

  port=($(/usr/bin/docker ps -a|grep -v "CONTAINER ID"|awk {print $NF}))

  printf {\n

  printf \t"data":[\n

  for key in ${!port[@]}

  do

  if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then

  printf \t {\n

  printf "\t\t\t\"{#CONTAINERNAME}\":\"${port[${key}]}\"},\n"

  else [[ "${key}" -eq "((${#port[@]}-1))" ]]

  printf \t {\n

  printf "\t\t\t\"{#CONTAINERNAME}\":\"${port[${key}]}\"}\n"

  fi

  done

  printf \t ]\n

  printf }\n

  #脚本效果如下:

  [root@node1 zabbix_agentd.d]# sh /etc/zabbix/script/docker_discovery.sh

  {

  "data":[

  {

  "{#CONTAINERNAME}":"k8s_install-cni_kube-flannel-ds-amd64-4cr9d_kube-system_39d5a60d-702c-466c-97e0-85123e1a7869_0"},

  {

  "{#CONTAINERNAME}":"k8s_nginx_nginx_default_3f5ffd65-a233-48c5-973d-b43922ccea61_0"},

  {

  "{#CONTAINERNAME}":"k8s_POD_nginx_default_3f5ffd65-a233-48c5-973d-b43922ccea61_0"},

  {

  "{#CONTAINERNAME}":"k8s_kube-flannel_kube-flannel-ds-amd64-4cr9d_kube-system_39d5a60d-702c-466c-97e0-85123e1a7869_3"},

  {

  "{#CONTAINERNAME}":"k8s_kube-proxy_kube-proxy-sqhs4_kube-system_1c7fac8f-5263-4cd8-b008-485f1dd44ad1_3"},

  {

  "{#CONTAINERNAME}":"k8s_POD_kube-flannel-ds-amd64-4cr9d_kube-system_39d5a60d-702c-466c-97e0-85123e1a7869_3"},

  {

  "{#CONTAINERNAME}":"k8s_POD_kube-proxy-sqhs4_kube-system_1c7fac8f-5263-4cd8-b008-485f1dd44ad1_3"}

  ]

  }

  #注意事项!!!

  zabbix-agent在取值的时候使用的是zabbix用户,云南idc服务商在执行docker ps -a会没有权限执行

  解决方法有两种

  1:添加sudo授权

  2:给docker命令加suid权限

  chmod u+s /usr/bin/docker

  推荐使用第二种,低级比较简单

  2:在docker宿主机上编写docker容器的自动取值脚本

  #取值来源/usr/bin/docker stats --no-stream

  [root@node1 zabbix_agentd.d]# cat /etc/zabbix/script/docker_monitor.sh

  #!/bin/bash

  CACHEFILE="/tmp/docker_monitor_cache.txt"

  CMD="/usr/bin/docker stats --no-stream"

  if [ ! -f $CACHEFILE ];then

  $CMD >$CACHEFILE

  fi

  # Check and run the script

  TIMEFLM=`stat -c %Y $CACHEFILE`

  TIMENOW=`date +%s`

  if [ `expr $TIMENOW - $TIMEFLM` -gt 60 ]; then

  rm -f $CACHEFILE

  fi

  if [ ! -f $CACHEFILE ];then

  $CMD >$CACHEFILE

  fi

  container_live() {

  grep "$1" $CACHEFILE &>/dev/null

  if [ $? -eq 1 ];then

  echo 0

  else

  echo 1

  fi

  exit 0

  }

  container_id() {

  grep "$1" $CACHEFILE|awk {print $1}

  exit 0

  }

  container_cpu() {

  grep "$1" $CACHEFILE|awk {print $3}|tr -d %

  exit 0

  }

  container_mem_used() {

  grep "$1" $CACHEFILE|awk {print $4}|tr -d MiB

  exit 0

  }

  container_mem_pused() {

  grep "$1" $CACHEFILE|awk {print $7}|tr -d %

  exit 0

  }

  container_net_in() {

  grep "$1" $CACHEFILE|awk {print $8}|tr -d %

  exit 0

  }

  container_net_out() {

  grep "$1" $CACHEFILE|awk {print $10}|tr -d %

  exit 0

  }

  container_disk_in() {

  grep "$1" $CACHEFILE|awk {print $11}

  exit 0

  }

  container_disk_out() {

  grep "$1" $CACHEFILE|awk {print $13}

  exit 0

  }

  case $1 in

  live)

  container_live $2;

  ;;

  id)

  container_id $2;

  ;;

  cpu)

  container_cpu $2;

  ;;

  mem_used)

  container_mem_used $2;

  ;;

  mem_pused)

  container_mem_pused $2;

  ;;

  net_in)

  container_net_in $2;

  ;;

  net_out)

  container_net_out $2;

  ;;

  disk_in)

  container_disk_in $2;

  ;;

  disk_out)

  container_disk_out $2;

  ;;

  *)

  echo 无效的参数;

  exit 2;

  esac

  3:修改zabbix-agent配置文件

  [root@node1 zabbix_agentd.d]# cat /etc/zabbix/zabbix_agentd.d/zbx_docker.conf

  UserParameter=docker.discovery,/bin/bash /etc/zabbix/script/docker_discovery.sh

  UserParameter=docker_monitor[*],/bin/bash /etc/zabbix/script/docker_monitor.sh $1 $2

  systemctl restart docker

  4:使用zabbix-get测试取值

  #测试1

  [root@oldboy ~]# zabbix_get -s 10.0.0.12 -k docker.discovery

  {

  "data":[

  {

  "{#CONTAINERNAME}":"k8s_install-cni_kube-flannel-ds-amd64-4cr9d_kube-system_39d5a60d-702c-466c-97e0-85123e1a7869_0"},

  {

  "{#CONTAINERNAME}":"k8s_nginx_nginx_default_3f5ffd65-a233-48c5-973d-b43922ccea61_0"},

  {

  "{#CONTAINERNAME}":"k8s_POD_nginx_default_3f5ffd65-a233-48c5-973d-b43922ccea61_0"},

  {

  "{#CONTAINERNAME}":"k8s_kube-flannel_kube-flannel-ds-amd64-4cr9d_kube-system_39d5a60d-702c-466c-97e0-85123e1a7869_3"},

  {

  "{#CONTAINERNAME}":"k8s_kube-proxy_kube-proxy-sqhs4_kube-system_1c7fac8f-5263-4cd8-b008-485f1dd44ad1_3"},

  {

  "{#CONTAINERNAME}":"k8s_POD_kube-flannel-ds-amd64-4cr9d_kube-system_39d5a60d-702c-466c-97e0-85123e1a7869_3"},

  {

  "{#CONTAINERNAME}":"k8s_POD_kube-proxy-sqhs4_kube-system_1c7fac8f-5263-4cd8-b008-485f1dd44ad1_3"}

  ]

  }

  #测试2

  [root@oldboy ~]# zabbix_get -s 10.0.0.12 -k docker_monitor[mem_used,k8s_nginx_nginx_default_3f5ffd65-a233-48c5-973d-b43922ccea61_0]

  3.102

  5:导入模板

  模板下载地址http://oldqiang.com/zbx_docker_templates.xml

  模板中,服务器租用我只定义了一个低级自动发现规则,发现关于其他的监控监控,后期在完善!

容器

  6:为docker宿主机链接模板

容器

容器

  7:效果展示

容器

容器

  文章转载:https://oldqiang.com/archives/607.html

容器免费源码下载

(责任编辑:数据库)

推荐内容
  • 解决奇迹暖暖电脑登录密码错误的方法(从忘记密码到找回密码,轻松解决登录问题)
  • Rec:一个项目的诞生
  • Tomcat 是怎样处理 SpringBoot应用的?
  • 了解如何使用 Node.js 构建微服务
  • 简便易行的方法(一步步教你重装联想S41,省时又省力)
  • 一文看懂生成式对抗网络GANs:介绍指南及前景展望