zabbix模板的自动发现规则(ldd)实现被监控项自动发现

zabbix模板的自动发现规则(ldd)实现被监控项自动发现

自动发现规则(ldd)用途说明

在zabbix自带的linux模板的自动发现规则中,有一个Mounted filesystem discovery自动发现规则,可以根据每个服务器磁盘梳理不同,自动生成相应的磁盘监控数据.
这就是自动注册的用途,根据不同服务器上同一个监控项不同的数量,自动生成对应数量的监控

例如5个服务器都分别启动了tomcat多实例,但启动的tomcat数量不相同,端口也不同,我想要监控这些端口是否down掉:
用普通的方式创建的监控模板,就得给每个服务器单独创建,不能通用
而如果通过自动发现规则来创建,就可以只用一个模板,对应这些不同数量的tomcat进行端口检查

自动发现规则使用实例

以监控java端口的自动发现为例,进行操作说明
流程:

  1. 命令行获取结果
  2. 编写zabbix脚本,输出json格式
  3. 创建zabbix客户端key
  4. 服务端验证结果
  5. web页添加模板规则
  6. web页主机绑定模板
  7. 验证结果

    1. 命令行获取结果

    首先在命令行,使用命令获取想要的结果

[[email protected] api]# ss -lntup|grep java|awk -F "[ |:]+" '{print $6}'
9090
9091

2. 编写zabbix脚本,输出json格式

zabbix的api需要的都是json格式的数据,这里也不例外,不管通过shell脚本还是python脚本,反正最终需要输出json格式数据
shell脚本如下:
vim java_port_list.sh

#!/bin/bash
#获取所有java服务端口,并以json格式返回
string=`ss -lntup|grep java|awk -F "[ |:]+" '{print $6}'`
count=`echo $string|wc -w`
printf '{"data":[\n'
for ((i=1;i<=$count;i++))
do
    proc_array=`echo $string |cut -d ' ' -f$i`
   #echo "proc"$proc_array
    printf "\t{\"{#PORT}\":\"${proc_array}\"},\n"
done
date=`date +%d%H%m%s`
printf "\t{\"{#DATE}\":\"${date}\"}\n"
    printf "\t]\n"
printf "}\n"

脚本执行结果如下:

[[email protected] ~]# sh /etc/zabbix/zabbix_agentd.d/scripts/java_port_list.sh
{"data":[
    {"{#PORT}":"9090"},
    {"{#PORT}":"9091"},
    {"{#DATE}":"3117101572512518"}
    ]
}
# 最前面的data是标准语法要求的,必须要相同,后面的key可以自己定义

3. 创建zabbix客户端key

zabbix_agentd.d目录下,创建两个自定义key,一个key用来自动发现,一个key用来作为具体监控项

[[email protected] ~]# cat /etc/zabbix/zabbix_agentd.d/java_api.conf
# 获取json列表传递给zabbix-server
UserParameter=discovery.api.port,sh /etc/zabbix/zabbix_agentd.d/scripts/java_port_list.sh
# 端口状态监控key
UserParameter=api.port.status[*],ss -lntup|grep "$1"|wc -l

重启zabbix客户端,然后到服务端去测试验证

systemctl restart zabbix-agent.service

4. 服务端验证结果

在zabbix服务使用zabbix-get命令验证

[[email protected] ~]# zabbix_get -s 172.17.19.13 -k discovery.api.port
{"data":[
    {"{#DATE}":"3114101572502867"}
    ]
}

如上,没有获取到java端口信息,经查是ss -lntup命令中的-p参数,在普通用户下是看不了其他用户进程的,也就获取不到数据,可以使用免密sudo方式,也可以给ss命令添加s权限,让ss命令直接在root命令下运行

#客户端上操作
chmod +s /usr/sbin/ss

再次在服务端验证:

[[email protected] ~]# zabbix_get -s 172.17.19.13 -k discovery.api.port
{"data":[
    {"{#PORT}":"9090"},
    {"{#PORT}":"9091"},
    {"{#DATE}":"3117101572512494"}
    ]
}

再拿获取的端口9090验证端口存活状态key

[[email protected] ~]# zabbix_get -s 172.17.19.13 -k api.port.status[9090]
1

如上,已经能获取端口列表,也能验证改端口的状态了,可以添加规则了

5. web页添加模板规则

A 先创建模板的自动发现规则
在web页面创建模板,进入模板的自动发现规则页,创建自动发现规则,主要注意键值过滤器两项设置


B 继续编写自动发现规则的监控项原型和触发器类型

6.web页主机绑定模板

此操作过于简单,略

7. 验证结果

