免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10559 | 回复: 14
打印 上一主题 下一主题

[其他] Nagios 监控 Redis 内存使用量的脚本 [复制链接]

论坛徽章:
2
技术图书徽章
日期:2013-11-23 01:55:57白羊座
日期:2013-12-08 15:48:16
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-16 15:46 |只看该作者 |倒序浏览
本帖最后由 7looki 于 2012-11-16 15:48 编辑

合同已经到期了, 没有打算续签, 想好好休息一下, 过完年再出来找工作.  这几天在办社保之类的手续, 在公司天天打酱油, 就写了下面的这个脚本.

本人能力有限, 学 Perl 还不到 3 个月, 脚本某些地方写的比较丑陋, 望各位大牛多多指点.

check_redis_used_memory.tar.gz (1.96 KB, 下载次数: 232)

这个脚本主要是监控 Redis 的内存使用量.

写这个监控脚本的主要原因有两个:
(1) 因为网上找的几个脚本只支持本地监控, 不能监控远程主机.
(2) 因为网上找的几个脚本都是Redis没有连接密码的情况下使用的, 如果Redis设置了连接密码, 则不能监控了.

基于以上两点, 写了这个监控脚本.

几点说明:

测试环境:
System :  CentOS 5.8 x86_64
Nagios  :  Nagios 3.4.1
Plugins :   Nagios Plugins 1.4.16
Redis    :  Redis 2.4.15
Perl      :   Perl 5.8.8

1. 请先确认已经安装了Nagios的插件(Nagios Plugins);

2. 修改这个脚本的第28行, 替换对应的目录, 默认目录是: /usr/local/nagios/libexec

3. 此脚本需要Perl中的Redis模块,可通过以下方式安装:
     shell> perl -MCPAN -e shell
    CPAN> install Redis


4. 此脚本中, Redis 内存使用量是按 Byte 监控的, 所以 WARNING 和 CRITICAL 只支持纯数字, 单位是 Byte, 且 WARNING 必须小于 CRITICAL.


5. -H 的选项为 hostname或者IP:端口, 例如: -H 192.168.1.200:6379 或 -H localhost:6379
    当初写脚本的时候, 就没有打算将 IP和端口 分开, 并不是不会写, 只是个人喜欢这种方式.
    PS: 不喜欢这种方式的可以绕道.

   -P 为连接 Redis 时需要的密码, 视实际情况而定, 可有可无

6. 简单的几个示例:

定义check_redis_used_memory, 在 /usr/local/nagios/etc/objects/commands.cfg 最后添加以下内容:

# 'check_redis_used_memory' command definition
# 连接Redis时需要密码
define command{
    command_name  check_redis_used_memory
    command_line     /usr/local/nagios/libexec/check_redis_used_memory -H $ARG1$ -P $ARG2$ -w $ARG3$ -c $ARG4$
}

# 'check_redis_used_memory' command definition
# 连接Redis时不需要密码
define command{
    command_name  check_redis_used_memory_no_passwd
    command_line     /usr/local/nagios/libexec/check_redis_used_memory -H $ARG1$ -w $ARG2$ -c $ARG3$
}

------------------------------------------------------------------------------------------------------------------------------------------

配置示例, 在 /usr/local/nagios/etc/objects/localhost.cfg 最后添加以下配置

配置示例1,需要密码:
define service{
        use                             local-service
        host_name                  localhost
        service_description       Redis used memory 6380
        check_command           check_redis_used_memory!127.0.0.1:6380!redispasswd!3000000!5000000!
}

配置示例2,不需要密码:
define service{
        use                             local-service
        host_name                  localhost
        service_description       Redis used memory 6370
        check_command           check_redis_used_memory_no_passwd!127.0.0.1:6379!3000000!5000000!
}

相关截图:


------------------------------------------------------------------------------------------------------------------------------------------
修改一下, 调整一下 WARNING 和 CRITICAL:
配置示例1修改为:
define service{
        use                             local-service
        host_name                  localhost
        service_description       Redis used memory 6380
        #check_command           check_redis_used_memory!127.0.0.1:6380!redispasswd!3000000!5000000!
        check_command           check_redis_used_memory!127.0.0.1:6380!redispasswd!1000000!2000000!
}

配置示例2修改为:
define service{
        use                             local-service
        host_name                  localhost
        service_description       Redis used memory 6370
        #check_command           check_redis_used_memory_no_passwd!127.0.0.1:6379!3000000!5000000!
        check_command           check_redis_used_memory_no_passwd!127.0.0.1:6379!2000000!3000000!
}


相关截图:


监控远程的主机, 只需要配置相应的IP和端口及密码等就可以了, 例如:
define service{
        use                             local-service
        host_name                  Redis Server
        service_description       Redis used memory
        check_command           check_redis_used_memory!192.168.1.200:6379!redispasswd!1000000!2000000!
}

--END--





