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

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

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

在zabbix自带的linux模板的自动发现规则中,有一个Mounted filesystem discovery自动发现规则,可以根据每个服务器磁盘梳理不同,自动生成相应的磁盘监控数据.

这就是自动注册的用途,根据不同服务器上同一个监控项不同的数量,自动生成对应数量的监控

例如5个服务器都分别启动了tomcat多实例,但启动的tomcat数量不相同,端口也不同,我想要监控这些端口是否down掉:

用普通的方式创建的监控模板,就得给每个服务器单独创建,不能通用

而如果通过自动发现规则来创建,就可以只用一个模板,对应这些不同数量的tomcat进行端口检查

自动发现规则使用实例

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

流程:

命令行获取结果

编写zabbix脚本,输出json格式

创建zabbix客户端key

服务端验证结果

web页添加模板规则

web页主机绑定模板

验证结果

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. 验证结果

过程中遇到的问题:

json格式错误导致自动发现不了

问题:自动发现不了,zabbix-server端日志提示became not supporteddiscovery 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权限

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值