Я хочу настроить Nagios на выдачу предупреждений (например, о умеренно высокой нагрузке или использовании диска) по электронной почте, а о критических элементах - на пейджер.
Сейчас мы уведомляем по электронной почте и на пейджер одновременно обо всех предупреждениях. Мое общее определение контакта выглядит следующим образом:
define contact{
name generic-contact
service_notification_options w,u,c,r,f,s
host_notification_options d,u,r,f,s
service_notification_commands notify-service-by-email,notify-service-by-pager
host_notification_commands notify-host-by-email,notify-host-by-pager
register 0
service_notification_period 24x7
host_notification_period 24x7
}
Как я могу сделать так, чтобы уведомление по электронной почте отправлялось как для предупреждений, так и для критических, но пейджинг только для критических?
Вы должны иметь возможность достичь этого, определяя разные контакты - один только для уведомления пейджера, другой только для уведомления по электронной почте - и назначая разные значения host/service_notification_options
:
define contact{
name email-contact
service_notification_options w,u,c,r,f,s
host_notification_options d,u,r,f,s
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
register 0
service_notification_period 24x7
host_notification_period 24x7
}
define contact{
name pager-contact
service_notification_options c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-pager
host_notification_commands notify-host-by-pager
register 0
service_notification_period 24x7
host_notification_period 24x7
}
Если вы хотите снизить накладные расходы на определение хоста / службы, вы должны объединить их в контактная группа как это:
define contactgroup{
contactgroup_name pager-email
members pager-contact,email-contact
}
и используйте контактную группу вместо отдельных контактов.
Чтобы отправить предупреждение WARNING по электронной почте и CRITICAL по SMS, я также определил 2 контакта: один для электронной почты и один для SMS. Он работает нормально, но ниже я пытался сделать это с помощью только одного контакта.
Идея в том, чтобы переписать (service|host)_notification_commands
чтобы проверить $SERVICESTATE$
макрос затем используйте соответствующий метод.
command.cfg
define command{
command_name notify-service
command_line $USER1$/notify.sh $SERVICESTATE$ $LASTSERVICESTATE$ $NOTIFICATIONTYPE$ $SERVICEDESC$ $HOSTALIAS$ $HOSTADDRESS$ "$LONGDATETIME$" "$SERVICEOUTPUT$" "$SERVICENOTESURL$" $CONTACTEMAIL$ $CONTACTPAGER$ $TIME$
}
notify.sh
#!/bin/bash
SERVICESTATE=$1
LASTSERVICESTATE=$2
NOTIFICATIONTYPE=$3
SERVICEDESC=$4
HOSTALIAS=$5
HOSTADDRESS=$6
LONGDATETIME=$7
SERVICEOUTPUT=$8
SERVICENOTESURL=$9
CONTACTEMAIL=${10}
CONTACTPAGER=${11}
TIME=${12}
send_email() {
/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: $SERVICEOUTPUT\n\nURL: $SERVICENOTESURL" | /bin/mail -s "** $NOTIFICATIONTYPE Service Alert: $HOSTALIAS/$SERVICEDESC is $SERVICESTATE **" $CONTACTEMAIL
}
send_sms() {
/usr/bin/wget --user=notifier --password=x "http://ip:port/smsgate/sms?tos=$CONTACTPAGER&content=$NOTIFICATIONTYPE, $SERVICEDESC, $HOSTADDRESS, $SERVICESTATE, $TIME, $SERVICEOUTPUT"
}
if [ $NOTIFICATIONTYPE = "PROBLEM" ]; then
if [ $SERVICESTATE = "WARNING" ]; then
send_email
elif [ $SERVICESTATE = "CRITICAL" ]; then
send_email
send_sms
fi
elif [ $NOTIFICATIONTYPE = "RECOVERY" ]; then
if [ $LASTSERVICESTATE = "WARNING" ]; then
send_email
elif [ $LASTSERVICESTATE = "CRITICAL" ]; then
send_email
send_sms
fi
fi
Обратите внимание, что когда служба в порядке, мне нужно проверить $LASTSERVICESTATE$
макрос, чтобы решить, какой метод использовать.
contacts.cfg
define contact{
contact_name quanta
use single-contact
alias Quan Tong Anh
service_notifications_enabled 1
host_notifications_enabled 1
service_notification_period 24x7
host_notification_period 24x7
service_notification_options c,w,r
host_notification_options d,u,r
email quanta@domain.com
pager 0912345678
}
templates.cfg
define contact{
name single-contact
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r,f,s
host_notification_options d,u,r,f,s
service_notification_commands notify-service
host_notification_commands notify-host
register 0
}
Я не знаю, лучший ли это вариант, но я не могу припомнить, чтобы Nagios мог пейджинговать только с помощью специального флага. Однако вы можете продублировать контакт с его именем и что-то, чтобы идентифицировать его как sms (name-sms). Это вызовет избыточные контакты. Однако, если вы используете группы, вы можете просто добавить контакт в группу.
define contact{
name generic-contact-sms
service_notification_options c
host_notification_options d,u,r,f,s
service_notification_commands notify-service-by-pager
host_notification_commands notify-host-by-pager
register 0
service_notification_period 24x7
host_notification_period 24x7
}