首页 > 其他分享 >Zabbix使用LLD自动发现规则发现监控docker容器(下)

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

时间:2023-01-09 15:43:12浏览次数:59  
标签:脚本 name zabbix Zabbix awk printf docker LLD

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

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

前提条件

已经部署好的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

增加下图配置:

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

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

2.2. 配置脚本到指定目录

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

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

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

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

2.3. 重启zabbix server 服务端

systemctl restart zabbix_server.service

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

2.4. 添加自动发现模板

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

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

然后创建自动发现规则

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

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

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

添加完成后如图:

然后点击添加监控项原型

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

创建监控项原型

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

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

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

添加完成后如图所示:

然后添加触发器

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

创建触发器原型

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

2.5. 关联模板并检验效果

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

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

转到宏配置

配置监控机器的root密码宏

宏:{$PASSWORD}

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

然后添加

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

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

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

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

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

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

附:

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

标签:脚本,name,zabbix,Zabbix,awk,printf,docker,LLD
From: https://blog.51cto.com/lwops/5997262

相关文章

  • Docker搭建LNMP+wordpress
    一、项目模拟1.项目环境公司在实际的生产环境中,需要使用Docker技术在一台主机上创建LNMP服务并运行Wordpress网站平台。然后对此服务进行相关的性能调优和管理工......
  • ClickHouse伪分布式Docker模式安装
    安装说明本次安装为Docker环境下的ClickHouse,单节点,伪分布式,单分片。配置文件检查此文件中的端口,避免端口冲突。config.xml检查此文件的每一项配置。metrika.xmlDoc......
  • docker使用
    1.查看容器dockerps-a2.删除容器dockerrm"CONTAINERID"或NAMES3.查看镜像dockerimages4.删除镜像dockerrmi"IMAGEID"dockerstartStartoneormore......
  • docker将容器打包成镜像
    1.将本地的容器打包成自命名的镜像dockercommit-a"authorName"-m"desc"容器idnew_image_name:version2.将镜像打包输出到tar文件dockersave-omyImage......
  • Docker-compose
    一、Docker-compose简介Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层,分别是工程(project),服务......
  • Docker
    1、dockerDocker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现......
  • docker安装并运行python文件
    1、使用docker安装python环境,并运行python程序文件 首先,创建目录:/home/python/python-docker-app并进入python-docker-app目录下,创建dockerfile文件命令:vimdock......
  • docker部署rocketmq
     dockerpullfoxiswho/rocketmq:server-4.7.0 (拉取镜像)dockerpullfoxiswho/rocketmq:broker-4.7.0(拉取镜像) mkdir/opt/rocketmq-server (创建mq使用目录)mkd......
  • 最新2022年Docker面试题高级面试题及附答案解析
    最新2022年Docker面试题高级面试题及附答案解析全部面试题答案,更新日期:01月30日,直接下载吧!下载链接:高清500+份面试题资料及电子书,累计10000+页大厂面试题PDFDocker......
  • 最新Docker面试题及答案附答案汇总
    最新Docker面试题及答案附答案汇总全部面试题答案,更新日期:01月30日,直接下载吧!下载链接:高清500+份面试题资料及电子书,累计10000+页大厂面试题PDFDocker题1:非官方仓......