zabbix redis_low_level_discovery

zabbix 可以通过常见的手段监控到各种服务,通过编写脚本来获取返回值并将获取到的值通过图形来展现出来,包括(系统、服务、业务)层面。可是有些时候在一些不固定的场合监控一些不固定的服务就比较麻烦。例如,服务器运行三台 redis,端口分别是 7000 7001 7002,那么这时候如果需要监控则需要建立三个模板,分别对应不同的模板又要设置不同的 Shell Script 及 UserParameter 来监控不同端口的服务。 zabbix 有 LLD 特性(low level discovery),属于自动发现的范畴(该自动发现属于多服务的监控,是系统层面的),你会发现有很多要监控的对象大部分都是不固定的,到处都是LLD。换句话说,我们要监控的对象如果是固定的,那直接添加一个item就可以了,但是如果不是固定的,那就需要用LLD。


举几个栗子:

1、如果要监控CPU(s)使用率,这在Linux里是一个固定的值,添加一个item就可以。
如果要监控每个cpu的使用率,这就需要LLD了,因为每个机器的cpu个数都不一样,我们需要先发现cpu个数,在监控每个cpu的使用率。
2、每个机器的分区也不一样,需要用到LLD
3、每个交换机的网口个数也不一样,需要用到LLD


Zabbix官方其实早就想到了这点,为我们做好了6个自动发现功能,真贴心
discovery of file systems;(vfs.fs.discovery)
discovery of network interfaces; (net.if.discovery)
discovery of CPUs and CPU cores; (system.cpu.discovery)
discovery of SNMP OIDs; (discovery[{#MACRO1}, oid1, {#MACRO2}, oid2, …,])
discovery using ODBC SQL queries; (db.odbc.discovery[,])
discovery of Windows services. (service.discovery)

这几个自动发现已经满足我们一些基本需求了,但是我们的需求是无穷无尽的,所以我们还需要自己构建一些自动发现。

下面来讲一下 zabbix 针对 多台 redis 的自动发现。

模板地址:https://github.com/wangleistorage/Zabbix/tree/master/zabbix-monitor-conf/redis


实验环境

redis_host      redis_port      redis_pass   
10.1.0.55          7000         yunjee0515
10.1.0.55          7001         yunjee0515
10.1.0.55          7002         yunjee0515

redis-7000 主要配置

daemonize yes
port 7000
bind 10.1.0.55
requirepass yunjee0515

redis-7001 主要配置

daemonize yes
port 7001
bind 10.1.0.55
requirepass yunjee0515

redis-7002 主要配置

daemonize yes
port 7002
bind 10.1.0.55
requirepass yunjee0515

这里写图片描述


zabbix redis low_level_discovery 实现过程

一、编写 zabbix redis_low_discovery.sh 脚本(zabbix shell 脚本)

#!/bin/bash
# Fucation: redis low-level discovery
# Script_name redis_low_discovery.sh
redis() {
            port=($(sudo netstat -tpln | awk -F "[ :]+" '/redis/ && /0.0.0.0/ {print $5}'))
            printf '{\n'
            printf '\t"data":[\n'
               for key in ${!port[@]}
                   do
                       if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
              socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $10}'|cut -d ' ' -f 1`
                          printf '\t {\n'
                          printf "\t\t\t\"{#REDISPORT}\":\"${port[${key}]}\"},\n"
                     else [[ "${key}" -eq "((${#port[@]}-1))" ]]
              socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $10}'|cut -d ' ' -f 1`
                          printf '\t {\n'
                          printf "\t\t\t\"{#REDISPORT}\":\"${port[${key}]}\"}\n"
                       fi
               done
                          printf '\t ]\n'
                          printf '}\n'
}
$1

二、编写 zabibx redis_low_discovery_key 文件(zabbix U、userparameter )

UserParameter=zabbix_low_discovery[*],/bin/bash /usr/local/zabbix/shell/redis_low_discovery.sh $1
UserParameter=redis_stats[*],/usr/local/redis/src/redis-cli -h 10.1.0.55 -p $1 -a yunjee0515 info|grep $2|cut -d : -f2

三、安全相关设置

允许 zabbix 用户无密码运行 netstat 及 Disable requiretty

echo "zabbix ALL=(root) NOPASSWD:/bin/netstat">>/etc/sudoers
sed -i 's/^Defaults.*.requiretty/#Defaults    requiretty/' /etc/sudoers

四、重启 zabbix_agentd 并尝试获取值

如果能够正常获取到 redis 的信息,那么在服务器端操作已经完成

这里写图片描述


五、导入 redis discovery 模板

这里写图片描述

这里写图片描述


六、设置正则表达式及匹配 low_level_discovery 过滤器

打开 zabbix 页面,选择管理 —> 一般 —> 正则表达式 —> 添加新的正则表达式

这里写图片描述

接着打开 redis discovery 模板,点击过滤器,查看过滤器匹配的正则表达式是否和前面命名的一致,如果一致,则证明成功匹配。

这里写图片描述


七、通过 zabbix 里面的动作来自动注册主机或者手动链接模板

这里写图片描述

八、重启 zabbix_agentd

在重启之后可以将自动发现的时间改小以便用于验证,我这边改为 60s 一发现

这里写图片描述

下图中可以看到图形已经展示出来

这里写图片描述


如下是效果展示图:

1、Redis Port Connections

这里写图片描述

2、Redis Port key

这里写图片描述

3、Redis Port Last_save_time

这里写图片描述

4、Redis Port Status

这里写图片描述

5、Redis Port Uptime_in_seconds

这里写图片描述

6、Redis Port Used memory

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值