zabbix监控redis数据库_zabbix监控redis数据库状态两种方法

更新时间:2019-06-10    来源:redis    手机版     字体:

【www.bbyears.com--redis】

方法一,zabbix监控redis

1、导入模板

同样,模板我已上传到 github项目 上 。直接下载,通过下面的步骤导入模板:点击configuration ----> templates ------> import -------> 导入下载的xml文件 。

2、客户端key配置

在被监控的主机上,打开/etc/zabbix/zabbix_agentd.conf 配置文件,在最后一行加入:

UserParameter=redis_stats[*],redis-cli -h 127.0.0.1 -p $1 info|grep $2|cut -d : -f2
配置完成后通过/etc/init.d/zabbix_agentd restart 重启服务并应用最新的配置文件。

注:在该文件中还要确认UnsafeUserParameters=1 。

3、服务端验证

验证方式还是通过zabbix_get 程序去获取数据,能正常得到数据,证明通信正常。

 代码如下 # zabbix_get -s 172.20.0.20 -k redis_stats[6379,total_connections_received]

上面正常从被监控主机上取得了数据,c/s通信正常 。

4、添加主机关联模板

通过configuration ------> hosts ------> create host 创建新的主机,并在templates项中,查找Templates Redis_6379 模板,并link 该模板 。就可以正常获取数据了。同样,验证数据使用 monitoring ----- lastest data ---- 打到刚刚添加的主机,查看是否有数据 。

5、查看监控图

通过monitoring ----- graphs 可以查看刚刚添加的监控项的监控图,这里只截下内存使用情况图,

方法二,利用zabbix low level discovery 自动发现监控redis

 一、服务器配置

  1)配置正则表达式,在后面添加discovery rules时会用到 #这里是个坑,我这里正则匹配的是端口号,刚开始写的是”d+”测试也通过了,全部都配置好了,在服务端通过zabbix_get也能正常获取到client的值,无奈就是不自动上报,检查了一个中午,后来问了几个群友,终于找到原因了,正则要用^(8899|10000)$ 类似这种格式,说多了都是泪呀 最后再查阅官方文档,原来对zabbix的正则没有理解清楚,它的正则是对上报结果的二次处理,其实如果上报的就是准确的,就不用进行二次过滤,最终采用正则一处留空,不进行二次匹配处理       2)创建模板

 

点击Discovery rules 创建自定义规则   zabbix监控redis数据库状态两种方法 点击  Item prototypes添加监控项     zabbix监控redis数据库状态两种方法 我这里需要监控4个指标,建立4个item zabbix监控redis数据库状态两种方法

Key值在客户端定义

二、客户端配置:

 

先看zabbix_agentd.conf配置文件

 代码如下 UnsafeUserParameters=1   #允许zabbix用户运行root命令
UserParameter=redis.discovery,/usr/local/zabbix/bin/redis_port.py  #获取json格式数据,上报端口
UserParameter=redis[*],/usr/local/zabbix/bin/redis_stats.sh $1 $2    #自定义Key值

需要两个脚本:

 代码如下 ll /usr/local/zabbix/bin/
total 516
-rwxr-xr-x 1 root root    342 Oct 25 16:56 redis_port.py
-rwxr-xr-x 1 root root    773 Oct 25 14:59 redis_stats.sh
-rwxr-xr-x 1 root root 236737 Jul 23  2012 zabbix_get
-rwxr-xr-x 1 root root 278582 Jul 23  2012 zabbix_sender
JSON格式脚本
[root@ ~]# cat /usr/local/zabbix/bin/redis_port.py   ##json串
#!/usr/bin/env python
import os
import json
t=os.popen("""netstat -natp|awk -F: "/redis-server/&&/LISTEN/{print $2}"|awk "{print $1}" """)
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=(",",":"))

获取端口数据状态脚本:

 代码如下

[root@ ~]# cat /usr/local/zabbix/bin/redis_stats.sh    ##获取状态

 #!/bin/bash
METRIC="$1"
HOSTNAME=127.0.0.1
PORT="${2:-6379}"
CACHE_FILE="/tmp/redis_$PORT.cache"

    (echo -en "INFOrn"; sleep 1;) | nc $HOSTNAME $PORT > $CACHE_FILE 2>/dev/null || exit 1

grep "^$METRIC:" $CACHE_FILE |awk -F":|," "{print $2}"|sed "s/[^0-9]//g"


以上是全部配置完成,下来进行测试

在zabbix_server上进行测试,执行以下命令:

 代码如下

 

zabbix_get -s 192.168.250.206 -k redis.discovery

 

 得到如下结果:
{
       ”data”:[
              {
                     "{#REDISPORT}":"10000"
              },
              {
                     "{#REDISPORT}":"8899"
              }
       ]
}
OK,自动发现端口成功!

 

zabbix_get -s 192.168.250.206 -k redis[used_memory,8899]

 

4834072
OK,得到所需要的值!

然后将模板添加到所需要监控的机器上,这个就不上图了
添加完模版以后,查看数据:

在做的过程中遇到以下问题:
1.关于正则的问题
正则匹配不同于普通的正则,多个之间的匹配正则要用^(8899|10000)$ 类似这种格式
或者正则留空
2.权限问题,zabbix_agentd是zabbix用户启动的,默认不能执行netstat -p等命令,导致从服务器取到的自动发现脚本为空

 代码如下 (Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
解决方法 :
chmod +s /bin/netstat

 

本文来源:http://www.bbyears.com/shujuku/53981.html