介绍
没有哪一个系统管理员希望半夜收到系统故障短信,电子邮件和电话通知。没有人喜欢在凌晨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类时间。