设为首页 收藏本站
查看: 1390|回复: 0

分析Nagios服务与命令还有插件的关系(四)(转载)

[复制链接]

尚未签到

发表于 2017-4-20 10:09:35 | 显示全部楼层 |阅读模式
  之前把Nagios的基本安装和配置都讲完了,但是Nagios最有趣的地方才刚刚开始。就是“服务”-“命令”-“插件”这3者的关系,体现了Naigos在监测工作中的原理,这一话就是特别用来分析其中的关系了。

一.监测服务的定义:
首先看看在localhost.cfg中定义的一个本地系统根分区空间使用状况监测服务:
------------------------------------------------------------------
define service{
use  local-service
host_name  localhost
service_description  Root Partition
check_command  check_local_disk!20%!10%!/
}
------------------------------------------------------------------
可以发现这个服务的定义名叫做Root Partition,而这个Root Partition的实际功能则是在于check_command这个配置项中指定的参数,在这里它后面的参数是“check_local_disk!20%!10%!/”,那么这一串到底是什么意思呢?其实它应该被分开成两部分,即“check_local_disk”和“!20%!10%!/”。


二.监测命令的定义:
先来说说前面的那个“check_local_disk”,这就是Nagios的监测服务所使用到的“命令”,而这个命令的具体内容是在commands.cfg文件中定义的,commands.cfg这个文件就是专门定义命令用的配置文件。而在localhost.cfg或者其他文件中定义服务的时候所用到的命令,都必须是在command.cfg中定义过的命令。在commands.cfg中“check_local_disk”是如下定义的:
------------------------------------------------------------------
define command{
command_name  check_local_disk
command_line  $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
}
------------------------------------------------------------------
与其他的功能对象定义文件的格式相似:
------------------------------------------------------------------
define command{
通过define关键字command来表示一个命令定义段,定义内用在两个大括号内,并且一个属性必须占一行。如果要定义多个命令的话要写多个define command {}段。

command_name  check_local_disk
通过command_name来定义命令的名字。在服务的定义当中,只能引用这种在commands.cfg中定义过的命令名。

command_line  $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
通过command_line来定义该命令的所使用到的插件程序以及参数配置格式。
}
------------------------------------------------------------------


三.Nagios的插件程序:
这里还要说明一下command_line后面的命令格式是怎么回事。command_line后面指定了定义命令时所使用到的Nagios插件程序以及相关的参数格式。那么,这些插件是如何指定的呢?
这些插件在安装了Nagios-plugins插件程序包后,就会在Nagios的主路径下的libexec里找到相应的插件程序。
浏览插件程序目录
[iyunv@KCentOS5C ~]# ls /usr/local/nagios/libexec/
------------------------------------------------------------------
check_apt  check_flexlm  check_load  check_overcr  check_swap
check_breeze  check_ftp  check_log  check_ping  check_tcp
check_by_ssh  check_http  check_mailq  check_pop  check_time
check_clamd  check_icmp  check_mrtg  check_procs  check_udp
check_cluster  check_ide_smart  check_mrtgtraf  check_real  check_ups
check_dhcp  check_ifoperstatus  check_nagios  check_rpc  check_users
check_dig  check_ifstatus  check_nntp  check_sensors  check_wave
check_disk  check_imap  check_nntps  check_simap  negate
check_disk_smb  check_ircd  check_nt  check_smtp  urlize
check_dns  check_jabber  check_ntp  check_spop  utils.pm
check_dummy  check_ldap  check_nwstat  check_ssh  utils.sh
check_file_age  check_ldaps  check_oracle  check_ssmtp
------------------------------------------------------------------
这些就是Nagios-plugins的所有插件程序。之前在定义check_local_disk这个命令时所使用到的插件程序ckeck_disk也在其中。这些插件程序都是一个一个的独立的二进制可执行程序,也就是说,他们可以独立运行,有自己参数和选项,当然也有帮助。这里做一个示范:

