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编辑  收藏  举报

导航