Nagios 定义轮班

介绍

没有哪一个系统管理员希望半夜收到系统故障短信,电子邮件和电话通知。没有人喜欢在凌晨4点醒来解决问题。但是系统故障肯定越快解决越好。在大多数公司中,停机时间也是很昂贵的,并且由于多种原因,我们必须快速解决问题。

对于那些拥有一组系统管理员团队可以帮助分担应答警报,通常会设置呼叫轮换。多位管理员通常会交替在周末,工作日,节假日等接收通知。

本节将告诉你如何可以创建TIMEPERIOD的方式,可以促进典型导通呼叫通知旋转定义。这些定义不会处理不可避免地会出现的人为问题(管理员打电话请病假,换Class类或将寻呼机扔进河里),但它们将允许您设置一个基本的结构,该结构在大多数情况下都有效。

场景1:假期和周末

两位管理员-John和Bob-负责响应Nagios警报。John会收到工作日(24小时)的所有通知,节假日除外;鲍勃在周末和节假日处理通知。以下是如何使用时间周期定义这种轮播类型的示例。

首先,定义3个时间段,其中包含假期,工作​​日和周末的时间范围:

define timeperiod {
    name            weekdays
    timeperiod_name weekdays
    monday          00:00-24:00
    tuesday         00:00-24:00
    wednesday       00:00-24:00
    thursday        00:00-24:00
    friday          00:00-24:00
}

define timeperiod {
    name            weekends
    timeperiod_name weekends
    saturday        00:00-24:00
    sunday          00:00-24:00
}

define timeperiod {
    name                holidays
    timeperiod_name     holidays
    january 1           00:00-24:00 ; New Year's Day
    2008-03-23          00:00-24:00 ; Easter (2008)
    2009-04-12          00:00-24:00 ; Easter (2009)
    monday -1 may       00:00-24:00 ; Memorial Day (Last Monday in May)
    july 4              00:00-24:00 ; Independence Day
    monday 1 september  00:00-24:00 ; Labor Day (1st Monday in September)
    thursday 4 november 00:00-24:00 ; Thanksgiving (4th Thursday in November)
    december 25         00:00-24:00 ; Christmas
    december 31         17:00-24:00 ; New Year's Eve (5pm onwards)
}

接下来,为约翰的通话时间定义一个时间段,其中包括工作日,但不包括上述假期时间段中定义的日期/时间:

define timeperiod {
    timeperiod_name     john-oncall
    use                 weekdays    ; Include weekdays
    exclude             holidays    ; Exclude holiday dates/times defined elsewhere
}

现在,您可以在John的联系人定义中引用此时间段:

define contact {
    contact_name                john
    ...
    host_notification_period    john-oncall
    service_notification_period john-oncall
}

为鲍勃的通话时间定义一个新的时间段,其中包括周末以及上述假期时间段中定义的日期/时间:

define timeperiod {
    timeperiod_name     bob-oncall
    use                 weekends,holidays   ; Include weekend and holiday date/times defined elsewhere
}

现在,您可以在Bob的联系人定义中引用此时间段:

define contact {
    contact_name                bob
    ...
    host_notification_period    bob-oncall
    service_notification_period bob-oncall
}

场景2:替Class类

在这种情况下,John和Bob每隔一天交替处理一次警报-不管是周末,工作日还是假日。

定义约翰应该何时接收通知的时间段。假设今天的日期是2016年10月1日,而John正在处理从今天开始的通知,则定义如下所示:

define timeperiod {
    timeperiod_name     john-oncall
    2016-10-01 / 2      00:00-24:00 ; Every two days, starting October 1st, 2016
}

现在,定义鲍勃应何时接收通知的时间段。鲍勃会在约翰没有的那一天收到通知,因此他的第一个上Class类日将从明天开始(2016年10月2日)。

define timeperiod {
    timeperiod_name     bob-oncall
    2016-10-02 / 2      00:00-24:00 ; Every two days, starting October 2nd, 2016
}

现在,您需要在John和Bob的联系定义中引用以下时间段定义:

define contact {
    contact_name                john
    ...
    host_notification_period    john-oncall
    service_notification_period john-oncall
}
define contact {
    contact_name                bob
    ...
    host_notification_period    bob-oncall
    service_notification_period bob-oncall
}

场景3:按周交替

在这种情况下,John和Bob每隔一周交替处理一次警报。John在一周的周日至周六处理警报,而Bob在接下来的7天处理警报。这一直持续下去。

