0x07 Nagios Notifications

Notifications

Notification配置,在nagios中目的是用于定义什么时候应该发出通知,并且谁应该接收这些通知。

什么时候通知应该发生

  1. 当状态变为hard状态时。
  2. 当一个监控状态是hard且是non-ok状态时,自从最近的一个通知被发出到notification的间隔时间过去,那么就该再发起一个通知。
  3. 有一个不发出的特殊情况:当主机的状态是hard non-ok状态,这个主机上的services监控的通知将不会发送出去。因为host已经是不可用状态,其有关系的宿主关系肯定会作为一个影响维度,而不发出通知。

谁会收到通知

当然是contac定义中的联系人。这些联系人被引用在,其它定义中,如host or services的contact_groups设置。这些contact group中的用户将被作为发送通知的对象。因为一个contact可以在多个group中,所以nagios会进行去重,不会发送重复通知给同一用户。

通知要经历的层层过滤关卡

通知要被发送出去是要经历层层关卡的。有多个维度来限制发送这个动作。且这多个维度是有顺序的,有优先级的。

  1. 程序全局:enable_notifications控制全局。

  2. service和host层面定义就有5层:

    1. 设置了schedule downtime,在这个期间是不会发送消息。如果是services的通知,如果所在的host也有shcedule downtime,那么host的和service的时间段取并集。(Tips: schedule downtime是通过web cgi设置)
    2. 设置了flapping,flapping即状态波动期间。nagios定义了波动期间。如果是波动期间,除了波动通知发送给contact联系人,其它的通知都会被波动说抑制,不会发送给contact。(Tips:什么是波动?波动是一个过程积累状态,就是存在一个队列,这个队列存储着最近21条检测状态,通过计算这21条中出现了几次状态变迁,然后将这个次数占21条的百分比,得到这个百分比。通过这个百分比来与设置的高低波动阈值进行不计较,如果在阈值区间内,那么说明在波动。如果该服务以前未发生过波动,并且计算的值等于或大于较高的波动阈值,则Nagios Core认为该服务才刚刚开始波动。
      如果该服务以前曾发生过震荡,并且计算的值低于震荡下限阈值,则Nagios Core会认为该服务刚刚停止震荡。)
    3. 每个services or hosts 自定义的通知设置。哪些状态才可以通知等。如果不设置将不会发送通知。
    4. 每个services or hosts 也定制了notification_period。只有在这个时间内才会发送通知
    5. 每个services or hosts 定制了通知间隔时间,满足通知间隔时间才会发出这个通知,避免发送频率过高。
  3. Contac filter:在联系人,即接受通知方设置关卡

    1. 每个contact 客户定义接受什么级别的通知。
    2. 权值计算,会有一个最小权值对于contact联系人,如果检测的权值小于最小权值,那么通知将不会到达联系人。权值是怎么计算的呢?对于host的检测,权值会加上host上的所有服务的权值。minimum_importanc最小权值如果没有设置,则为0
    3. 每一个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 *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /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 *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
        }

拿出一行command_line来分析, 这个命令需要发起通知时执行。

/user/bin/printf  \n   # linux命令
"%b" \n  
"***** Nagios ***** \n\n
Notification Type: $NOTIFICATIONTYPE$ \n  # 这里的macro是通知的类型,该接口返回的值代表的意思见上表
Host: $HOSTNAME$ \n
State: $HOSTSTATE$ \n
Addtress: $HOSTADDRESS$ \n
Info: $HOSTOUTPUT$ \n
Date/Time: $LONGDATETIME$ \n"
| /usr/bin/mail -s \n  # 将管道符接收到的输入作为邮件的内容,通过mail命令发送
" ** $NOTIFICATIONTYPE$ Host Alert: $HOSTSTATE$ ** " \n  # 邮件的主题
$CONTACTEMAIL$  # 发送的收件人
posted @ 2020-09-27 17:27  ZJiQi  阅读(188)  评论(0编辑  收藏  举报