由于一台服务器开启许多Redis实例,如果一台一台的监控太耗费时间,也非常容器出错。这种费力不讨好的事情我们是坚决杜绝的,幸好ZABBIX有自动发现功能,今天我们就来用该功能来监控我们的Redis实例。

监控项

Redis的监控信息主要通过info命令来获取,下面列举几个我们的监控项。

uptime_in_days				      ##redis启动的天数
connected_clients ##redis连接的客户端数
blocked_clients: ##正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量
used_memory_peak_human: ##reids所用内存的高峰期
used_memory: ##redis运行起来使用的内存数
expired_keys: ##过期的key数量
evicted_keys: ##删除过期的key数量
keyspace_misses: ##没命中的key数量
keyspace_hits: ##命中的key数量
connected_slaves: ##已连接的从服务器数
rejected_connections: ##因为超过最大连接数被拒接的请求数量

上面只是列举了几个,如果需要更多的监控项可以通过info命令获取。如下:

开发自动发现脚本

注:可以使用shell开发,也可以使用python开发。我这里附这两种语言脚本

Shell脚本

#!/bin/bash
# 自动发现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'

Python脚本

#!/usr/bin/env python
import os
import json
t=os.popen("""sudo netstat -tlpn |grep redis-server|grep 0.0.0.0|awk '{print $4}'|awk -F: '{print $2}' """)
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=(',',':'))

注:我这里直接监控的是Redis,所以上方两个脚本获取的直接是Redis的端口,你也可以将脚本内容改一下,比如服务名通过参数形式传递,那么该脚本就可以发现你想发现的服务端口了。

在被监控主机上配置

(1)、将上方的脚本其一拷贝到被监控主机上,比如我这里的10.2.42.16主机,主要命令如下

# 创建脚本存放路径
mkdir /etc/zabbix/scripts
# 在脚本存放路径下存放我们上面开发的脚本任一,我这里取名为discovery_redis.py
# 给脚本加执行权限
chmod +x discovery_redis.py

(2)、创建zabbix的key。在/etc/zabbix/zabbix_agentd.d/目录下创建配置文件,如下:

vim userparameter_disvocery_redis.conf
UserParameter=redis.discovery,/etc/zabbix/scripts/discovery_redis.py
UserParameter=redis.stats[*],/usr/local/redis-3.2.9/src/redis-cli -h 127.0.0.1 -p $1 info | grep -w $2 | cat -d : -f2

参数说明:

其中的格式为UserParameter=,

:就是在web端添加监控脚本时的key值

:就是该key值对应的执行脚本,也就是脚本执行路径

(3)、修改zabbix_agentd.conf配置文件

# 添加配置目录
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf
# 允许自定义脚本
UnsafeUserParameters=1

(4)、增加sudo权限
之所以要增加sudo权限,是因为zabbix_agentd是zabbix用户启动的,默认不能执行netstat -p等命令,因此可以配置sudo解决,也可以使用chmod +s /bin/netstat进行解决。

# visudo
#Defaults requiretty # 注释掉
Defaults:zabbix !requiretty
zabbix ALL=(root) NOPASSWD:/bin/netstat

(5)、重启zabbix-agent,并在server端用zabbix_get测试

# 重启zabbix-agent
service zabbix-agent restart
# 在服务端用zabbix_get测试
zabbix_get -s 10.2.42.16 -p 10050 -k redis.discovery
zabbix_get -s 10.2.42.16 -p 10050 -k redis.stats[6383,expired_keys]

如果没有zabbix_get命令需要自己安装,由于我这里都是用的yum安装的,如果你也和我一样就用下面命令安装即可yum install zabbix_get -y

到目前为止zabbix-agent端已经配置完毕,下面进行服务端配置。

服务端配置

服务端配置直接在WEB界面操作。

创建模板


创建应用集

配置>模板>选择刚才创建的模板

创建自动发现规则

配置>模板>选择刚才创建的模板

配置过滤器(可选),我这里配置的主要原因是还有其他我不需要监控的集群

配置正则表达式

创建监控项

注意:这里要在模板中的自动发现规则处去添加监控项原型

点击监控项原型,创建监控项原型

上面是我添加的一些监控项原型,我只拿一个举例,其他配置相似。

其中键值处配置如下:

