Nagios学习笔记

简介

Nagios是一个监视系统运行状态和网络信息的监视系统,能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等,其可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。

了解 Nagios 的关键在于,它并不是监视和跟踪“普通的”测量数据,如 CPU 使用率,该工具将所有的信息简化为“工作”、“可疑的”和“故障”状态。这可以帮助操作员根据预定义的和可配置的标准,重点关注最重要和最关键的问题。

Nagios的主要功能特点:

  • - 监视网络服务 (SMTP, POP3, HTTP, NNTP, PING等)
  • - 监视主机资源 (进程, 磁盘等)
  • - 简单的插件设计可以轻松扩展Nagios的监视功能
  • - 服务等监视的并发处理
  • - 错误通知功能 (通过email, pager, 或其他用户自定义方法)
  • - 可指定自定义的事件处理控制器
  • - 可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等
  • - 可以通过手机查看系统监控信息

 

安装

这里只介绍一下源码安装: 依赖工具:

  • gcc
  • make
  • autoconf
  • automake

  依赖库:

  • libgd
  • openssl

许多与简单网络管理协议相关的(SNMP 相关的)插件还需要 Perl 和 Net::SNMP 包。在安装和设置了 Nagios 之后,您应该可以使用缺省的 http://localhost/nagios URL 访问 Nagios。  

 

配置Nagios

在缺省情况下,所有的 Nagios 配置文件都位于 /etc/nagios 目录。可以将配置分为多个文件,每个文件用于配置中不同的部分。3.3.1版本的配置目录结构如下:

/etc/nagios/
nagios.cfg #nagios主配置文件,引用其他配置文件
cgi.cfg #nagios Web界面相关配置
resource.cfg #全局变量定义配置
objects/
commands.cfg #命令、插件注册配置
contacts.cfg #联系人和联系人组配置
localhost.cfg #监控本机资源示例配置
printer.cfg #网络打印机示例配置
switch.cfg
templates.cfg # 配置模板
timeperiods.cfg
windows.cfg # windows主机配置示例
hosts.cfg #自定义的所有主机和主机组配置
services.cfg #自定义的所有服务配置

联系人配置

首先需要设置的组件是联系人和联系人组。联系人是那些接收主机或服务停止运行的通知的人员。在缺省情况下,Nagios 提供了寻呼机和电子邮件通知方式。通过扩展,允许通过 Jabber 和许多其他方式进行通知,这在某些情况下是非常方便的。

联系人存储在 contacts.cfg 文件中,并且定义如下:

define contact{
contact_name jdoe
alias John Due
service_notification_commands notify-by-email
host_notification_commands host-notify-by-emailes
email john.doe@yourcompany.com
}

 

联系人组配置

将联系人划分成组:在主机或服务状态发生更改时,Nagios 并不指定需要通知的人员,而是通知相关的组。有时甚至可以对某个人员进行多次定义,以指定不同的通知命令或地址,然后向用户所在的联系组添加联系该人员的所有方式

define contactgroup{
contactgroup_name server-admins
alias Server Administrators
members jdoe,albundy
}


 

新增主机配置

下一个步骤是配置需要由 Nagios 进行监视的主机。应该添加所有包含监视或检查是否正处于活动状态的服务的主机。存储主机信息的配置文件是 hosts.cfg。

下面是一个主机定义的示例:

define host{
host_name ubuntu_1_2
alias Ubuntu test server
address 192.168.1.2
check_command check-host-alive
max_check_attempts 20
notifications_enabled 1
event_handler_enabled 0
flap_detection_enabled 0
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
notification_interval 60
notification_period 24x7
notification_options d,u,r
}

新增服务配置

Nagios 配置的最后一步是为配置的主机定义服务。这个示例使用了一个预定义的“ping”Nagios 插件,它将发送 Internet 控制信息协议(Internet Control Message Protocol,ICMP)回显请求以确定主机是否有响应。

define service{
use service-template
host_name ubuntu_1_2
service_description PING
check_period 24x7
contact_groups server-admins
notification_options c,r
check_command check_ping!300.0,20%!1000.0,60%
}

在完成了这个配置工作之后,重新启动您的 Nagios 守护进程,稍等几秒钟让 Nagios 进行初始化,然后,证实 Web 管理接口中 ping 服务的可见性。  

 

编写 Nagios 插件

Nagios 的最激动人心的方面是可以轻松地编写您自己的插件,只需要了解一些简单的指导原则即可。为了管理插件,Nagios 每次在查询一个服务的状态时,产生一个子进程,并且它使用来自该命令的输出和退出代码来确定具体的状态。退出状态代码的含义如下所示:

  • OK —退出代码 0—表示服务正常地工作。
  • WARNING —退出代码 1—表示服务处于警告状态。
  • CRITICAL —退出代码 2—表示服务处于危险状态。
  • UNKNOWN —退出代码 3—表示服务处于未知状态。

最后一种状态通常表示该插件无法确定服务的状态。例如,可能出现了内部错误。

下面提供了一个 Python 示例脚本,用于检查 UNIX® 平均负载。它假定 2.0 以上的级别表示警告状态,而 5.0 以上的级别表示危险状态。这些值都采用了硬编码的方式,并且始终使用最近一分钟的平均负载。

