数据库

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

字号+作者:益华科技来源:域名2025-11-05 09:10:17我要评论(0)

使用zabbix低级自动发现监控docker容器1:在docker宿主机上编写扫描docker容器名称的脚本[root@node1 zabbix_agentd.d]# cat /etc/zabbix/

  使用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用户,源码下载在执行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

容器b2b供应网

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 解决电脑开CF弹窗删除错误的有效方法(快速清除电脑中的CF弹窗错误,提升游戏体验)

    解决电脑开CF弹窗删除错误的有效方法(快速清除电脑中的CF弹窗错误,提升游戏体验)

    2025-11-05 09:04

  • 探索WS08M360TI的优势和特点(了解这款新型产品的关键信息)

    探索WS08M360TI的优势和特点(了解这款新型产品的关键信息)

    2025-11-05 08:48

  • 宏?笔记本VT教程(学习如何充分利用宏?笔记本VT的强大功能提高效率与创造力)

    宏?笔记本VT教程(学习如何充分利用宏?笔记本VT的强大功能提高效率与创造力)

    2025-11-05 07:43

  • 使用pq分区工具教程(轻松学会使用pq分区工具进行磁盘分区)

    使用pq分区工具教程(轻松学会使用pq分区工具进行磁盘分区)

    2025-11-05 07:01

网友点评