zhou.xingbo 发表于 2013-2-7 09:12:37

nagios的工作场景及使用说明

<div style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff; margin: 8px;">问题1:nagios配置文件说明?
答:
commands.cfg是监控命令的配置文件
与其相关配置说明/usr/local/nagios/etc/objects/commands.cfg
define command{command_name #定义命令的简称command_line #定义当服务进行时Nagios要执行的动作。在命令执行以前,所有合法的宏都要被他们的值代替。} 
contacts.cfg是监控报警联系人的配置文件
与其相关配置说明/usr/local/nagios/etc/objects/contacts.cfg
#这段是用来定义一个联系人define contact{contact_name #这个指令用来定义一个联系人的简称。他会在定义contactgroup时被引用到。在相应的环境中,宏定义$CONTACTNAME$会包含这个值。alias                  #这个指令是为了定义一个联系人的具体的描述。在相应的环境中,宏定义$CONTACTALIAS$会包含这个值。host_notification_period      #这个指令是为了定义,能够通知Contact中定义的那个简称联系人,关于主机有问题或者恢复正常状态的时间段。你可以把他想象成能够通知Contact关于主机的在线时间。service_notification_period#这个指令是为了定义,能够通知Contact中定义的那个简称联系人,关于服务的问题或恢复正常的时间段。host_notification_options      #这个指令为了定义主机在什么状态下会给联系人发通知。各个参数的描述如下:d=当主机的状态处于down时,发送通知;f=当主机状态处于stop时发送通知。r=当主机恢复up状态时发送通知。n=什么状态下都不发送通知(w-warning , u-unknown,c-critical,r-recovery;d-down,u-unreachable)。service_notification_options #这个指令为了定义服务在什么状态下会给联系人发通知。各个参数的描述如下:w=当服务处于警告状态时发送通知 u=当服务的状态处于unknown时,发送通知;f=当服务状态处于启动和停止时发送通知。c=当服务处于Critical状态时发送通知。n=什么状态下都不发送通知。host_notification_commands   #这个指令是为了定义一个通知联系人关于主机问题或恢复正常的联系手段的一个列表。多个手段之间用逗号隔开。service_notification_commands #这个指令是为了定义一个通知联系人关于服务问题或恢复正常的联系手段的一个列表。多个手段之间用逗号隔开。email                        #这个指令是为了定义联系人的email地址。这个将取决于你是如何定义你的notification commands.它可以用来给联系人发送紧急邮件。在相应的环境中。宏定义$CONTACTEMAIL$将会包含它的值。} 
 联系人组
define contactgroup{ #这段是用来定义一个联系人组。contactgroup_name #联系组名称,通常定义得较短alias #联系组别名,通常定义得较长members #联系组成员} 
timeperiods.cfg是时间定义配置文件
与其相关配置说明/usr/local/nagios/etc/objects/timeperiods.cfg
define timeperiod{timeperiod_name#时间段名称,通常定义得较短alias                #时间段别名,通常定义得较长sunday         #星期日时间段monday          #星期一时间段tuesday          #星期二时间段wednesday   #星期三时间段thursday      #星期四时间段friday            #星期五时间段saturday      #星期六时间段} 
localhosts.cfg是被监控主机配置和被监控服务配置的文件
与其相关配置说明/usr/local/nagios/etc/objects/localhost.cfg
#这段是用来定义一个被监控的主机define host{host_name localhost #用这个名字在host group和service里标识一个主机alias localhost #用来定义主机的一个完整名字或描述address 127.0.0.1 #用来定义主机的地址,在有DNS服务器的,也可以用域名 #用来定义在检测返回结果不是OK时,nagios重检测命令的次数。设置这个值为1会导致nagios一次也不重试就报警max_check_attempts 1#用一个time period项的名字来定义在哪段时间内激活对这台主机的主动检测。time period是定义在别的文件里的配置项,我们可以在这里用名字来引用它check_period name #这是一个联系组列表。我们用联系组的名字来引用她们。多个联系组间用“,”来分隔contact_groups name #这一项用来定义当一个服务仍然down或unreachable时,我们间隔多久重发一次通知给联系组notification_interval#这一项用一个time period定义来标识什么时间段内给联系组送通知。这里我们用time period定义的名字来引用她notification_period#这一项用来决定发送通知的时机。选项有:d = 当有down状态时发送通知,u = 当有unreachable状态时发送通知, r = 当有服务recoveries时发送通知,f = 当主机启动或停机时发送通知。如果你给一个n选项,那么永远不会发送通知notification_options } 
 主机组
#这段是用来定义一个被监控的主机组define hostgroup{   hostgroup_name #主机组名称,通常定义得较短 alias #主机组别名,通常定义得较长members #主机组成员} 
服务
#这段是用来定义一个被监控的服务define service{                     host_name #主机名称service_description #服务描述check_command #执行命令max_check_attempts #最大失败尝试次数,值为1时只报警不重新检测#常规检测间隔时间,默认为60分钟(常规检测是指无论服务状态是否正常,检测次数达到“最大次数”时)normal_check_interval #失败尝试间隔时间,默认为60分钟(失败尝试是指服务状态不正常,检查次数达到“最大次数”时)retry_check_intervalcheck_period #检测时间段#当服务状态不正常时通知联系人的间隔时间,值为0时不通知联系人notification_interval notification_period #通知联系人时间段#通知联系人选项,w警告,u未知,c危急,f启动和停止,n不发送通知notification_options contact_groups #联系人组} 
服务组
#这段是用来定义一个被监控的服务组define servicegroup{               servicegroup_name #服务组名称,通常定义得较短      alias #服务组别名,通常定义得较长members #服务组成员}  cgi.cfg这个文件是与WEB相关
与其相关配置说明/usr/local/nagios/etc/cgi.cfg#去除用户验证
#去除用户验证use_authentication=0#多个用户用逗号隔开authorized_for_system_commands=nagiosadmin 
templates.cfg是模板配置文件,这里面定义了一些模板以方便用户使用
 
问题2:nagios配置步骤?
答:
1.需要设置的组件是联系人和联系人组:/usr/local/nagios/etc/objects/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@xxx.com}define contactgroup{ contactgroup_name server-admins alias Server Administrators members jdoe,albundy} 
2.进行监视的主机和定义服务:/usr/local/nagios/etc/objects/localhost.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}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服务,证实Web管理接口中ping服务的可见性。
 
问题3:如何写nagios插件?
 
答:
nagios为了管理插件,nagios每次在查询一个服务的状态时,产生一个子进程,并且它使用来自该命令的输入和退出代码来确定具体的状态。
 
退出状态代码含义
OK:退出代码是0,服务正常工作
WARNING:退出代码是1,服务处于警告状态
CRITICAL:退出代码是2,服务处于危险状态
UNKNOWN:退出代码是3,服务处于未知状态
 
简单实现:
工作脚本check_getloadavg.py
#!/usr/bin/env pythonimport 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注册该插件脚本/usr/local/nagios/etc/objects/commands.cfg
define command{      command_name    check_mygetloadavgcommand_line    /path/to/check_getloadavg #脚本存放的路径} 
接下来创建关于这个插件的服务...
 
通常最好的方式是创建一个可配置的插件脚本,另一个好的实践是捕获所有的异常,统一管理。
获取平均负载的完整插件check_getloadavg2.py
#!/usr/bin/env pythonimport osimport sysimport getoptdef 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.0Critical level defaults to 5.0"""    sys.exit(3)try:    options, args = getopt.getopt(sys.argv,      "hm:w:c:",      "--help --mode= --warning= --critical=",      )except getopt.GetoptError:    usage()    sys.exit(3)argMode = "1"argWarning = 2.0argCritical = 5.0for 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 = d1elif argMode == "2":    d = d2elif argMode == "3":    d = d3if 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) 
nagios注册该插件脚本/usr/local/nagios/etc/objects/commands.cfg
define command{      command_name    check_mygetloadavg2command_line    /path/to/check_getloadavg2 -m $ARG1$ -w $ARG2$ -c $ARG3$} 
接下来创建关于这个插件的服务(注意:使用感叹号!来分隔插件参数)
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} 
ps:
添加启动服务
rc-update add nagios default
打开/usr/local/nagios/share/config.inc.php,把:
$cfg['cgi_base_url']='/nagios/cgi-bin'
改为(实际情况修改):
$cfg['cgi_base_url']='/cgi-bin'
支持故障时的事件定义,可以先行解决一些问题。
可以很容易地定制开发自己需要的服务监测插件。
Nagios core 只是个Daemon,负责调度,真正的检测操作还是通过Nagios plugins来实现的。
cpu是否超载?
网络接口是否满负荷?
nagios将所有的信息简化为‘工作,可疑,故障’
这可以帮助操作员根据预定义的和可配置的标准,重点关注最重要的,最关注的问题。
nagios内置了报告停机时间的功能
页: [1]
查看完整版本: nagios的工作场景及使用说明