Назад | Перейти на главную страницу

Nagios: можно ли получать оповещения в определенное время, но не при возобновлении периода уведомления?

Я хочу проверить службу круглосуточно, но хочу проверять определенные пороги только в рабочее время. Я мог бы использовать check_period, но это означало бы, что службы не проверяются в нерабочее время. В качестве альтернативы я мог бы использовать notification_period, но это будет означать, что при запуске notification_period будут отправлены любые предупреждения, а я этого не хочу.

Есть ли способ добиться этого с помощью Nagios 3 (на самом деле я использую icinga)?

Я могу придумать два способа сделать это: (а) использовать внешнюю команду для изменения команды проверки (Nagios называет это «адаптивным мониторингом») или (б) разделить службу на две с разными командами проверки и периодами.

Я буду использовать check_load как и пример с этими (скелетными) определениями служб и команд:

 define service{
   name          load
   host_name     foohost
   check_command check_load!1,1,1!2,2,2
   ... (all other options)
 }

 define command{
   name         check_load
   command_line $USER1$/check_load -w $ARG1$ -c $ARG2$
 }

Для (а) предположим, что вы хотите изменить эти значения в 20:00, верните их в 8:00. В cron добавить

 0 20 * * * /some/path/change_load_check 3,3,3 4,4,4
 0  8 * * * /some/path/change_load_check 1,1,1 2,2,2

где change_load_check является

#!/bin/sh

now=`date +%s`
commandfile='/usr/local/nagios/var/rw/nagios.cmd'

W=$1
C=$2

/bin/printf "[%lu] CHANGE_SVC_CHECK_COMMAND;foohost;load;check_load!$W!$C\n" \
  $now > $commandfile

У вас должны быть включены внешние команды.

Для (б) вы должны взять исходную службу, превратить ее в шаблон и создать две новые службы, которые задают разные периоды и проверяют команды следующим образом:

 define service{
   name          load_template
   host_name     foohost
   ... (all other options)
   register      0
 }

 define service{
   name                load_workhours
   use                 load_template
   check_period        workhours
   notification_period workhours
   check_command       check_load!1,1,1!2,2,2
 }

 define service{
   name                load_offhours
   use                 load_template
   check_period        offhours
   notification_period offhours
   check_command       check_load!3,3,3!4,4,4
 }