问题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_interval check_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 [email protected] }
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 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注册该插件脚本/usr/local/nagios/etc/objects/commands.cfg
define command{ command_name check_mygetloadavg command_line /path/to/check_getloadavg #脚本存放的路径 }
接下来创建关于这个插件的服务...
通常最好的方式是创建一个可配置的插件脚本,另一个好的实践是捕获所有的异常,统一管理。
获取平均负载的完整插件check_getloadavg2.py
#!/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)
nagios注册该插件脚本/usr/local/nagios/etc/objects/commands.cfg
define command{ command_name check_mygetloadavg2 command_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内置了报告停机时间的功能