热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用perl脚本检测redis(nagios插件)附安装操作说明

作者:阿辉http:farmerluo.googlecode.comfilescheck_redis.pl介绍下怎么安装:脚本用到了perl的Redis库,需要先安装这个:#perl-MCPAN-eshell#installRediswgethttp:farmerluo.googlecode.comfilescheck_redis.plcpcheck_redis.p

作者:阿辉
http://farmerluo.googlecode.com/files/check_redis.pl

介绍下怎么安装:
脚本用到了perl的Redis库,需要先安装这个:
# perl -MCPAN -e shell
# install Redis

 
wget http://farmerluo.googlecode.com/files/check_redis.pl

cp check_redis.pl  /etc/nagios/command/

chown cacti.nagios check_redis.pl

 

在nagios内加入这个插件

 
vi /etc/nagios/objects/command.cfg

# \'check_redis\' command definition
define command{
command_name    check_redis
command_line    /etc/nagios/command/check_redis.pl -h $HOSTADDRESS$ $ARG1$
}

 

加入一个服务
vi /etc/nagios/objects/linuxhost.cfg

 
define service{
use                             generic-service         ; Name of service template to use
host_name                       memcached.ha2,memcached.web2
service_description             redis
check_command                   check_redis
notifications_enabled           1
}

 

 

检查下nagios配置是否正解:
nagios -v  /etc/nagios/nagios.cfg

Nagios Core 3.2.1
Copyright (c) 2009-2010 Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 03-09-2010
License: GPL

Website: http://www.nagios.org
Reading configuration data...
Read main config file okay...
Processing object config file \'/etc/nagios/objects/commands.cfg\'...
Processing object config file \'/etc/nagios/objects/contacts.cfg\'...
Processing object config file \'/etc/nagios/objects/timeperiods.cfg\'...
Processing object config file \'/etc/nagios/objects/templates.cfg\'...
Processing object config file \'/etc/nagios/objects/linuxhosts.cfg\'...
Processing object config file \'/etc/nagios/objects/windows.cfg\'...
Read object config files okay...

Running pre-flight check on configuration data...

Checking services...
Checked 32 services.
Checking hosts...
Checked 14 hosts.
Checking host groups...
Checked 4 host groups.
Checking service groups...
Checked 0 service groups.
Checking contacts...
Checked 3 contacts.
Checking contact groups...
Checked 2 contact groups.
Checking service escalations...
Checked 0 service escalations.
Checking service dependencies...
Checked 0 service dependencies.
Checking host escalations...
Checked 0 host escalations.
Checking host dependencies...
Checked 0 host dependencies.
Checking commands...
Checked 29 commands.
Checking time periods...
Checked 5 time periods.
Checking for circular paths between hosts...
Checking for circular host and service dependencies...
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...

Total Warnings: 0
Total Errors:   0

Things look okay - No serious problems were detected during the pre-flight check

没问题,我们重新载入配置。

service nagios reload

再介绍一下用perl写nagios插件需要注意的地方:

   1. 总是要生成一些输出内容;
   2. 加上引用\'use utils\'并引用些通用模块来输出($TIMEOUT %ERRORS &print_revision &支持等);
   3. 总 是知道一些Perl插件的标准习惯,如:
         1. 退出时总是exit带 着$ERRORS{CRITICAL}、$ERRORS{OK}等;
         2. 使用getopt函数来处理命令行;
         3. 程序处理超 时问题;
         4. 当没有命令参数时要给出可调用print_usage;
         5. 使用标准的命令行选项开关(象-H \'host\'、-V \'version\'等)。

check_redisl.pl代码:

 
#!/usr/bin/perl

# nagios: -epn

################################################################################
# check_redis - Nagios Plugin for Redis checks.
#
# @author  farmer.luo at gmail.com
# @date    2010-05-12
# @license GPL v2
#
# check_nagios.pl -h -p -w -c
#
# Run the script need:
#
# perl -MCPAN -e shell
# install Redis
#
################################################################################

use strict;
use warnings;
use Redis;
use File::Basename;
use utils qw($TIMEOUT %ERRORS &print_revision &support);
use Time::Local;
use vars qw($opt_h); # Redis 主机
use vars qw($opt_p); # Redis 端口
use vars qw($opt_w); # 超过这个时间发出警告
use vars qw($opt_c); # 超过这个时间发出严重警告
use Getopt::Std;

$opt_h = ;
$opt_p = 6379;
$opt_w = 5;
$opt_c = 10;
my $r = ;

getopt(\'hpwcd\');

if ( $opt_h eq ) {
help();
exit(1);
}

my $start = time();

redis_connect();

# print $@;
if ( $@ ) {
print UNKNOWN - cann\'t connect to redis server: . $opt_h . .;
exit $ERRORS{UNKNOWN};
}

if ( redis_set() ) {
print WARNING - redis server: . $opt_h . ,set key error.;
exit $ERRORS{WARNING};
}

if ( redis_get() ) {
print WARNING - redis server: . $opt_h . ,get key error.;
exit $ERRORS{WARNING};
}

if ( redis_del() ) {
print WARNING - redis server: . $opt_h . ,del key error.;
exit $ERRORS{WARNING};
}

#sleep(3);
my $stop = time();

my $run = $stop - $start;

if ( $run > $opt_c ) {

print CRITICAL - redis server( . $opt_h . ) run for . $run . seconds!;
exit $ERRORS{CRITICAL};

} elsif ( $run > $opt_w ) {

print WARNING - redis server( . $opt_h . ) run for . $run . seconds!;
exit $ERRORS{WARNING};

} else {

redis_info();
redis_quit();
exit $ERRORS{OK};

}


sub help{

die Usage:n , basename( $0 ) ,   -h hostname -p port -w warning time -c critical time -d down timen

}

sub redis_connect{

my $redis_hp = $opt_h . : . $opt_p;

eval{ $r = Redis->new( server => $redis_hp ); };

}

sub redis_set{

$r->set( redis_nagios_key => \'test\' ) || return 1;

return 0;
}

sub redis_get{

my $value = $r->get( \'redis_nagios_key\' ) || return 1;

return 0;
}

sub redis_del{

$r->del( \'redis_nagios_key\' ) || return 1;

return 0;
}

sub redis_info{

my $info_hash = $r->info;

print OK - redis server( . $opt_h . ) info:;

while ( my ($key, $value) = each(%$info_hash) ) {
print $key => $value, ;
}

}

sub redis_quit{

$r->quit();

}

 

推荐阅读
  • 翻译 | 编写SVG的口袋指南(上)
    作者:DDU(沪江前端开发工程师)本文是原文翻译,转载请注明作者及出处。简介ScalableVectorGraphics(SVG)是在XML中描述二维图形的语言。这些图形由路径,图 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Redis API
    安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
  • 7.4 基本输入源
    一、文件流1.在spark-shell中创建文件流进入spark-shell创建文件流。另外打开一个终端窗口,启动进入spark-shell上面在spark-shell中执行的程序 ... [详细]
  • 环境配置tips
    一、MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:  1、数据库名与表名是严格区分大小写的;  2、表的别名是严格区分大小写的& ... [详细]
  • 1.安装libeventyuminstalllibevent.x86_64libevent-devel.x86_64没有libevent编译memcached为出错checking ... [详细]
  • rust编程这篇文章是关于我通过解决Twitch上尚未解决的所有CtCI问题来学习Rust的经验。英国科学博物馆集团AdaLovelace的肖像Rust徽标,由Moz ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
author-avatar
雲悳蕲黇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有