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. 命令行获取结果

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

[root@zhimai-api02 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"

脚本执行结果如下:

[root@zhimai-api02 ~]# 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用来作为具体监控项

[root@zhimai-api02 ~]# 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命令验证

[root@zq-zabbix ~]# 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

再次在服务端验证:

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

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

[root@zq-zabbix ~]# 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
    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权限

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

  1. Zabbix-设置自动发现规则实例

    一.前文 此篇文章,主要针对自动发现规则中使用snmpv2类型发现 zabbix官方解读,可当参考:   https://www.zabbix.com/documentation/4.0/zh/man ...

  2. zabbix/自动发现规则

      对于zabbix 我们并不陌生 他是开源的监控系统,现在的一部分企业都在用zabbix,今天给大家分享的是企业级监控zabbix的自动发现规则,有了它我们自定义健康的时候根据宏值可以让他自动发现对 ...

  3. zabbix(10)自动发现规则(low level discovery)

    1.概念 在配置Iterms的过程中,有时候需要对类似的Iterms进行添加,这些Iterms具有共同的特征,表现为某些特定的参数是变量,而其他设置都是一样的,例如:一个程序有多个端口,而需要对端口配 ...

  4. zabbix添加对自定义无规则的关键日志文件的监控

    zabbix添加对自定义无规则日志文件的监控 项目背景及思路: zabbix自带有针对日志文件的监控,自带的监控只能监控到指定文件或者正则匹配的固定日志文件,但当需要监控的文件名没有规律的时候自带监控 ...

  5. 03: zabbix API接口 对 主机、主机组、模板、应用集、监控项、触发器等增删改查

    目录:Django其他篇 01: 安装zabbix server 02:zabbix-agent安装配置 及 web界面管理 03: zabbix API接口 对 主机.主机组.模板.应用集.监控项. ...

  6. zabbix日常监控项mysql(七)

    参考文档: percona官方文档:https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html za ...

  7. zabbix server端与agent端源码安装 自定义监控项

    ZabbixServer的安装(只有源码装zabbix才能装支持java) 搭建自定义yum仓库并安装支持包 yum -y install createrepo #下载依赖关系命令 createrep ...

  8. Zabbix设置自定义监控项之——监控tcp连接状态

    目录 一.用户自定义参数 二.配置 监控 TCP 连接状态 在实际监控中,除了官方自带的一些监控项,我们很多时候有一些定制化监控,比如特定的服务.TCP 连接状态等等,这时候就需要自定义监控项.自定义 ...

  9. Zabbix 触发器配置多监控项阈值

    配置内存自定义监控项 # 监控内存命令 [root@web01 ~]# free -m|awk '/^Mem/{print $NF/$2}' 0.664609 [root@web01 ~]# free ...

随机推荐

  1. vue基础 ref的作用

    1.  ref 获取dom元素,除了能获取dom元素也能获取组件dom,   组件通信:        在父组件中直接调用ref定义的组件的数据或者方法 <div id="app&qu ...

  2. 用纯Python实现循环神经网络RNN向前传播过程(吴恩达DeepLearning.ai作业)

    Google TensorFlow程序员点赞的文章!   前言 目录: - 向量表示以及它的维度 - rnn cell - rnn 向前传播 重点关注: - 如何把数据向量化的,它们的维度是怎么来的 ...

  3. 阅读GitHub源码的正确打开方式

    前言 近来发现阅读开源项目上手就整最新的代码不合适,缺少项目迭代的具体实现过程,想着若是可以看到针对问题的提交代码就好了,所以就有了本篇博客. 以文主要涉及:如何fork开源项目,如何保证本地仓库代码 ...

  4. 【Weiss】【第03章】练习3.22、3.23、3.24:无代码题,栈的思考题

    [练习3.22] a.提出支持栈的Push和Pop操作以及第三种操作FindMin的数据结构,其中FindMin 返回该数据结构的最小元素,所有操作在最坏情况下的运行时间都是O(1). b.证明,如果 ...

  5. BeanShell调用自己写的jar包进行MD5加密

    1.在eclipse中新建一个java工程,工程名随意. 2.在工程中添加一个package,package名为md5,在package下添加一个class,class名为mymd5. package ...

  6. JAVA EE,JAVA SE,JAVA ME,JDK,JRE,JVM之间的区别

    JAVA EE是开发企业级应用,主要针对web开发有一套解决方案. JAVA SE是针对普通的桌面开发和小应用开发. JAVA ME是针对嵌入式设备开发,如手机. JRE是程序的运行环境 JDK是程序 ...

  7. hdu3294 Manacher算法模板

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/3294/ 回文长度如果是mxx,回文中心是id的话,在扩展串中(id-mxx+1,id+mxx-1)的这段中去除标 ...

  8. 面试刷题17:线程两次start()会发生什么?

    线程是并发编程的基础元素,是系统调度的最小单元,现代的jvm直接对应了内核线程.为了降低并发编程的门槛,go语言引入了协程. 你好,我是李福春,我在准备面试,今天的题目是? 一个线程两次调用start ...

  9. 牛客网剑指offer【Python实现】——part1

    斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,n<=39). 循环实现,时间复杂度n def Fibonacci(self, ...

  10. [源码分析] 从FlatMap用法到Flink的内部实现

    [源码分析] 从FlatMap用法到Flink的内部实现 0x00 摘要 本文将从FlatMap概念和如何使用开始入手,深入到Flink是如何实现FlatMap.希望能让大家对这个概念有更深入的理解. ...