有谁用过 nagios check http插件 check...

Nagios check_logfiles插件的使用记录
时间: 07:41:08
&&&& 阅读:628
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&1 获取与***
链接可能会失效,建议去官网下载。
阅读官网的使用说明,但感觉还是不太明了,毕竟是英文 的,
这是开源中国上面一兄弟写的介绍,让你入门。
tar xvf check_logfiles-3.7.4.tar.gz
./configure
make && make install
***完成。
***的时候使用的是root用户,***后其实是在libexec下多了一个check_logfiles程序。
建议把该程序的owner改为nagios.nagiios.其实不改也可以,它的权限是其他组也可以执行。
chown nagios:nagios /usr/local/nagios/libexec/check_logfiles
2 我以在某节点dn42上监控datanode与nodemanager进程的日志为目标,做了一下处理
a. nagios目录/usr/local/nagios/下创建var/tmp目录,如果没有,并且权限要给nagios.nagios.
因为我们需要配置check_logfiles来存储状态文件和一些信息在这个目录里面。编译时未指定,它的默认目录可能没有访问权限。
b.创建配置文件,我放在/usr/local/nagios/etc/log.cfg
配置如下:
$seekfilesdir = ‘/usr/local/nagios/var/tmp‘;
$protocolsdir = ‘/usr/local/nagios/var/tmp‘;
$scriptpath = ‘/usr/local/nagios/var/tmp‘;
@searches = (
tag =& ‘dn logfile =& ‘/home/hadoop/app/hadoop/logs/yarn-hadoop-nodemanager-dn42pub.log‘,
rotation =& ‘yarn-hadoop-nodemanager-dn42pub.log.[0-9]‘,
criticalpatterns =& [
‘ERROR .*‘,
‘FAILURE .*‘,
我这里没有配置warningpatterns,暂时没有此需要,如果有需要可以配置上。
c.在nrpe里面配置命令:
command[check_logfiles]=/usr/local/nagios/libexec/check_logfiles -f /usr/local/nagios/etc/log.cfg
d.在nagios服务器端配置这台机器的配置文件,在原有的配置文件中添加新的服务。(原来我放在nn1上/usr/local/nagios/etc/servers/dn42pub.cfg中,只需要添加如下即可)
;;monitor hadoop datanode and nodemanager process log content
define service{
use test-service
host_name dn42pub
service_description log_check
check_command check_nrpe!check_logfiles
is_volatile
注意,我这里使用的test-service是我在template.cfg中配置的,重写了它的检查周期为一分钟,这里需要注意。
dn42端执行:service xinetd reload即可
在nagios服务器端使用命令 nagios -v /usr/local/nagios/etc/nagios.cfg
检查如果没有错误,使用service nagios reload即可。
但是我在web端看到是unknown状态,这是因为nagios用户没有对日志目录的访问权限。
遂做以下修改。
chmod 705 /home/hadoop
3。其他机器如果需要***,则可以如下操作,
直接scp /usr/local/nagios/libexec/check_logfiles targethost:/usr/local/nagios/libexec
makedir -p /usr/local/nagios/var/tmp
chown -R nagios:nagios /usr/local/nagios/var/tmp
修改nrpe.cfg 和并复制修改log.cfg即可标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/huaxiaoyao/p/5058601.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!Nagios插件编写及调试方法(shell) - CSDN博客
Nagios插件编写及调试方法(shell)
前言:&Nagios是相当不错的监控工具,被称作是“监控之神”,但同样也有“难搞死”头衔。发挥Nagios一切魅力的都是他的插件,正因为丰富多样的插件让nagios有血有肉。监控的内容不断在变化,插件也不断变化,默认的一些插件可能越来越不能满足需求,这个时候就要自己来写些插件了。
以下就是用我的第一个Nagios插件来说明编写方法和我遇到一些问题调试方法。如果你有耐心可以通篇看完,应该对第一次写的人来说会有很大帮助(如果你看不懂,可能是我写得不清楚 那就没办法了 表达能力有限)
监控普通磁盘的健康状况(普通磁盘以外还有RAID、阵列的监控是不同方法来做的,这里先不讨论,先从最简单的入手),定期进行检测,并进行报警,报警内容磁盘是否正常,不正常是什么状态。
分析编写过程:
我写脚本的前提都是先从手动成功完成,再到自动化(我想其它人的思路应该都一样的)
1、找到监控磁盘的方法
通过一番查找 smartctl 这个命令是比较不错的& centos slackware一般的默认都有这个
smartctl -H /dev/sda& 只检测状态
smartctl -i /dev/sda&& 只检测硬盘信息
smartctl -a /dev/sda 检测所有信息
2、获取检测信息
# smartctl -H /dev/sda
smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
SMART Health Status: OK
关键的最后一行说明磁盘的情况 & & & 截取& DISK_HEALTH=`smartctl -H /dev/sda | tail -1 | cut -d: -f2-& `
3、 进行关键判断
据我所知道的 smartctl 5.38& 是出以上的?果 为OK
而 smartctl 5.39 是出以下?果
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
关键词是PASSED
所以要分析判断多种情况
4、脚本编写步骤
1)了解nagios插件编写规范
Nagios的插件可以用脚本(shell、Perl)C编译后的可执行程序,但必须满足以下两件事:
A、既出时有一个返回值
B、至少向标准输出设备(STDOUT)输出一行文件。(但也不能太大,默认是4K,如果想大些,修改源程序吧,方法搜。。。)
返回值定义:
Plugin Return Code
Service State
DISK State
OK 或者PASSED
插件警告& DISK报警只分OK或者CRITICAL
DISK检测非OK 或者PASSED
2)插件编写SHELL速成法
在这里我选用我最熟悉的SHELL进行脚本编写 ,
我的速成法就是,直接去nagios exchange 去下比较成熟的比较简单的shell脚本,这样会从一开始借鉴别人好的方法,养成好的习惯,而且只要你有一点SHELL编程经验也可以很快写得像一个老手。(不过不要把自己搞晕了就行)
3)以下是我的check_disk_health.sh
#!/bin/bash# ========================================================================================# disk health&&plugin for Nagios## Written by& & : Ajian# Release& && & : 1.2.0# Creation date : # Revision date : # Description& &: Nagios plugin (script) to check disk health .#& && && && && &This script has been designed and written on Linux System.## USAGE& && && &: ./check_disk_health.sh [-d (disk)]## Exemple: ./check_cpu_stats.sh#& && && & ./check_cpu_stats.sh -d /dev/sda### HISTORY :#& &&&Release& &|& &&&Date& && &|& & Authors& && && && &|& && & Description# --------------+---------------+----------------------+-----------------------------------#&&1.0.0& && &&&| & &&&| Ajian& && && && && &&&| Create the script#&&1.2.0& && &&&| & & |&&Ajian& && && && && & | modify the script and run well ,fix a bug.# -----------------------------------------------------------------------------------------# NOTICE:#-----------------------------------------------------------------------------------------#& &&&You should have the root Permissions ,You can use sudo to realize .# -----------------------------------------------------------------------------------------& && && && && && && && && && && &&&# Nagios return codes#定义 nagios返回的状态变量STATE_OK=0STATE_WARNING=1STATE_CRITICAL=2STATE_UNKNOWN=3& && &# Paths to commands used in this script.&&These may have to be modified to match your system setup.# 定义关键的核心命令smartctl 路径 如果你的系统不是这个地址,请更改。 以下注释的是调试的信息,是自动获取命令路径的方法。SMARTCTL=&/usr/sbin/smartctl&#SMARTCTL=`which smartctl`#if [ $? -ne 0 ]; then#& && &&&echo & smartctl is found in $SMARTCTL ; Go on ... &#& && &&&echo &smartctl the command cannot find&#& && &&&exit $STATE_UNKNOWN#fi# Plugin parameters value if not define# 定义默认的检测硬盘CHECK_DISK=&/dev/sda&& && && && && && &# Plugin variable description# 插件描述信息PROGNAME=$(basename&$0)RELEASE=&Revision 1.2.0&AUTHOR=&(c) 2009 Ajian ()&# Functions plugin usage# 插件的使用方法函数print_release()&{& &&echo&&$RELEASE&$AUTHOR&}& && && && && && && && &&&print_usage()&{& && &&&echo&&&& && &&&echo&&$PROGNAME&$RELEASE&- Disk health check script for Nagios&& && &&&echo&&&& && &&&echo&&Usage: check_disk_health.sh -d /dev/sdb&& && &&&echo&&&& && &&&echo&&&&-d&&the disk (/dev/sda) && && &&&echo&&& && && & not the Hard disk partition(sda2 is wrong)&& && &&&echo&&&&-v&&check the version&& && &&&echo&&&&-h&&Show this page&& && &&&echo&&&& &&echo&&Usage:&$PROGNAME&& &&echo&&Usage:&$PROGNAME&--help&& &&echo&&&& &&exit&0}& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&print_help()&{& && &&&print_usage& && &&&echo&&&& && &&&echo&&This plugin will check disk health&&&& && &&&echo&&&& && &&&exit&0}& && && && && && && && && && && && && && && && &&&# Parse parameters# 传递参数while&[&$#&-gt&0&];&do& &&case&&$1&&in& && &&&-h&|&--help)& && && && &print_help& && && && &exit&$STATE_OK& && && && &;;& && &&&-v&|&--version)& && && && && & print_release& && && && && &&exit&$STATE_OK& && && && && &&;;& && &&&-d&|&--disk)& && && && && &&shift& && && && && &&CHECK_DISK=$1& && && && && &&#判断磁盘是否存在& && && && && &&if&[&!&-b&$CHECK_DISK&];then& && && && && && && && &echo&&$CHECK_DISK&is no exsit,Please change it && && && && && && && && &exit&$STATE_CRITICAL& && && && && &&fi& && && && && &&;;& && &&&*)&&echo&&Unknown argument: $1&& && && && &print_usage& && && && &exit&$STATE_UNKNOWN& && && && &;;& && &&&esacshiftdone#根据不同的操作进行不同的操作,这里暂时只支持Linuxcase&`uname`&in& && &&&Linux&)& && && && &&#最核心的部分 前面都是些脚本的基本功能 一个框架 因为第一个脚本牵扯到了很多东西,虽然功能很简单,& && && && &&#但折腾了我不少,在后面的分析中会具体说到 总之注意sudo用法 脚本一开始就有说哦& && && && && &&DISK_HEALTH=`$SMARTCTL&&-H&$CHECK_DISK&|&tail&-1&|&cut&-d:&-f2-&`& && && && && &&#DISK_HEALTH=&OK&& && &&&#& && & DISK_INFO=`/usr/bin/sudo $SMARTCTL -i $CHECK_DISK | grep &Device:&`& && && && && &&if&[&&$DISK_HEALTH&&=&& OK&&]||&[&&&$DISK_HEALTH&&=&& PASSED&&];then& && && && && && && && &echo&&OK -&$CHECK_DISK&status is&$DISK_HEALTH&&& && && && && && && && &#echo &OK - $CHECK_DISK status is $DISK_HEALTH | $DISK_INFO&& && && && && && && && &exit&$STATE_OK& && && && && &&else& && && && && && && && &echo&&CRITICAL -&$CHECK_DISK&status is&$DISK_HEALTH&&& && && && && && && && &#echo &CRITICAL - $CHECK_DISK status is $DISK_HEALTH | $DISK_INFO&& && && && && && && && &exit&$STATE_CRITICAL& && &&&fi& && && && &;;& && &&&*)& && && && &&&echo&&UNKNOWN:&`uname`¬ yet supported by this plugin. Coming soon !&& && && && && && && && &exit&$STATE_UNKNOWN& && && && &;;& && &&&esac
4)运行脚本
(注意:在最开始自己写的脚本是没有sudo的,以上脚本是已经调试过后的,还需要配置一些其它的东西,慢慢看吧)
给与脚本执行权限,手动执行
# ./check_disk_health.sh
OK - /dev/sda status is& OK
?果正确了,其实这个时候,高兴得太早了。 我先不说问题、继续正常的一般流程。
5、配置Nagios 调用插件
1)在远程NRPE 被监控服务器上修改nrpe.conf
# vim /usr/local/nagios/etc/nrpe.cfg
添加 command[check_sda_health]=/usr/local/nagios/libexec/check_disk_health.sh -d /dev/sda
(注意这里了,先提醒下,这里是错误的,一般是正确的,是这个脚本的特殊性造成的)
2)在Nagios 监控服务器上添加一些配置
define service{
use&&&&&&&&&&&&&&&&&&&&&&&&&&&& Disk-Health
host_name&&&&&&&&&&&&&&&&&&&&&& DB-56
servicegroups&&&&&&&&&&&&&&&&&& Disk-Health
service_description&&&&&&&&&&& check sda disk health
contact_groups&&&&&&&&&&&&&&&&& admins
check_command&&&&&&&&&&&&&& check_nrpe!check_sda_health
如果像上面定义一个服务 那么就要注意相关的定义了 ,
定义Disk-Health 模版& 把硬盘检测定义一个模版会比较好控制,因为硬盘的检测不像其它服务一样需要准确的及时性反正检测得太多可能会造成压力,一般一天检测几次就够了。
定义DB-56 主机需要定义
定义组 admins
以上这些只要***过nagios 一般都知道的了 只是强调下模版的单独定义
3)通过WEB控制检测 查看?果
?果是失败 报警CRITCTL 但是状态里面的信息都是空的& CRITCTL - /dev/sda status is
从Nagios的远程监控来看是失败的,并且没有获取到任务有用的信息。
分析可以看到,说明nrpe调用& 这个变量获取到的是为空的信息
DISK_HEALTH=`$SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
即是空的 只有一个原因,肯定是没有执行 如果执行了 肯定会有字段 不管这个字段是否相符。
但是手动执行是没有问题。
经过对smartctl的查看 原来这个命令是只允许root进行调用的。
现在需要解决的问题是:非root 用户 如何远程调用含有需要有root权限命令的脚本进行监控。
(不要小看这一句话,每一个词都是一个需要攻克的地方)
以下是调试步骤:
1)非root用户
NRPE插件是用nagios这个用户来执行的 所以要得到真实的情况需要
A: su nagios & 再执行脚本 (这个方法比较好)
B: sudo -u nagios ./check_disk_health.sh
sudo -u nagios ./check_disk_health.sh
CRITICAL - /dev/sda status is
跟远程的?果是一样的了 没有信息
2)需要有root权限
需要root权限只有一个办法就是用sudo
将DISK_HEALTH=`$SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
改为DISK_HEALTH=`/usr/bin/sudo $SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
(最后发现这时加sudo 并不是关键 关键是很行脚本时用sudo )
?果:sudo -u nagios ./check_disk_health.sh
需要输入密码 &sudo不用输入密码的方法
修改sudo配置文件
执行 visudo
nagios ALL=(ALL) NOPASSWD:/usr/local/nagios/libexec/check_disk_health.sh
建议:最好进行sudo的一些控制,很多网方法就是nagios ALL=NOPASSWD:ALL
/usr/bin/sudo check_disk_health.sh
OK - /dev/sda status is OK
那么在nrpe.conf配置文件中需要添加sudo
command[check_sda_health]=/usr/bin/sudo /usr/local/nagios/libexec/check_disk_health.sh
最开始那个是错误的 注意啊 这个是需要添加/usr/bin/sudo 就是说只要脚本中涉及到提升到root权限的命令那么就要用这个
3)远程调用
远程调用方法:./check_nrpe -H 192.168.0.56 -c check_sda_health
同上如果想模拟真实环境请切换到相应的执行用户 su nagios 再执行以上操作
结果: & NRPE: Unable to read output
这个错误的原因一定要明白,之所以报这个错意思是说NRPE没有获取到任何信息,也说是写脚本之前说的其中第二条规范
问题:在没有任何信息的情况下怎么来获取NRPE执行的日志呢
就是要确定问题在哪,经过一大番的查找眼睛偶尔看到一个有趣的小方法
修复nrpe.conf配置文件 在要检查的命令后面添加&&/tmp/output 2&&1 将错误导出到文件中进行查看
command[check_sda_health]=/usr/bin/sudo /usr/local/nagios/libexec/check_disk_health.sh -d /dev/sda &&/tmp/output 2&&1
重记nrpe服务
远程调用 结果当然还是NRPE: Unable to read output
查看/tmp/output
sudo: sorry, you must have a tty to run sudo
有错误就简单了 &原来这个是默认不允许sudo 在后端进行
注释Defaults&requiretty 就OK了
结果通过WEB查看也正确了。
(注意:注释后 检测仍然会是Unable 不过看/tmp/output就会有正确的?果,所以有正确的?果后,一定要去掉 &&/tmp/outpt 2&&1 信息都导到文件中了 nagios还是得不到任何消息。)
一个脚本执行成功后,就是大批量应用,用生产环境验证,出现问题继续调试。
以上为所有的分析调试方法。如果你看到最后一步了,说明你很有耐心,你也一定会成功的,至于写得好与坏、对与错请尽管说,这不会影响你的成功。呵呵。
本文已收录于以下专栏:
相关文章推荐
Nagios(http://www.nagios.org/)是一个开放源代码的主机、服务和网络的监控平台。它被广泛使用在企业的IT部门中,负责企业核心系统营运情况的监控工作。    CIC对网络口碑的...
2014年元旦,下班回来,洗涮完毕,床上一躺,腿一盘,笔记本一放,开搞,必须整明白nagios的很多方面的东西。昨晚搞定***配置,报警等东西,今天搞定了自定义添加服务用的是nagios已有的插件che...
上下文:我们平台的监控系统用的是cacti+nagios。之前没有加流量异常报警设置,cacti上到是有插件可以时间报警,但是无法使用我们自己的短信接口(nagios用的购买的短信接口),所以想自己写...
Nagios 系统提供了一个插件NRPE。Nagios 通过周期性的运行它来获得远端服务器的各种状态信息。它们之间的关系如下图所示:
Nagios 通过NRPE 来远端管理服务
1. Nagio...
脚本编写步骤
1)了解nagios插件编写规范
Nagios的插件可以用脚本(shell、Perl)C编译后的可执行程序,但必须满足以下两件事:
A、既出时有一个返回值
B、至少向标准输出设备...
部署过很多次nagios监控系统。但此次部署时,出现nrpe调用脚本的执行结果和本地执行不一致的情况。具体如下:
以gmond的为例:
在被监控主机上执行gmond的监控脚本
显示结果为OK...
nagios插件
作为一款开源的免费网络监视工具,Nagios能有效监控Windows、Linux和Unix的主机和服务状态、交换机路由器等网络设置。在系统或服务状态异常时发出邮件或短信报警,在状态恢复后发出正常的邮件...
nagios插件
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)python Nagios的redis监控插件 check_redis.py - 为程序员服务
为程序员服务
Nagios的redis监控插件 check_redis.py
最近写的简单监控redis-server的nagios插件,请大家多多拍砖
使用python3 ,由于用了argparse,2.7以后版本才有
使用redis-py API
使用前执行:
git clone /andymccurdy/redis-py.git
python3 redis-py/setup.py install
附赠nagiosgraph绘图模版
CHECK_REDIS
OK - |MEMORY USEAGE 55%; CURRENT CONNECTIONS IS 177
/perfdata:MEMORY USEAGE ([.\d]+)%; CURRENT CONNECTIONS IS ([.\d]+)/
and push @s, [ 'REDIS',
[ 'MEMORY_USAGE', GAUGE, $1 ],
[ 'CURRENT_CONNS', GAUGE, $2 ] ];
!/usr/local/bin/python3
check_redis.py v0.1
Check Redis Server plugin for Nagios.
This Plugin requires the Redis-py API. /andymccurdy/redis-py.git
This Plugin was tested only in the python 3.2.3
import sys
import argparse
import redis
#SET NAGIOS EXIT STATUS CODE
#INITIALIZE SYS ARGUMENTS PARSER
parser = argparse.ArgumentParser()
parser.add_argument('-H', '--host', help='Redis Server IP Address')
parser.add_argument('-p', '--port', type=int, default=6379, help='Redis Service Port default:6379')
parser.add_argument('-d', '--dbid', type=int, default=0, help='Redis Database ID Number default:0')
parser.add_argument('-w', '--warning', type=int, default=80, help='Threshold Warning Percent default:80')
parser.add_argument('-c', '--critical', type=int, default=95, help='Threshold Critical Percent default:95')
parser.add_argument('-v', '--verbose',action=&count&, help='Increase Output Verbosity Example:-v -vv')
args = parser.parse_args()
rHost = args.host
rPort = args.port
rWarn = args.warning
rCrit = args.critical
rDbid = args.dbid
#SET REDIS CONNECTION
rConn = redis.Redis(host=rHost, port=rPort, db=rDbid, socket_timeout=3)
if rConn.ping():
GET SOME VALUES OF SERVER STATUS
rConf = rConn.config_get()
rConfMaxmem = int(rConf['maxmemory'])
rInfo = ()
rInfoCurrmem = int(rInfo['used_memory'])
rInfoCurrconns = rInfo['connected_clients']
rInfoDbkeys = rInfo['db{}'.format(rDbid)]['keys']
rInfoMemusage = int(rInfoCurrmem / rConfMaxmem * 100)
CHECK OUTPUT IF VERBOSITY IS CALLED
if args.verbose == 2:
rOutput = rInfo.items()
elif args.verbose == 1:
rOutput = 'SET MAX MEMORY IS {}; CURRENT USED MEMORY IS {}; CURRENT CONNECTIONS IS {}; {}KEYS IN DB{}'.format(rConfMaxmem, rInfoCurrmem,
rInfoCurrconns, rInfoDbkeys, rDbid)
rOutput = 'MEMORY USEAGE {}%; CURRENT CONNECTIONS IS {}'.format(rInfoMemusage, rInfoCurrconns)
#DECIDE THE MEMORY USAGE STATUS
if rInfoMemusage &= rCrit:
print('CRITICAL - |{}'.format(rOutput))
sys.exit(ST_CR)
elif rInfoMemusage &= rWarn:
print('WARNING - |{}'.format(rOutput))
sys.exit(ST_WR)
print('OK - |{}'.format(rOutput))
sys.exit(ST_OK)
print('PROBLEM IN CONNECTING SERVER')
sys.exit(ST_UK)
#该片段来自于
您可能的代码
相关聚客文章
荣誉:1420
相关专栏文章

参考资料

 

随机推荐