码迷,mamicode.com
首页 > 其他好文 > 详细

zabbix redis_low_level_discovery

时间:2016-07-19 10:00:13      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

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 的自动发现。


实验环境

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

技术分享

zabbix redis_low_level_discovery

标签:

原文地址:http://blog.csdn.net/wanglei_storage/article/details/51952061

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!