过程中遇到的问题:

  1. json格式错误导致自动发现不了
    问题:自动发现不了,zabbix-server端日志提示became not supported
    sh discovery rule "xxx:discovery.api.port" became not supported: Value should be a JSON object
    原因:这个问题经过检查,是输出的内容不是json格式导致的
  2. 有多个端口/服务,但只能自动发现一个端口/服务
    原因:也是由于json格式导致的
    正确的应该每个key-value键值对都要用一堆大括号包起来
    但输出的json格式中,却将所有的键值对只用了一个大括号包起来,如下
    json #正确 {"data":[ {"{#PORT}":"9090"}, {"{#PORT}":"9091"} ] } #错误 {"data":[{ "{#PORT}":"9090", "{#PORT}":"9091" }] }
  3. 客户端执行脚本正常,服务端用zabbix-get获取数据不正确
    是由于使用的命令,如ss,在普通用户模式下,是没有权限获取如进程信息之类数据导致的
    解决办法:可以使用visudo给zabbix用户授权某些命令免密码执行,也可以给这些命令增加s权限,如
chmod +s /usr/sbin/ss
#增加操作一定要慎重,个别可以修改数据的命令,一定不要添加s权限

原文地址:https://www.cnblogs.com/noah-luo/p/11772542.html

时间: 2024-08-06 01:38:16

zabbix模板的自动发现规则(ldd)实现被监控项自动发现的相关文章

zabbix自动发现规则之磁盘IO监控

本文章介绍zabbix自动发现规则之磁盘IO监控的案例实践. 主机名:mysql-slave 首先在zabbix_agent下定义一个获取磁盘IO信息的脚本: cat /etc/zabbix/scripts/disk_io.sh #!/bin/bash Disk=$1 Option=$2 case $Option in rrqm) iostat -dxk 1 2|grep "\b$Disk\b" |tail -1|awk '{print $2}' ;; wrqm) iostat -dx

zabbix/自动发现规则

对于zabbix 我们并不陌生 他是开源的监控系统,现在的一部分企业都在用zabbix,今天给大家分享的是企业级监控zabbix的自动发现规则,有了它我们自定义健康的时候根据宏值可以让他自动发现对应的value 从而省去我们一部分的重复代码 . 现需求 需要自定义一个监控脚本,目的是取各服务器三线ip地址 进行向另一端源服务器进行ping rtt和loss的请求进行判断是否存在丢包行为. 1:不同业务,对应不同的模板,我们需要现创建一个模板,用于我们这个特殊的业务 2:创建完成后,点击我们创建好

SCCM2012 R2集成WSUS服务器-6:自动审批规则

====================================================================== 在特定的场景下,其实有很多补丁是可以不经过测试,直接下发到客户端或者服务器的,例如office的定义更新.windows defender的定义更新.forefront的定义更新等. 针对这些类型的更新,由于不需要测试,我们可以直接来制定自动审批规则,将其审批到我们的生产环境中. 首先要确保我们的软件更新点已经勾选了"定义更新",如图. 然后,在

深入浅出Zabbix 3.0 -- 第六章 监控项配置与管理

第六章 监控项配置与管理 Zabbix系统中监控项(Items)的定义和管理非常重要,所有的监控指标都是通过定义不同的监控项收集数据.Zabbix通过主机作为一个逻辑单元组织和管理监控项,所有的监控项都必须属于某个主机,且在同一主机中只能有一个唯一的监控项存在. 6.1监控数据 Zabbix 不同于与大多数其他监控解决方案的一个重要特征是Zabbix通过监控项从被监控对象收集的数据是原始数据,而不是告警或状态的更新数据.大多数监控方案中,不管是通过agent或其他方法收集到监控数据后,会对该数据

zabbix日常监控项mysql(七)

参考文档: percona官方文档:https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html zabbix2.4的安装方法:https://www.cnblogs.com/irockcode/p/6752316.html 其他博主文档:http://blog.51cto.com/xiaozhagn/2059713 centos7.4客户端安装agent http://blog.csdn.net/

Zabbix添加自定义监控项之(监控mysql状态)

一.实验环境 Zabbixserver    192.168.1.103    版本:V3.0.4 ZabbixAgent    192.168.1.128 Mysql       192.168.1.102 二.监控需求 监控mysql的状态,当状态发生异常,发出报警 三.mysql添加监控监控脚本 3.1.使用mysqladmin工具来检测mysql状态 [email protected]:~# mysqladmin -uroot -p1qaz#EDC ping 说明:如果MySQL状态正常

zabbix专题:第四章 添加自定义监控项Items

添加监控项Items 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.com 本节目录大纲 什么是item item构成 实战添加网卡流入流出监控项 zabbix专题:第四章 添加监控项Items 什么是item Items是从主机里面获取的所有数据.通常情况下我叫itme为监控项,例如我需要监控它的cpu负载.监控网卡流入流出,那么实现这个方法的东西就叫item.接下来zabbix教程中提到的item都翻译为监

zabbix 自动发现规则自动监控

1.先配置server端的发现规则配置--自动发现2.配置agent端rpm -Uvh https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-2.el7.noarch.rpmyum install zabbix-agent -y##配置安装源,yum安装agent端vim /etc/zabbix/zabbix_agentd.confServe=192.168.0.13 #被动模式server来拉取数据ServerA

zabbix自动发现规则

#!/bin/bash    # Script to fetch nginx statuses for tribily monitoring systems    web=('www.baidu.com' 'www.hao123.com')  function get_web(){   length=${#web[@]}  printf "{\n"  printf '\t'"\"data\":["  for ((i=0;i<$length;