#!/usr/bin/env python
import os,sys
(d1, d2, d3) = os.getloadavg()
if d1 >= 5.0:
print "GETLOADAVG CRITICAL: Load average is %.2f" % (d1)
sys.exit(2)
elif d1 >= 2.0:
print "GETLOADAVG WARNING: Load average is %.2f" % (d1)
sys.exit(1)
else:
print "GETLOADAVG OK: Load average is %.2f" % (d1)
sys.exit(0)

在编写了这个小的可执行插件之后,接下来是使用 Nagios 注册该插件,并创建一个检查平均负载的服务定义。

这项工作也是非常简单的:使用下面的内容创建一个名为 /etc/nagios-plugins/config/mygetloadavg.cfg 的文件,根据下面的示例,向 services.cfg 文件添加一个服务。请记住,必须在 hosts.cfg 配置文件中定义 localhost。

使用Nagios注册插件

define command{
command_name check_mygetloadavg
command_line /path/to/check_getloadavg
}

 

插件服务配置

define service{
use service-template
host_name localhost
service_description LoadAverage
check_period 24x7
contact_groups server-admins
notification_options c,r
check_command check_mygetloadavg
}

 

编写一个完整的插件

前面的示例说明了一个采用“硬编码”方式插件的限制,它不支持运行时配置。在实际中,通常最好的方式是创建一个可配置的插件。通过这种方式,您可以创建和维护一个插件,使用 Nagios 将其注册为单个插件,并且传递参数以便为特定的情况自定义警告和危险水平。下一个示例还包括一则使用消息;经过证实,对于由几个不同的开发人员或者管理员所使用或维护的插件,这是非常有价值的。

另一个好的实践是捕获所有的异常,并后退以报告 UNKNOWN 服务状态,以便 Nagios 能够正确地管理有关这个情况的通知。那些允许异常“失败”的插件通常会退出,并返回值 1;对于 Nagios,这表示一个 WARNING 状态。请确保您的插件能够正确地区分 WARNING 和 UNKNOWN。请注意,例如,在将其作为 UNKNOWN 结果处理可能出现错误的情况下,通常可以禁用至少某些 WARNING 通知。

用 Python 编写一个插件

上述的建议—运行时参数化、一则使用消息,以及经过改进的异常处理—将得到示例插件的源代码,这段代码要比前面的长几倍。但是您可以更安全地对错误进行处理,并且能够在更广泛的范围内重用该插件。

#!/usr/bin/env python

import os
import sys
import getopt

def usage():
print """Usage: check_getloadavg [-h|--help] [-m|--mode 1|2|3] \
[-w|--warning level] [-c|--critical level]"

Mode: 1 - last minute ; 2 - last 5 minutes ; 3 - last 15 minutes"
Warning level defaults to 2.0
Critical level defaults to 5.0
"""
sys.exit(3)

try:
options, args = getopt.getopt(sys.argv[1:],
"hm:w:c:",
"--help --mode= --warning= --critical=",
)
except getopt.GetoptError:
usage()
sys.exit(3)

argMode = "1"
argWarning = 2.0
argCritical = 5.0

for name, value in options:
if name in ("-h", "--help"):
usage()
if name in ("-m", "--mode"):
if value not in ("1", "2", "3"):
usage()
argMode = value
if name in ("-w", "--warning"):
try:
argWarning = 0.0 + value
except Exception:
print "Unable to convert to floating point value\n"
usage()
if name in ("-c", "--critical"):
try:
argCritical = 0.0 + value
except Exception:
print "Unable to convert to floating point value\n"
usage()

try:
(d1, d2, d3) = os.getloadavg()
except Exception:
print "GETLOADAVG UNKNOWN: Error while getting load average"
sys.exit(3)

if argMode == "1":
d = d1
elif argMode == "2":
d = d2
elif argMode == "3":
d = d3

if d >= argCritical:
print "GETLOADAVG CRITICAL: Load average is %.2f" % (d)
sys.exit(2)
elif d >= argWarning:
print "GETLOADAVG WARNING: Load average is %.2f" % (d)
sys.exit(1)
else:
print "GETLOADAVG OK: Load average is %.2f" % (d)
sys.exit(0)

为了使用这个新的插件,需要使用下面的方法来注册 /etc/nagios-plugins/config/mygetloadavg2.cfg:

define command{
command_name check_mygetloadavg2
command_line /path/to/check_getloadavg2 -m $ARG1$ -w $ARG2$ -c $ARG3$
}

另外,根据下面的示例,在 services.cfg 文件中添加或者更改服务条目。请注意,使用感叹号 ! 来分隔插件参数。与前面一样,必须在 hosts.cfg 配置文件中定义 localhost。

define service{
use service-template
host_name localhost
service_description LoadAverage2
check_period 24x7
contact_groups server-admins
notification_options c,r
check_command check_mygetloadavg2!1!3.0!6.0
}

  参考资料: http://www.ibm.com/developerworks/cn/aix/library/au-nagios/

http://yahoon.blog.51cto.com/13184/41778      

posted @ 2011-11-24 18:30  残夜  阅读(738)  评论(0编辑  收藏  举报