定义约翰应该何时接收通知的时间段。假设今天的日期是2016年7月29日(星期日),而John在本周(从今天开始)正在处理通知,则定义如下所示:

define timeperiod {
    timeperiod_name             john-oncall
    2016-07-29 / 14 00:00-24:00 ; Every 14 days (two weeks), starting Sunday, July 29th, 2016
    2016-07-30 / 14 00:00-24:00 ; Every other Monday starting July 30th, 2016
    2016-07-31 / 14 00:00-24:00 ; Every other Tuesday starting July 31st, 2016
    2016-08-01 / 14 00:00-24:00 ; Every other Wednesday starting August 1st, 2016
    2016-08-02 / 14 00:00-24:00 ; Every other Thursday starting August 2nd, 2016
    2016-08-03 / 14 00:00-24:00 ; Every other Friday starting August 3rd, 2016
    2016-08-04 / 14 00:00-24:00 ; Every other Saturday starting August 4th, 2016
}

现在,定义鲍勃应何时接收通知的时间段。鲍勃会在约翰没有的那几周收到通知,因此他的第一个上Class类日是下个星期日(2016年8月5日)。

define timeperiod {
    timeperiod_name             bob-oncall
    2016-08-05 / 14 00:00-24:00 ; Every 14 days (two weeks), starting Sunday, August 5th, 2016
    2016-08-06 / 14 00:00-24:00 ; Every other Monday starting August 6th, 2016
    2016-08-07 / 14 00:00-24:00 ; Every other Tuesday starting August 7th, 2016
    2016-08-08 / 14 00:00-24:00 ; Every other Wednesday starting August 8th, 2016
    2016-08-09 / 14 00:00-24:00 ; Every other Thursday starting August 9th, 2016
    2016-08-10 / 14 00:00-24:00 ; Every other Friday starting August 10th, 2016
    2016-08-11 / 14 00:00-24:00 ; Every other Saturday starting August 11th, 2016
}

现在,您需要在John和Bob的联系定义中引用以下时间段定义:

define contact {
    contact_name                john
    ...
    host_notification_period    john-oncall
    service_notification_period john-oncall
}
define contact {
    contact_name                bob
    ...
    host_notification_period    bob-oncall
    service_notification_period bob-oncall
}

场景4:休假日

在这种情况下,John处理除休假外的所有时间的通知。他每个月都有几天的休息日,以及一些计划的假期。当John休假或不在办公室时,Bob处理通知。

首先,定义一个时间段,其中包含约翰休假日和休息日的时间范围:

define timeperiod {
    name                john-out-of-office
    timeperiod_name     john-out-of-office
    day 15              00:00-24:00         ; 15th day of each month
    day -1              00:00-24:00         ; Last day of each month (28th, 29th, 30th, or 31st)
    day -2              00:00-24:00         ; 2nd to last day of each month (27th, 28th, 29th, or 30th)
    january 2           00:00-24:00         ; January 2nd each year
    june 1 - july 5     00:00-24:00         ; Yearly camping trip (June 1st - July 5th)
    2007-11-01 - 2007-11-10 00:00-24:00     ; Vacation to the US Virgin Islands (November 1st-10th, 2007)
}

接下来,为约翰的通话时间定义一个时间周期,其中不包括上述时间周期中定义的日期/时间:

define timeperiod {
    timeperiod_name john-oncall
    monday          00:00-24:00
    tuesday         00:00-24:00
    wednesday       00:00-24:00
    thursday        00:00-24:00
    friday          00:00-24:00
    exclude         john-out-of-office  ; Exclude dates/times John is out
}

现在,您可以在John的联系人定义中引用此时间段:

define contact {
    contact_name                john
    ...
    host_notification_period    john-oncall
    service_notification_period john-oncall
}

为鲍勃的通话时间定义一个新的时间段,其中包括约翰不在办公室的日期/时间:

define timeperiod {
    timeperod_name      bob-oncall
    use                 john-out-of-office  ; Include holiday date/times that John is out
}

现在,您可以在Bob的联系人定义中引用此时间段:

define contact {
    contact_name                bob
    ...
    host_notification_period    bob-oncall
    service_notification_period bob-oncall
}

其他情况

您可能还有许多其他的通话通知循环方案。时间周期定义中的date异常指令能够处理您可能需要使用的大多数日期和日期范围,因此请检查可用的不同格式。如果在创建时间段定义时犯了一个错误,请总是错在给其他人更多的值Class类时间。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