redis_stats[{#REDISPORT},evicted_keys]

说明:

  • redis_stats:是我们在zabbix-agent端配置的key
  • {#REDISPORT}:是我们自动发现脚本中定义的key,不要和上面的key混淆了。
  • evicted_keys:是我们需要获取的监控项,这个参数是我们主要需要改的参数

创建图形原型

图形原型也需要在模板自动发现规则中配置,如下:

我这里只配置了三个图形,我这里只列举一个,如下:

注意,这里添加监控项的时候要添加原型,也就是我上面箭头指的地方

创建触发器

这里依旧在模板自动发现规则中配置。

我这里仅仅配置了两个,根据需要自行配置,那一个举例,如下:

到此服务端已经配置完成,下面将模板添加到我们的主机。

为主机添加模板

被添加模板的主机需要添加自动发现脚本和配置zabbix-agent端

然后观察最新数据和图形。

ZABBIX自动发现Redis端口并监控的更多相关文章

  1. zabbix自动发现功能实现批量web url监控

    需求: 现在有大量url需要监控,形式如http://www.baidu.com ,要求url状态不为200即报警. 需求详细分析: 大量的url,且url经常变化,现在监控用的是zabbix,如果手 ...

  2. 使用 zabbix 自动发现监控 MySQL

    介绍 使用 zabbix 的 low-level 自动发现功能完成单主机多端口的监控, 详见low_level_discovery, 整体上监控类似 percona 的 zabbix 监控插件, 不过 ...

  3. zabbix自动发现监控mysql

    一. 数据库给只读权限 1.1 grant usage on *.* to 'zabbix'@'127.0.0.1' identified by 'zabbix'; flush privileges; ...

  4. 添加zabbix自动发现(监控多tomcat实例)

    说明 何为自动发现?首先我们监控多tomcat实例,如果一个个实例地添加或许可以完成当前需求.但是日后随着实例的增多,再手动一个个去添加就十分不方便了.这时候需要自动发现这个功能,来帮助我们自动添加监 ...

  5. 转 zabbix 自动发现和 zabbix自定义用户key与参数User parameters

    ########31 https://www.cnblogs.com/yjt1993/p/10883345.html 1.概念 在配置Iterms的过程中,有时候需要对类似的Iterms进行添加,这些 ...

  6. zabbix/自动发现规则

      对于zabbix 我们并不陌生 他是开源的监控系统,现在的一部分企业都在用zabbix,今天给大家分享的是企业级监控zabbix的自动发现规则,有了它我们自定义健康的时候根据宏值可以让他自动发现对 ...

  7. zabbix自动发现主机并加入组绑定模板

    在被监控主机多的情况下,怎样将这些主机加入zabbix server进行监控呢?下面将介绍下zabbix自动发现功能 1.创建自动发现规则 创建“规则名称,配置ip范围及检查方式”,点击“增加”,完成 ...

  8. zabbix 自动发现

    转自:https://blog.csdn.net/yyy72999/article/details/76065374 zabbix自动发现/zabbix自动发现规则 置顶2017年07月25日 14: ...

  9. zabbix 自动发现 相关

    zabbix自动发现,是zabbix精髓所在. 生产中,一台服务器上可能会存在多个监控实例,比如:A服务器2个,B服务器4个, C服务器1个.单单靠套模板来完成监控,做法那太糟糕了.比如小明有100台 ...

随机推荐

  1. BFC的理解与应用

    什么是BFC(Block formatting contexts) BFC的通俗理解: 首先BFC是一个名词,是一个独立的布局环境,我们可以理解为一个箱子(实际上是看不见摸不着的),箱子里面物品的摆放 ...

  2. CVPR2020|3D-VID:基于LiDar Video信息的3D目标检测框架

    作者:蒋天园 Date:2020-04-18 来源:3D-VID:基于LiDar Video信息的3D目标检测框架|CVPR2020 Brief paper地址:https://arxiv.org/p ...

  3. 【Java】 Variable 变量

    什么是Variable变量? - 变量是内存中的一个存储区域 - 这个存储区域内的数据允许在同一类型范围内不断变化 - 是程序最基本的存储单元,包含三个要素[变量类型][变量名][存储的值] 为什么需 ...

  4. 使用 Chrome 插件 Vimium 打造黑客浏览器

    之前一直用 cVim,与 Vimium 功能类似,但是之后不在更新了,故转战到 Vimium. 简介 官网:http://vimium.github.io/ Vimium 是 Google Chrom ...

  5. 模仿NetFlix首页效果

    之前写过UWP 带左右滚动按钮的横向ListView———仿NetFlix首页河的设计,讲述了如何设计一个带有左右滚动按钮横向的ListView. 不过我在半年之前挖了一个坑,由于工作关系,没时间来填 ...

  6. Tesseract-ocr 安装配置

    参考:https://jingyan.baidu.com/article/219f4bf788addfde442d38fe.html 1.下载图形识别工具Tesseract-ocr,下载路径https ...

  7. V - Infinite Prefixes CodeForces - 1295B math

    天哪!!菜到家啦. 数学+思维. 首先求出一个周期内cnt0-cnt1=c的个数,如果C=0,那么只要在一个周期内有前缀等于x,那么答案就是-1,否则答案就是0 如果C!=0,列一下方程x=t*c+a ...

  8. CodeForces - 876B H - 差异的可分割性

    现在有n个整数,在这n个数中找出k个数,保证这k个数中任意两个数差的绝对值可以被m整除. Input第一行输入三个整数n,k,m(2<=k<=n<=100000,1<=m< ...

  9. 异常处理方式一(try-catch-finally)

    package com.yhqtv.demo01Exception; /* * 一.异常的处理,抓抛模型 * * 过程一:“抛”:程序在正常 执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异 ...

  10. Java 添加、隐藏/显示、删除PDF图层

    本文介绍操作PDF图层的方法.可分为添加图层(包括添加线条.形状.字符串.图片等图层).隐藏或显示图层.删除图层等.具体可参考如下Java代码示例. 工具:Free Spire.PDF for Jav ...