Zabbix-agent通过LLD(低水平自动发现)实现对Redis多实例监控的添加案例
------------恢复内容开始------------
LLD(Low Level Discovery)介绍
LLD 即低水平自动发现,使用它可以自动创建监控项、触发器等。如zabbix可以自动监控主机上的文件系统和网络拉口的数量,而不需要为每个实例创建items 。此处,如果后其变化也可以实现被监控项目的自动删除。LLD 本质就是一个特殊的监控项,其返回值为特定的json格式。
地址:
10.0.0.200-zabbix-server(已搭建)
10.0.0.203-zabbix-agent&Redis
10.0.0.40-mysql8.0(zabbix-server已连接)
OS:
10.0.0.200-Ubuntu18.04
10.0.0.203-Ubuntu18.04
10.0.0.40-Centos8
步骤:
第一步:创建自动发现监控项
比如同一台机器开启3个实例redis那么所用的端口号必然不同那么这个就是"关键参数",取出并将这个"关键参数"作为"值"赋予到自定义"宏"当中(此时"宏"表3个redis实例的端口号)通过py脚本进行JSON格式的输出.
第二步:创建原型监控项
通过"宏"以及配合需要监控的性能指标,结合Command对redis不同实例的性能指标进行取"值·"
PS:这里的"宏"类似于一个包含了3个端口号的数组。
1.安装Redis后开启多实例.
apt -y install redis
redis-server --port 6379 & redis-server --port 6380 & redis-server --port 6381 & # & 表后台运行
2.开启多实例后查看端口号。
ps aux | grep 'redis'
3.在agent子配置文件中编写一个py的取值脚本(取redis的"关键参数")并将"值"赋予到自定义"宏"再经过json格式处理后打印出来。
<编写完后添加X权限>
cat > /etc/zabbix/zabbix_agentd.d/redis_port.py <<EOF
#!/usr/bin/python3 #Python3脚本
import os
import json
t=os.popen("""netstat -ntlp|awk -F'[: ]+' '/redis-server/&&/tcp /{print \$5}'""") #端口(“关键参数”)的取值命令
ports = []
for port in t.readlines():
r = os.path.basename(port.strip())
ports += [{'{#REDISPORT}':r}] #取值后进行赋值的自定义"宏"
print (json.dumps({'data':ports},sort_keys=True,indent=4,separators=(',',':')))
EOF
<通过python3执行脚本可以查看JSON格式打印出来的端口号,如果没有安装Pyhont3需安装>
root@Ubuntu18:/etc/zabbix/zabbix_agentd.d# python3 redis_port.py
{
"data":[
{
"{#REDISPORT}":"6379"
},
{
"{#REDISPORT}":"6380"
},
{
"{#REDISPORT}":"6381"
}
]
}
4.创建Redis自动发现监控项及原型监控项的配置文件,配置好后重启agent。
vim /etc/zabbix/zabbix_agentd.d/redis.conf
UserParameter=redis.discovery,/etc/zabbix/zabbix_agentd.d/redis_port.py #自动发现监控项,用于将"关键参数"取出赋值到自定义宏
UserParameter=redis_stats[*],/etc/zabbix/zabbix_agentd.d/redis.sh #原型监控项,用于获取redis性能参数
<redis.sh脚本>
#!/bin/bash
PORT=$1
ITEM=$2
redis_state(){
redis-cli -p $PORT info | grep -w $ITEM | awk -v FS=":" '{print $2}'
}
redis_state
6.测试
1)通过测试工具让agent执行py脚本查看自动发现监控项的"值"看是否能够获取。
zabbix_get -s 10.0.0.203 -k redis.discovery
<报错!这是由于在运行py脚本时agent程序进程使用的是zabbix账号,而脚本中的netstat命令需要root才能够执行>
解决方案:
1)第一种:修改agent的配置文件与service文件
2)第二种:通过which命令找到netstat命令的路径再对netstat赋予 s 权限。
vim zabbix_agentd.conf
AllowRoot=1 #0改1表支持root
vim /lib/systemd/system/zabbix-agent.service
#User=zabbix #注释
#Group=zabbix #注释
systemctl daemon-reload #加载
systemctl restart zabbix-agent.service #重启
<成功>
2)测试redis.sh脚本是否能够获取到某一个redis实例的性能指标。<成功>
zabbix_get -s 10.0.0.203 -k redis_state[6381,used_memory]
5.添加自动发现监控项,可以看到此时自动发现监控项获取到的三个redis实例端口的"值"已经赋予给自定义"宏" {#REDISPORT}
7.添加原型监控项
1)名称:因为“宏”已被赋值所以能够引用,引用后所创建的不同实例的原型监控项名称也会不同。
2)测试,图中报错因原型监控项的键不能识别自定义"宏"的 {} 花括号,如果没有其他报错直接点击添加。
3)可以看到10.0.0.203多个redis实例的used_memory性能指标都能被监测到数据。
4)创建第二个原型监控项 connected_clients
5)能够成功添加并获取数据,自动发现监控为红色
posted on 2021-08-22 11:40 1251618589 阅读(4) 评论(0) 编辑 收藏 举报