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

news2024/9/25 19:14:29

本篇是使用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 " (sshpassp"{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 " (sshpassp"{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 " (sshpassp"{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 " monitorip"dockerpsa"∣grepw"{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 " (sshpassp"{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 " monitorip"dockerpsa"∣grepw"{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 " (sshpassp"{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 " monitorip"dockerpsa"∣grepw"{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 " (sshpassp"{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 " monitorip"dockerpsa"∣grepw"{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容器,并监测其运行状态(上)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/151146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动驾驶专题介绍 ———— 惯性导航

文章目录介绍工作原理特点应用场景介绍 惯性导航系统(Inertial Navigation System - INS)是一种不依赖外部输入信息、也不向外辐射能量的自助式导航系统,是通过陀螺仪和加速度计为敏感器件的导航参数解算系统。该系统根据陀螺仪输出建立导航坐…

安全—03day

虚拟主机基于域名、端口、IP访问nginx 一、虚拟主机基于域名访问nginx 1.为虚拟主机提供域名解析 echo "192.168.181.130 www.nj.com www.benet.com" >> /etc/hosts2.为虚拟主机准备网页文档 mkdir -p /var/www/html/benet mkdir -p /var/www/html/nj echo…

linux系统中QT进行文本读写操作的方法

大家好,今天主要和大家聊一聊,利用QT进行文本的读写操作方法。 目录 第一:文本读写基本简介 第二:应用实例 第三:运行效果 第一:文本读写基本简介 有时候我们需要对文件进行读写,比如写个Mp3…

第01讲:Docker入门

一、什么是Docker 1、Docker 是一个开源的应用容器引擎 2、诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc) 3、Docker 是一个可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器引擎&…

Java--集合--经典七道综合练习题

文章目录 一、集合的遍历方式 二、添加数字并遍历 三、添加学生对象并遍历 四、添加学生对象并遍历 五、添加用户对象并判断是否存在 六、添加手机对象并返回要求的数据 七、创建学生管理系统(*****) 一、集合的遍历方式 需求:定义一…

深耕5G云专网,阿里云祝顺民入选“2022年度5G创新人物”

2022 年,5G 商用发展成效显著,正在加速产业数字化,全面赋能经济社会发展。运营商 5G 投资超过 4000 亿元,共带动 8.6 万亿元的经济产出,而这一切离不开奋战在 ICT 行业的 5G 应用推动者。 日前,由中国工信…

分享104个PHP源码,总有一款适合您

PHP源码 分享104个PHP源码,总有一款适合您 链接:https://pan.baidu.com/s/1MnmNb3vsofBnQ4kKoMlSBw?pwdkl4o 提取码:kl4o 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载…

Python学生信息管理系统源码,学生教师端分离,支持数据的增删查改、数据分析与统计 基于Tkinter带图形界面

介绍 Python学生信息管理系统。学生教师端分离,支持数据的增删查改、数据分析与统计。 下载地址:Python学生信息管理系统源码 软件架构 Python3.9版本 Python-Tkinter库开发的图形界面 Python-Pandas库数据处理 Python-matplotlib库数据分析与展示 P…

C语言经典100例(006,007)

题目:用*号输出字母C的图案。 程序分析:可先用*号在纸上写出字母C,再分行输出。 程序源代码: #include "stdio.h" int main() {printf("用 * 号输出字母 C!\n");printf(" ****\n");printf("…

CSS知识点精学7-小兔鲜项目实现案例

一.网页和网站的关系 包含关系 网页和网站的关系就是包含关系,网站包含了很多的网页,网页不能单独存在于网络中。 网站是一个整体,网页是一个个体,一个网站是由很多网页构建而成。就像进入百度网站,里面还有其他许多…

AI作画怎么弄?超详细ai绘画教程在这里

AI作画怎么弄?如何实现将照片生成ai漫画图,如何通过关键词描述生成好看的壁纸、背景?最全最详细教程来了,一分钟学会! 一、将照片生成二次元 我们先打开数画ai绘画软件,在首页这里,点击“相册”…

【Git】Git常用命令

3、Git 常用命令 命令名称作用git config --global user.name 用户名设置用户签名git config --global user.email 邮箱设置用户签名git init初始化本地库git status查看本地库状态git add 文件名添加到暂存区git commit -m “日志信息” 文件名提交到本地库git reflog查看历史…

手写RPC框架06-基于线程和队列提升框架并发处理能力

源代码地址:https://github.com/lhj502819/IRpc/tree/v7 系列文章: 注册中心模块实现路由模块实现序列化模块实现过滤器模块实现自定义SPI机制增加框架的扩展性的设计与实现基于线程和队列提升框架并发处理能力 Server端 现有的问题 目前我们的RPC框…

酷早报:1月9日全球Web3加密行业重大资讯大汇总

2023年1月9日 星期一 【数据指标】 加密货币总市值:$0.84万亿 BTC市值占比:39.14% 恐慌贪婪指数:25 极度恐慌【今日快讯】 1、【政讯】 1.1、美债关键收益率曲线倒挂幅度创纪录以来新高 1.2.1、美联储博斯蒂克:倾向于将利率升至5%…

2020年MathorCup高校数学建模挑战赛—大数据竞赛A题移动通信基站流量预测求解全过程文档及程序

2020年MathorCup高校数学建模挑战赛—大数据竞赛 A题 移动通信基站流量预测 原题再现: 随着移动通信技术的发展,4G、5G 给人们带来了极大便利。移动互联网的飞速发展,使得移动流量呈现爆炸式增长,从而基站的流量负荷问题变得越来…

代码随想录第55天|● 392.判断子序列 ● 115.不同的子序列

392.判断子序列 dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。 if (s[i - 1] t[j - 1]),那么dp[i][j] dp[i - 1][j - 1] 1;,因为找到了一个相同的字符,相同子…

当没有成熟案例可参考时,企业该如何实现数字化转型?

对于企业来说,数字化转型过程中,参考成熟的案例是可以提高成功率的。但是在现实中,很多企业由于行业、领先地位、技术保密性等原因,导致没有或者找不到可参考的数字化转型案例为自身提供经验。那么这种情况下该如何做呢&#xff0…

Java中日期和时间的类

文章目录JDK8之前日期和时间的APISystem类中的Date类中的java.util.Date类中的二个构造器二个方法java.sql.Date类中的实例化将java.sql.Date类对象转化为java.util.Date类的对象将java.util.Date类对象转化为java.sql.Date类的对象每日一考JDK8之前日期和时间的API System类中…

你对Bug了解多少?如何“正确的”向开发人员提出Bug?

目录 一、Bug的级别 二、Bug的生命周期 三、如何向开发人员提出Bug(如何创建Bug)? 四、跟开发产生争执怎么办?(面试高频) 一、Bug的级别 为什么Bug也要存在级别?不同的Bug等级,惩罚机制不一…

环形缓冲区

文章目录一. 什么是环形缓冲区?二、实现环形缓冲区:三、环形缓冲区示例代码:总结一. 什么是环形缓冲区? 环形缓冲区 是一段 先进先出 的循环缓冲区,有一定的大小,我们可以把它抽象理解为一块环形的内存。 …