察看check_disk插件程序的使用
[iyunv@KCentOS5C ~]# /usr/local/nagios/libexec/check_disk -h
------------------------------------------------------------------
check_disk v1793 (nagios-plugins 1.4.10)
Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>
Copyright (c) 1999-2006 Nagios Plugin Development Team
<nagiosplug-devel@lists.sourceforge.net>
This plugin checks the amount of used disk space on a mounted file system
and generates an alert if free space is less than one of the threshold values

Usage: check_disk -w limit -c limit [-W limit] [-K limit] {-p path | -x device}
[-C] [-E] [-e] [-g group ] [-k] [-l] [-M] [-m] [-R path ] [-r path ]
[-t timeout] [-u unit] [-v] [-X type]
这个就是check_disk的使用格式。

Options:
-h, --help
显示帮助信息。

-V, --version
显示版本信息。

-w, --warning=INTEGER
设定产生告警的磁盘个数的阀值,低于该磁盘数量则产生告警通知。

-w, --warning=PERCENT%
设定产生告警的百分比阀值,可用空间低于该百分比值就产生告警通知。

-c, --critical=INTEGER
设定产生严重告警的磁盘个数的阀值,低于该磁盘数量则产生严重告警通知。

-c, --critical=PERCENT%
设定产生严重告警的百分比阀值,可用空间低于该百分比值就产生严重告警通知。
......
------------------------------------------------------------------


四.Nagios的资源文件:
通过上面的分析就一定能够了解后“$USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$”的大致意思了,就是调用check_disk插件程序,并且指定了调用该执行程序的选项-w、-c、-p,并且$ARG1$、$ARG2$、$ARG3$分别是这3个选项后面跟加的参数值,但是这些只是参数变量,那么具体的参数值在哪里设定呢?让我们回头再看看在服务中定义的“check_local_disk!20%!10%!/”后面的“20%!10%!/”,后半部分就是预先指定的参数值了,通过感叹号“!”来分隔参数。

这样看或许会相对容易理解:
------------------------------------------------------------------
check_local_disk  !  20%  !  10%  !  /
$USER1$/check_disk  -w  $ARG1$  -c  $ARG2$  -p  $ARG3$
------------------------------------------------------------------
也就是说20%和10%是正好匹配-w和-c两个选项的参数值,而最后-p选项的参数值使用缺省,这里就通过“/”来表示。

至于$USER1$/check_disk这个变量路径是在哪里指定的呢?其实这个就是定义在Nagios的资源文件resource.cfg里面了。
[iyunv@KCentOS5C ~]# vi /usr/local/nagios/etc/resource.cfg
------------------------------------------------------------------
# Sets $USER1$ to be the path to the plugins
$USER1$=/usr/local/nagios/libexec
这里就定义$USER1$这个路径变量,用来帮助Nagios找到自己的plugins插件程序的位置。
------------------------------------------------------------------


五.Nagios服务与命令还有插件的关系的总结:
基本上要分为三个步骤
1.首先要在确认在libexec/目录下的插件程序的使用方式,以及相关参数选项的格式。如果对某个插件程序的使用方法不是很明确的话,可以到插件目录下使用-h参数来执行插件程序,以了解和掌握该插件的使用方式。

2.其次要在commands.cfg命令文件中定义命令,指定所用到的插件,并且写好会用到的选项和留出参数变量。如$USER1$/exec -a $ARG1$ -b$ARG2$ -c $ARG3$...这样。

3.最后在服务定义文件中指定定义过的命令名,加上合适的参数,每个之间通过“!”来分隔,如果一个参数当中还要分几个子参数的话,那么子参数之间通过都好“,”来分隔,最终把监测服务定义好。


六.给出一些基本常用服务与其相关命令和插件的对应关系示例:
通过比较各个配置文件当中的相关部分,可以加深理解。

1.连通监测服务:Ping指定主机。
------------------------------------------------------------------
<localhost.cfg>
define service{
use  connection-service
host_name  localhost,KCentOS5A,KCWIN2K3A,KCXP1
service_description  PING
check_command  check_ping!100.0,20%!500.0,60%
}

<command.cfg>
define command{
command_name  check_ping
command_line  $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
}