论坛徽章:
0
2 [报告]
发表于 2012-12-05 13:42 |只看该作者
[root@localhost]#/usr/local/nagios/libexec/check_redis_used_memory -H 172.16.10.112:6380
Can't locate Redis.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/nagios/libexec/check_redis_used_memory line 25.
我是CENTOS6.2的系统。按照你说的执行报错,请问是什么原因?

论坛徽章:
2
技术图书徽章
日期:2013-11-23 01:55:57白羊座
日期:2013-12-08 15:48:16
3 [报告]
发表于 2012-12-05 13:55 |只看该作者
回复 2# bh6886


    3. 此脚本需要Perl中的Redis模块,可通过以下方式安装:
     shell> perl -MCPAN -e shell
    CPAN> install Redis

论坛徽章:
2
技术图书徽章
日期:2013-11-23 01:55:57白羊座
日期:2013-12-08 15:48:16
4 [报告]
发表于 2012-12-05 13:56 |只看该作者
回复 2# bh6886


    3. 此脚本需要Perl中的Redis模块,可通过以下方式安装:
     shell> perl -MCPAN -e shell
    CPAN> install Redis

论坛徽章:
0
5 [报告]
发表于 2012-12-05 15:28 |只看该作者
本帖最后由 bh6886 于 2012-12-05 16:03 编辑

好东西,测试正常

论坛徽章:
2
技术图书徽章
日期:2013-11-23 01:55:57白羊座
日期:2013-12-08 15:48:16
6 [报告]
发表于 2012-12-05 16:31 |只看该作者
回复 5# bh6886


    刚才我还看你说出错了, 一眨眼就好了. 是什么原因? 分享一下.

论坛徽章:
0
7 [报告]
发表于 2012-12-05 16:38 |只看该作者
本帖最后由 bh6886 于 2012-12-05 18:05 编辑

不是的,还有问题,我像多测试几下再发给你,你看:
[root@localhost libexec]# ./check_redis_used_memory -H  172.16.10.112:6380 -P miam2012&&^^$$ -w 100000000 -c 200000000
Warning threshold not specified
[root@localhost libexec]# ./check_redis_used_memory -H  172.16.10.112:6380 -P  'miam2012&&^^$$' -w 100000000 -c 200000000000OK ! Redis Used Memory : 726160Bytes [709.14K]
这样注意密码,我必须要加''号才能获取到。
按照你上述配置,增加到server.cfg中,没密码的端口是正常,有密码的端口在nagios网页界面提示
UNKNOWN Redis Used Memory
我直接写在commands.cfg一样不行(如下),不知道为什么。直接执行
# 'check_redis_passwd' command definition
define command{
    command_name  check_redis_used_memory
    command_line    /usr/local/nagios/libexec/check_redis_used_memory -H 172.16.10.112:6380 -P 'miam2012&&^^$$'  -w 2000000 -c 3000000
}
我再测试了下,密码删掉这些特殊字符后就能正常监控,不太理解nagios为什么写在commands.cf 还是不行。这些密码是商用的,不能修改,用这些密码如何才能监控到?

论坛徽章:
2
技术图书徽章
日期:2013-11-23 01:55:57白羊座
日期:2013-12-08 15:48:16
8 [报告]
发表于 2012-12-05 16:50 |只看该作者
回复 7# bh6886


    我现在在家, 暂时没有测试环境, 晚上我搭建一套测试环境, 再测试一下.

论坛徽章:
0
9 [报告]
发表于 2012-12-05 16:59 |只看该作者
嗯,可能是我的密码有特殊字符吗?我的QQ是2568032832,有啥事交流下 回复 8# 7looki


   

论坛徽章:
2
技术图书徽章
日期:2013-11-23 01:55:57白羊座
日期:2013-12-08 15:48:16
10 [报告]
发表于 2012-12-06 03:29 |只看该作者
本帖最后由 7looki 于 2012-12-06 03:35 编辑

回复 7# bh6886


你的密码包含了特殊字符, 需要转义一下.

我测试的环境:
CentOS 5.5 x86_64
Nagios 3.4.3

Nagios 配置文件:

/usr/local/nagios/etc/objects/commands.cfg
  1. # 'check_redis_used_memory' command definition
  2. define command{
  3.     command_name    check_redis_used_memory
  4.     command_line    /usr/local/nagios/libexec/check_redis_used_memory -H $ARG1$ -P $ARG2$ -w $ARG3$ -c $ARG4$
  5. }
复制代码
/usr/local/nagios/etc/objects/localhost.cfg
  1. define service{
  2.         use                             local-service
  3.         host_name                       localhost
  4.         service_description             Redis used memory 6379
  5.         check_command                   check_redis_used_memory!192.168.1.191:6379!miam2012\\&\\&\\^\\^\\$\\$!3000000!5000000!
  6. }
复制代码
转义方法:
miam2012\\&\\&\\^\\^\\$\\$

截图:


参考文档:
https://kb.groundworkopensource. ... shes+may+be+needed+(DEPRECATED)

http://www.nagiosql.org/forum/ge ... k-in-arguments.html

http://permalink.gmane.org/gmane.network.nagios.user/60951

http://www.krenger.ch/blog/nagios-escape-dollar-character/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP