三、Nagios配置
1、Nagios默认配置文件介绍
Nagios安装完毕后,默认的配置文件在/usr/local/nagios/etc目录下,每个文件或目录含义如下所示:
文件名用途
cgi.cfg控制cgi访问的配置文件
htpasswd.user由htpasswd生成的访问控制文件
nagios.cfgNagios主配置文件
resource.cfg变量配置文件,或者叫资源文件,通过在此文件中定义的变量,以便让其他配置文件引用,如$USER1$
objects/objects是一个目录,在此目录下有很多配置文件模板。用于定义Nagios对象
objects/commands.cfg命令定义配置文件,里面定义的命令可以被其他配置文件引用
objects/contacts.cfg定义联系人和联系人组的配置文件
objects/localhost.cfg定义监控本地主机的配置文件
objects/printer.cfg定义监控打印机的一个配置文件模板,默认没有启用此文件
objects/switch.cfg定义监控路由器的一个配置文件模板,默认没有启用此文件
objects/templates.cfg定义主机、服务的一个模板配置文件,可以在其他配置文件中引用
objects/timeperiods.cfg定义Nagios监控时间段的配置文件
objects/windows.cfg监控Windows主机的一个配置文件,默认没有启用此文件
2、Nagios配置文件之间的关系
在nagios的配置过程中涉及到的几个定义有:主机、主机组,服务、服务组,联系人、联系人组,监控时间,监控命令等,从这些定义可以看出,nagios各个配置文件之间是互为关联,彼此引用的。
成功配置出一台nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,最重要的有四点:
第一:定义监控哪些主机、主机组、服务和服务组
第二:定义这个监控要用什么命令实现,
第三:定义监控的时间段,
第四:定义主机或服务出现问题时要通知的联系人和联系人组。
3、开始配置Nagios
为了维护方便,我们将Nagios各个定义对象创建独立的配置文件,文件列表及说明如下:
/internal-servers/host.cfg定义主机和主机组
/internal-servers/services.cfg定义服务
/objects/contacts.cfg使用默认的联系人和联系人祖定义文件
/objects/commands.cfg使用默认的命令定义文件
/objects/timeperiods.cfg使用默认的时间段定义文件
/objects/templates.cfg使用默认的资源引用文件
在配置之前,先理清一个思路。根据上文所列出的“Nagios配置文件之间的关系”可以有一个基本的思想,
首先,要确定我们要进行监控的主机、服务等;
其次,是怎么去监控,用什么命令去监控,这个就是在commands.cfg文件中定义了,当然默认的配置文件中基本的命令都有了;
再次,监控的服务或者主机需要在什么时间去监控?7x24的监控?这个是在timeperiods.cfg文件中定义的;
最后,当被监控的服务或状态发生变化的时候需要通知谁?这个可以再contacts.cfg文件中来指定。
有了以上思路,我们就可以开始配置了,本文档以监控一台CentOS主机的常规状态和Web服务为例;
1)templates.cfg文件详情
以下主要列出 generic-contact、generic-host、linux-server、generic-service的参数情况,其他暂不做讨论。
define contact{
name generic-contact ; 定义联系人模板名称
service_notification_period 24x7; 当服务出现异常时,发送通知的时间段,这个时间段“7x24"在timeperiods.cfg文件中定义
host_notification_period 24x7; 当主机出现异常时,发送通知的时间段,这个时间段“7x24"在timeperiods.cfg文件中定义
service_notification_options w,u,c,r,f,s; 这个定义的是“通知可以被发出的情况”w即warn,表示警告状态,u即unknown,表示不明状态,c即criticle,表示紧急状态,r即recover,表示恢复状态
host_notification_options d,u,r,f,s; 定义主机在什么状态下需要发送通知给使用者,d即down,表示宕机状态,u即unreachable,表示不可到达状态,r即recovery,表示重新恢复状态。
service_notification_commands notify-service-by-email; 服务故障时,发送通知的方式,可以是邮件和短信,这里发送的方式是邮件,其中“notify-service-by-email”在commands.cfg文件中定义
host_notification_commands notify-host-by-email; 主机故障时,发送通知的方式,可以是邮件和短信,这里发送的方式是邮件,其中“notify-host-by-email”在commands.cfg文件中定义
register 0 ; 不注册,这里是在定义一个模板
}
define host{
name generic-host; 主机模板名称
notifications_enabled 1 ; 开启通知
event_handler_enabled 1 ; 事件处理开启
flap_detection_enabled 1 ; 摆动检测开启
failure_prediction_enabled 1 ; Failure prediction is enabled
process_perf_data 1 ; 是否启用进程性能数据记录、Nagios的数据输出功能
retain_status_information 1 ; 重启时保留状态信息
retain_nonstatus_information 1 ; Retain non-status information across program restarts
notification_period24x7; 异常时通知时间段
register 0 ; 不注册
}
define host{
namelinux-server; 主机模板名称
usegeneric-host; 引用templates.cfg文件中定义的generic-host
check_period24x7; 告诉nagios检查主机的时间段
check_interval5; 检测主机时间间隔
retry_interval1; 主机检查重试间隔1分钟
max_check_attempts10; 主机异常到发送警报的时间,10个时间单位
check_command check-host-alive ; 默认的检测linux主机命令
notification_periodworkhours; 主机故障时,发送通知的时间范围,其中“workhours”在timeperiods.cfg中进行了定义
notification_interval120; 在主机出现异常后,故障一直没有解决,nagios再次对使用者发出通知的时间。单位是分钟。如果你觉得,所有的事件只需要一次通知就够了,可以把这里的选项设为0
notification_optionsd,u,r; 定义主机在什么状态下可以发送通知给使用者,d即down,表示宕机状态,u即unreachable,表示不可到达状态,r即recovery,表示重新恢复状态。
contact_groupsadmins; 指定联系人组,这个“admins”在contacts.cfg文件中定义
register0; 不注册
}
define service{
name generic-service ; 服务模板名称
active_checks_enabled 1 ; 开启主动服务检查
passive_checks_enabled 1 ; 被动服务检查
parallelize_check 1 ; Active service checks should be parallelized (disabling this can lead to major performance problems)
obsess_over_service 1 ; We should obsess over this service (if necessary)
check_freshness 0 ; 默认服务状态为未检查
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
failure_prediction_enabled 1
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
is_volatile 0 ; The service is not volatile
check_period 24x7
max_check_attempts 3
normal_check_interval 10; 硬态重新检测的时间间隔,默认为3个时间单位
retry_check_interval 2; 每隔两分钟重新检测服务直到可以确定为硬状态
contact_groups admins
notification_optionsw,u,c,r
notification_interval120; 在主机出现异常后,故障一直没有解决,nagios再次对使用者发出通知的时间
notification_period24x7; 在主机出现异常后,Nagios通知联系人的时间段
register 0
}
其他几个模板基本类似,在此不做过多解释。
2)创建host.cfg文件
#192.168.1.100#注释
define host {
use linux-server#use表示引用,也就是将主机linux-server的所有属性引用到本host定义中来,在nagios配置中,很多情况下会用到引用。
host_name server_name#定义主机名称,可以根据被监控主机的情况进行命名
alias server_alias#主机别名
address 192.168.1.100#主机IP地址
}
define hostgroup {
hostgroup_name MyServer#定义主机组名称
alias My_Server#定义主机组别名
members server_name#成员列表
}
3)修改contacts.cfg文件
define contact{
contact_name nagiosadmin#Short name of user
use generic-contact#引用templates.cfg文件中generic-contact对象定义
alias Nagios Admin#Full name of user
email ****@139.com#报警需要通知的邮件地址,本例为使用139邮箱转发邮件到手机的报警方式
}
define contactgroup{
contactgroup_nameadmins#联系人组名称
alias Nagios Administrators#别名
members nagiosadmin#成员
}
4)创建services.cfg文件
define service {
use generic-service#引用templates.cfg文件中generic-service服务对象定义
hostgroup_name MyServer#指定对主机组MyServer进行该服务监控
service_description Disk Partition#服务名称
check_command check_nrpe!check_disk#监控命令,这里使用的是nrpe方式监控磁盘使用状况,稍后讨论nrpe的使用和配置
}
其他服务监控类似,不一一详解了。
5)检测配置并启动Nagios
Nagios可以检查配置文件的正确性,使用以下命令;
#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
如果有错误,我们可以通过错误提示很快定位错误配置位置进行修改;
没有错误后,就可以启动nagios了!
#service nagios start
还有reload restart stop 操作。
6)Nagios发送邮件报警配置
Nagios发送报警有比较多的方式,如飞信、MSN、短信猫和139邮箱等。本文使用139邮箱方式,因为139邮箱的短信通知可以方便的实现手机通知。
配置主机hosts文件,在127.0.0.1后添加nagios-test.com;nagios-test.com可以自己定义
配置/etc/sysconfig/network文件,将hostname更改为nagios-test.com,可以自己定义,但是这两处必须保持一致,然后重启network服务使配置生效。
使用以下命令测试是否可以发送邮件;
#printf “This is a test mail” | mail -s “My test mail” 15800000000@139.com
在这个过程中,如果没有收到邮件,可以去查看/var/log/maillog,是否发送邮件,以及是否拒绝接收,决绝原因等。
如果以上方式可以发送邮件之后,Nagios默认配置及可以发送邮件报警。转发到手机的配置请在139邮箱里进行设置。