Notifications
Notification配置,在nagios中目的是用于定义什么时候应该发出通知,并且谁应该接收这些通知。
什么时候通知应该发生
- 当状态变为hard状态时。
- 当一个监控状态是hard且是non-ok状态时,自从最近的一个通知被发出到notification的间隔时间过去,那么就该再发起一个通知。
- 有一个不发出的特殊情况:当主机的状态是hard non-ok状态,这个主机上的services监控的通知将不会发送出去。因为host已经是不可用状态,其有关系的宿主关系肯定会作为一个影响维度,而不发出通知。
谁会收到通知
当然是contac定义中的联系人。这些联系人被引用在,其它定义中,如host or services的contact_groups设置。这些contact group中的用户将被作为发送通知的对象。因为一个contact可以在多个group中,所以nagios会进行去重,不会发送重复通知给同一用户。
通知要经历的层层过滤关卡
通知要被发送出去是要经历层层关卡的。有多个维度来限制发送这个动作。且这多个维度是有顺序的,有优先级的。
-
程序全局:enable_notifications控制全局。
-
service和host层面定义就有5层:
- 设置了schedule downtime,在这个期间是不会发送消息。如果是services的通知,如果所在的host也有shcedule downtime,那么host的和service的时间段取并集。(Tips: schedule downtime是通过web cgi设置)
- 设置了flapping,flapping即状态波动期间。nagios定义了波动期间。如果是波动期间,除了波动通知发送给contact联系人,其它的通知都会被波动说抑制,不会发送给contact。(Tips:什么是波动?波动是一个过程积累状态,就是存在一个队列,这个队列存储着最近21条检测状态,通过计算这21条中出现了几次状态变迁,然后将这个次数占21条的百分比,得到这个百分比。通过这个百分比来与设置的高低波动阈值进行不计较,如果在阈值区间内,那么说明在波动。如果该服务以前未发生过波动,并且计算的值等于或大于较高的波动阈值,则Nagios Core认为该服务才刚刚开始波动。
如果该服务以前曾发生过震荡,并且计算的值低于震荡下限阈值,则Nagios Core会认为该服务刚刚停止震荡。) - 每个services or hosts 自定义的通知设置。哪些状态才可以通知等。如果不设置将不会发送通知。
- 每个services or hosts 也定制了notification_period。只有在这个时间内才会发送通知
- 每个services or hosts 定制了通知间隔时间,满足通知间隔时间才会发出这个通知,避免发送频率过高。
-
Contac filter:在联系人,即接受通知方设置关卡
- 每个contact 客户定义接受什么级别的通知。
- 权值计算,会有一个最小权值对于contact联系人,如果检测的权值小于最小权值,那么通知将不会到达联系人。权值是怎么计算的呢?对于host的检测,权值会加上host上的所有服务的权值。minimum_importanc最小权值如果没有设置,则为0
- 每一个contact会有一个notification_period来通过时间限制,只有在这个时间段才会发送通知。
Nagios发送通知的方式
发送通知的方式可以是任意的,可以是电话,email,即时通信IM, 声音告警等,怎样去发送也就取决于notification commands通知命令。
默认是定义了一个内置的电子邮件通知命令。命令的定义是在yourpath/nagios/etc/objects/commands.cfg配置文件中。
nagios通知类型
value | description |
---|---|
PROBLEM | 服务或主机刚刚进入(或仍处于)问题状态。 如果这是服务通知,则表示该服务处于“警告”,“未知”或“严重”状态。 如果这是主机通知,则表示主机处于DOWN或UNREACHABLE状态。 |
RECOVERY | 服务或主机恢复已发生。 如果这是服务通知,则意味着该服务刚刚返回到OK状态。 如果是主机通知,则表示主机刚刚返回到UP状态。 |
ACKNOWLEDGEMENT | 该通知是针对主机或服务问题的确认通知。 确认通知是通过Web界面由特定主机或服务的联系人发起的。 |
FLAPPINGSTART | The host or service has just started flapping. |
FLAPPINGSTOP | The host or service has just stopped flapping. |
FLAPPINGDISABLED | The host or service has just stopped flapping because flap detection was disabled.. |
DOWNTIMESTART | The host or service has just entered a period of scheduled downtime. Future notifications will be supressed. |
DOWNTIMESTOP | The host or service has just exited from a period of scheduled downtime. Notifications about problems can now resume. |
DOWNTIMECANCELLED | The period of scheduled downtime for the host or service was just cancelled. Notifications about problems can now resume. |
自制通知,nagios所提供的接口规范
这里的接口规范是广义的。也就是nagios提供的所有通知可用的资源都算作提供的接口。包括但不限于相关macro
内置的邮件通知命令,如下定义:
# 'notify-host-by-email' command definition
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****
Notification Type: $NOTIFICATIONTYPE$
Host: $HOSTNAME$
State: $HOSTSTATE$
Address: $HOSTADDRESS$
Info: $HOSTOUTPUT$
Date/Time: $LONGDATETIME$
" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
# 'notify-service-by-email' command definition
define command{
command_name notify-service-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****
Notification Type: $NOTIFICATIONTYPE$
Service: $SERVICEDESC$
Host: $HOSTALIAS$
Address: $HOSTADDRESS$
State: $SERVICESTATE$
Date/Time: $LONGDATETIME$
Additional Info:
$SERVICEOUTPUT$
" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
拿出一行command_line来分析, 这个命令需要发起通知时执行。
/user/bin/printf
# linux命令
"%b"
"***** Nagios *****
Notification Type: $NOTIFICATIONTYPE$
# 这里的macro是通知的类型,该接口返回的值代表的意思见上表
Host: $HOSTNAME$
State: $HOSTSTATE$
Addtress: $HOSTADDRESS$
Info: $HOSTOUTPUT$
Date/Time: $LONGDATETIME$
"
| /usr/bin/mail -s
# 将管道符接收到的输入作为邮件的内容,通过mail命令发送
" ** $NOTIFICATIONTYPE$ Host Alert: $HOSTSTATE$ ** "
# 邮件的主题
$CONTACTEMAIL$ # 发送的收件人