Nagios的插件介绍:
如果想给Nagios增加一个自己的插件,请访问:Nagios插件项目官方网站、Nagios插件开发的官方指南。
一、插件概览
作为Nagios插件的脚本或执行程序必须(至少)要做两件事:
退出时给出几种可能的返回值中的一个;
至少要给出一条输出内容到标准输出设备(STDOUT)。
对Nagios来说,插件里面做什么并不重要。自制插件可以是做TCP端口状态检测,运行某个数据库查询,检查磁盘空闲空间,或其他需要检测的内容。这取决于你想检测什么东西,这完全由你自己决定。
二、返回值
Nagios用插件的返回值来生成主机或服务的状态。下表里列出了合法的返回值以及对应的服务或主机状态。
插件返回值 | 服务状态 | 主机状态 |
---|---|---|
0 | 正常(OK) | 运行(UP) |
1 | 告警(WARNING) | 运行(UP)或宕机(DOWN)/不可达(UNREACHABLE)* |
2 | 紧急(CRITICAL) | 宕机(DOWN)/不可达(UNREACHABLE) |
3 | 未知(UNKNOWN) | 宕机(DOWN)/不可达(UNREACHABLE) |
注意:如果使能use_aggressive_host_checking选项,返回值1将使主机状态要么是宕机(DOWN)要么是不可达(UNREACHABLE)。其他情况下,返回值1将使主机状态是运行(UP)。
三、特定插件输出
最小情况下,插件要返回一行文本输出。自Nagios 3版本起,插件可以返回多行输出文本。插件可以返回性能数据以让外部应用来做后序处理。输出文本的基本格式如下:
- TEXT OUTPUT | OPTIONAL PERFDATA
- LONG TEXT LINE 1
- LONG TEXT LINE 2
- ...
- LONG TEXT LINE N | PERFDATA LINE 2
- PERFDATA LINE 3
- ...
- PERFDATA LINE N
性能数据(用下划线示意的部分)是可选的,如果插件输出文本里有性能数据,必须用管道符(|)把性能数据与其他数据分开,额外的大段输出行(用文字删除符示意的部分)同样也是可选的。
四、插件输出样例
下面看一下插件输出的样例...
案例1:只有一行文本输出(不带性能数据)
假定插件的输出文本是这样:
- DISK OK - free space: / 3326 MB (56%);
如果插件执行的是一个服务检测,整行输出都会保存在$SERVICEOUTPUT$宏里。
案例2:一行输出带性能数据
插件的输出文本中带有性能数据可给外部应用来处理。性能数据要用管道符(|)分隔开,象是这样:
- DISK OK - free space: / 3326 MB (56%); | /=2643MB;5948;5958;0;5968
如果插件执行的是一个服务检测,分隔符左侧的部分将保存在$SERVICEOUTPUT$宏里并且右侧(用下划线示意)的部分将保存在$SERVICEPERFDATA$宏里面。
案例3:多行输出(正文和性能数据都有)
插件可以输出多行文本,并且带有正文输出和性能数据,象是这样:
- DISK OK - free space: / 3326 MB (56%); | /=2643MB;5948;5958;0;5968
- / 15272 MB (77%);
- /boot 68 MB (69%);
- /home 69357 MB (27%);
- /var/log 819 MB (84%); | /boot=68MB;88;93;0;98
- /home=69357MB;253404;253409;0;253414
- /var/log=818MB;970;975;0;980
如果插件执行的是一个服务检测,第一行分隔符左侧的部分将保存在$SERVICEOUTPUT$宏里,带有下划线标识的部分(带空格)将保存在$SERVICEPERFDATA$宏里,带删除符标识的部分(不带换行符)的部分将保存在$LONGSERVICEOUTPUT$宏里(以上的下划线和删除符只是为标记文本段而用的,实际文本中不带有符号格式--译者注)。
每个宏的最终结果是这样的:
宏 | 内容 |
---|---|
$SERVICEOUTPUT$ | DISK OK - free space: / 3326 MB (56%); |
$SERVICEPERFDATA$ | /=2643MB;5948;5958;0;5968./boot=68MB;88;93;0;98./home=69357MB;253404;253409;0;253414./var/log=818MB;970;975;0;980 |
$LONGSERVICEOUTPUT$ | / 15272 MB (77%);\n/boot 68 MB (69%);\n/var/log 819 MB (84%); |
利用多行输出结果的机制,可以采取多种方式来返回性能数据:
无论什么情况都没有性能数据;
只返回一行性能数据;
只是在后序的行内返回性能数据(第一行不用的管道分隔符右侧不填内容);
利用全部的输出位置来带出性能数据。
(看起来第一行右侧部分有点"多余",真的可以不用,但其实这是作者为软件向下兼容低版本使用的插件而特意这么做的,很有必要这么做,看一下源程序就明白了。--译者注)
五、插件输出长度限制
Nagios只处理插件返回的前4KB数据内容。这样是为了防止插件返回一个上兆或上千兆的数据块给Nagios处理。这个4K的限制很容易修改,如果你想改,可以编辑一下源代码里的MAX_PLUGIN_OUTPUT_LENGTH宏定义,在源程序包的include/nagios.h.in文件里,重编译一下Nagios就可以了,其他地方不用动!
六、例子
如果想找点例子来学习开发插件,推荐去下载Nagios插件项目官方的软件包,插件代码使用多种语言(象C、Perl和SHELL脚本等)写成插件。
Nagios的插件就讲述到这里了。
【编辑推荐】