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

前提条件

已经部署好的zabbix监控系统

Zabbix服务器需安装sshpass命令

  1. 编写脚本
    1.1. 编写docker容器名获取脚本
    vim docker_find.sh

#!/bin/bash

name_json=“{“data”:[”

A=‘1’

pass**=“$1”

monitor_ip=“$2”

docker_name= ( s s h p a s s − p " (sshpass -p " (sshpass−p"{passwd}" ssh -o StrictHostKeyChecking=no root@${monitor_ip} “docker ps -a” | grep -v ‘STATUS’ | awk ‘{printf $NF “\n”}’)

docker_num= ( s s h p a s s − p " (sshpass -p " (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”

pass**=“$2”

monitor_ip=“$3”

docker_num= ( s s h p a s s − p " (sshpass -p " (sshpass−p"{passwd}" ssh -o StrictHostKeyChecking=no root@ m o n i t o r i p " d o c k e r p s − a " ∣ g r e p − w " {monitor_ip} "docker ps -a" | grep -w " monitori​p"dockerps−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= ( s s h p a s s − p " (sshpass -p " (sshpass−p"{passwd}" ssh -o StrictHostKeyChecking=no root@ m o n i t o r i p " d o c k e r p s − a " ∣ g r e p − w " {monitor_ip} "docker ps -a" | grep -w " monitori​p"dockerps−a"∣grep−w"{docker_name}" | awk -F ‘ago’ ‘{printf $2 “\n”}’ | awk ‘{printf $1 “\n”}’)

if [[ ${docker_status} = “Up” ]];then

docker_health= ( s s h p a s s − p " (sshpass -p " (sshpass−p"{passwd}" ssh -o StrictHostKeyChecking=no root@ m o n i t o r i p " d o c k e r p s − a " ∣ g r e p − w " {monitor_ip} "docker ps -a" | grep -w " monitori​p"dockerps−a"∣grep−w"{docker_name}" | grep “health”)

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

echo ‘1’

else

health_status= ( s s h p a s s − p " (sshpass -p " (sshpass−p"{passwd}" ssh -o StrictHostKeyChecking=no root@ m o n i t o r i p " d o c k e r p s − a " ∣ g r e p − w " {monitor_ip} "docker ps -a" | grep -w " monitori​p"dockerps−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表示异常

  1. 使用外部检查的形式配置自动发现
    这是使用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容器(下)相关推荐

  1. zabbix自动发现实现批量监控docker状态

    最近在搞zabbix监控docker以及docker内部应用状态信息,网上找的资料好少,只找到了一个大神的一篇文章,用的是python实现监控docker容器的基本状态,我在他给的脚本基础上进行修改, ...

  2. promethues+alertmanager+grafana监控docker容器和报警—基于手动配置和文件自动发现—详细文档

    promethues+alertmanager+grafana监控docker容器和报警-基于手动配置和文件自动发现-详细文档 相关配套软件包网盘下载链接如下: 网盘地址: https://url28 ...

  3. zabbix企业应用之监控docker容器资源情况

    关于docker的监控,无论开源的CAdvisor.Data Dog还是我自己写的监控(http://dl528888.blog.51cto.com/2382721/1635951),不是通过dock ...

  4. Prometheus使用cAdvisor监控Docker容器指标

    完整译文请访问:使用cAdvisor监控Docker容器指标. 点击这里获取云原生干货https://www.coderdocument.com/resource_credential.html?co ...

  5. python代码进去docker容器内_python脚本监控docker容器

    本文实例为大家分享了python脚本监控docker容器的方法,供大家参考,具体内容如下 脚本功能: 1.监控CPU使用率 2.监控内存使用状况 3.监控网络流量 具体代码: #!/usr/bin/e ...

  6. Grafana监控Docker容器+K8s集群容器

    文章目录 监控Docker容器 监控K8s集群容器 监控Docker容器 Dashboard ID:10657 原版Json文件:戳我下载 图为修改后Json文件:戳我下载~ 监控K8s集群容器 Da ...

  7. zabbix snmp 自动发现、自定义自动发现规则和监控项原型实现原理

    自动发现(LLD)提供了一种在计算机上为不同实体自动创建监控项,触发器和图形的方法. 例如,Zabbix可以在你的机器上自动开始监控文件系统或网络接口,而无需为每个文件系统或网络接口手动创建监控项:还 ...

  8. zabbix监控docker容器

    1.环境说明 由于最近zabbix进行过一次迁移,所以zabbix-server系列采用docker方式安装,参考zabbix官网:https://github.com/zabbix/zabbix-d ...

  9. Shell脚本自动监控docker容器的状态

    首先我们来写一个脚本root@server:~# cat docker_monitor.sh #!/bin/bash #监控容器的运行状态 #容器名称 传入参数 containerName=$1 #当 ...

最新文章

  1. 微服务实战(一):微服务架构的优势与不足
  2. python接收邮件内容启动程序_Python实现发送与接收邮件的方法详解
  3. 帝国cms75商城包含电脑端手机端h5微信小程序的界面功能演示
  4. Ubuntu 中Eclipse 默认的OpenJDK 和 SUNJDK问题总结
  5. 大数据学习(3)- 分布式文件系统HDFS
  6. android 线程那点事
  7. 一篇文章解决Python函数式编程与闭包的问题
  8. Date与String之间的转换
  9. Windows Server 2008 多元密码策略配置
  10. [ioi2008]Island 岛屿
  11. python异步线程算法应用_Python多线程----线程池以及线程实现异步任务
  12. 解决sketch文件导出没有背景色的问题
  13. 2022年2月份报告合集(共326份)
  14. 全球与中国激光共焦扫描显微镜市场深度研究分析报告
  15. Oracle数据库中,表的锁死查询与解锁。
  16. python 北上资金_北上资金持股相关因子
  17. 薅羊毛专业版第三十四次更新
  18. GSM系统信令接续流程
  19. visibility:属性
  20. c语言上机怎么弄一元一次方程,怎么在c语言中编写一元一次方程

热门文章

  1. VR技术帮韩国妈妈与去世的女儿再相见,网友:堪比《黑镜》,人能瞬间崩溃...
  2. PC电源的保持时间是用来做什么的?
  3. STM32 芯片引脚的顺序说明
  4. 一句代码让电脑定时重启,关机,取消关机
  5. 【PTA~L1-006 连续因子】
  6. 【译】Caliburn——Action
  7. 程序员如何克服浮躁的心态?然后静下心来韬养自己的技术?
  8. 【ZJOI2017】仙人掌 题解
  9. PDF中的图片怎么设置透明度
  10. Linux syslog进程退出日志审计