<check_ping>
Usage:check_ping -H <host_address> -w <wrta>,<wpl>% -c <crta>,<cpl>%
[-p packets] [-t timeout] [-4|-6]
-H, --hostname=HOST
host to ping
-w, --warning=THRESHOLD
warning threshold pair
-c, --critical=THRESHOLD
critical threshold pair
-p, --packets=INTEGER
number of ICMP ECHO packets to send (Default: 5)
------------------------------------------------------------------


2.连通监测服务:监测指定主机的TCP连接。
------------------------------------------------------------------
<localhost.cfg>
define service{
use  connection-service
host_name  localhost,KCentOS5A,KCWIN2K3A,KCXP1
service_description  Check TCP 80
check_command  check_tcp!80

}
<command.cfg>
define command{
command_name check_tcp
command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$
}

<check_tcp>
Usage:check_tcp -H host -p port [-w <warning time>] [-c <critical time>] [-s <send string>]
[-e <expect string>] [-q <quit string>][-m <maximum bytes>] [-d <delay>]
[-t <timeout seconds>] [-r <refuse state>] [-M <mismatch state>] [-v] [-4|-6] [-j]
[-D <days to cert expiry>] [-S <use SSL>] [-E]
-w, --warning=DOUBLE
Response time to result in warning status (seconds)
-c, --critical=DOUBLE
Response time to result in critical status (seconds)
-H, --hostname=ADDRESS
Host name, IP Address, or unix socket (must be an absolute path)
-p, --port=INTEGER
Port number (default: none)
------------------------------------------------------------------


3.本地系统监测服务:监测本地主机磁盘剩余空间。
------------------------------------------------------------------
<localhost.cfg>
define service{
use  local-service
host_name  localhost
service_description  Root Partition
check_command  check_local_disk!20%!10%!
}

<command.cfg>
define command{
command_name  check_local_disk
command_line  $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
}

<check_check_local_disk>
Usage: check_disk -w limit -c limit [-W limit] [-K limit] {-p path | -x device}
[-C] [-E] [-e] [-g group ] [-k] [-l] [-M] [-m] [-R path ] [-r path ]
[-t timeout] [-u unit] [-v] [-X type]
-w, --warning=INTEGER
Exit with WARNING status if less than INTEGER units of disk are free
-w, --warning=PERCENT%
Exit with WARNING status if less than PERCENT of disk space is free
-c, --critical=INTEGER
Exit with CRITICAL status if less than INTEGER units of disk are free
-c, --critical=PERCENT%
Exit with CRITCAL status if less than PERCENT of disk space is free
-p, --path=PATH, --partition=PARTITION
Path or partition (may be repeated)
------------------------------------------------------------------


4.本地系统监测服务:监测本地主机运行进程数。
------------------------------------------------------------------
<localhost.cfg>
define service{
use  local-service
host_name  localhost
service_description  Total Processes
check_command  check_local_procs!250!400!RSZDT
}

<command.cfg>
define command{
command_name  check_local_procs
command_line  $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
}

<check_ping>
Usage:check_procs -w <range> -c <range> [-m metric] [-s state] [-p ppid]
[-u user] [-r rss] [-z vsz] [-P %cpu] [-a argument-array]
[-C command] [-t timeout] [-v]
Required Arguments:
-w, --warning=RANGE
Generate warning state if metric is outside this range
-c, --critical=RANGE
Generate critical state if metric is outside this range
Optional Filters:
-s, --state=STATUSFLAGS
Only scan for processes that have, in the output of `ps`, one or
more of the status flags you specify (for example R, Z, S, RS,
RSZDT, plus others based on the output of your 'ps' command).
------------------------------------------------------------------

通过这一话,应该明确Nagios系统当中“服务”-“命令”-“插件”这3者之间的关系。这是了解之后远程系统监测用到的NRPE核心扩展插件的基础,如果这里对Nagios“服务”-“命令”-“插件”这3者关系概念模糊的话,会使得接下去的理解非常艰难。
  出自 http://hi.baidu.com/kouzl/blog/item/44d85ddcd6a7fca5cc1166f5.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-366719-1-1.html 上篇帖子: 用 Nagios 对你服务器全面监控(Plugis 和安装和配置) 下篇帖子: Nagios安装使用(五)----监控windows系统的”本地信息”上
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表