Смарт Уведомления (С кем связаться для чего) в Icinga
У меня установлена Icinga 1.10, и я использую NagiosQL для ее настройки. Я немного застрял на настройке оповещений и уведомлений.
Исинга подразумевал наследство. Предположим, у нас есть производственный веб-сервер с именем prodweb01. На нем запущены две сервисные проверки. Один, чтобы проверить, работает ли Apache, и один, чтобы проверить, работает ли JVM. Для этих проверок не заданы настройки будильника, и, следовательно, они наследуют эти настройки от хоста. Хост наследует два шаблона хоста - Generic-Linux-Host (с контактами для системных администраторов) и Generic-Web-Host (с контактами для разработчиков). Есть ли какой-либо способ написать логику, чтобы в случае отказа Apache системные администраторы получали оповещения, а если JVM не работал, разработчики получали оповещения?
Это даже лучший способ делать вещи? Этот подход будет утомительным для нас, потому что у нас есть хосты, разделенные средой и ролями. Поэтому нам нужно будет создавать шаблоны Generic-Linux-Host prod/non-prod и шаблоны prod/non-prod для каждой роли сервера (например, api, app, web и т. Д.). Нам нужно будет сделать это так, чтобы уведомления, не относящиеся к продукту, не отправлялись в SMS, в то время как прод. - потому что я не видел способа сказать Icinga, чтобы он предупреждал с помощью SMS для продукта и по электронной почте для не-продукта., Единственный способ сделать это - создать два разных контакта для одного и того же человека: один с помощью SMS, другой с электронной почтой и применить его к шаблону или хосту в зависимости от его среды.
Редактировать: я понимаю, что кто-то может указать на то, почему я не могу просто определить настройки будильника / уведомления в самой службе? Да, это можно сделать, но это все еще оставляет вопрос без ответа о том, как отделить предупреждения для продукта от не продукта. В этом сценарии решение будет состоять в том, чтобы создать две версии одной и той же проверки сервиса и установить оповещения по SMS в одном, а в другом - по электронной почте.
1 ответ
Решил мою проблему как таковую.
Create two separate notification scripts in Icinga in commands.cfg
define command {
command_name Custom-Host-Notify
command_line /etc/icinga/Custom-Host-Notify "$HOSTNAME$" "$HOSTSTATE$" "$SHORTDATETIME$" "$HOSTOUTPUT$" "$HOSTADDRESS$" "$NOTIFICATIONTYPE$" "$HOSTDISPLAYNAME" "$NOTIFICATIONAUTHOR$" "$NOTIFICATIONCOMMENT$" "$HOSTNOTESURL$" "$CONTACTPAGER$" "$CONTACTEMAIL$"
register 1
}
define command {
command_name Custom-Service-Notify
command_line /etc/icinga/Custom-Service-Notify "$HOSTNAME$" "$HOSTALIAS$" "$SERVICEDESC$" "$SERVICESTATE$" "$SHORTDATETIME$" "$SERVICEOUTPUT$" "$HOSTADDRESS$" "$NOTIFICATIONTYPE$" "$SERVICEDISPLAYNAME$" "$NOTIFICATIONAUTHOR$" "$NOTIFICATIONNAME$" "$SERVICENOTESURL$" "$CONTACTPAGER$" "$CONTACTEMAIL$"
register 1
}
Определите contacts.cfg как таковой
define contact {
contact_name John Doe
alias Senior Systems Engineer
contactgroups SystemAdministrators
host_notifications_enabled 1
service_notifications_enabled 1
host_notification_period 24x7
service_notification_period 24x7
host_notification_options d,u,r,f,s
service_notification_options w,u,c,r,f,s
host_notification_commands Custom-Host-Notify
service_notification_commands Custom-Service-Notify
email john@doe.com
##This is how we send SMS to verizon phones using email.
pager 5555555555@vtext.com
register 1
}
В icinga.cfg включите это -
enable_environment_macros=1
В /etc/icinga/ создайте два вызываемых скрипта -
заказ хост-извещать
#!/bin/bash
##Icinga passes variables in this format - Custom-Host-Notify "$HOSTNAME$" "$HOSTSTATE$" "$SHORTDATETIME$" "$HOSTOUTPUT$" "$HOSTADDRESS$" "$NOTIFICATIONTYPE$" "$HOSTDISPLAYNAME" "$NOTIFICATIONAUTHOR$" "$NOTIFICATIONCOMMENT$" $HOSTNOTESURL$" "$CONTACTPAGER$" "$CONTACTEMAIL$"
##The quotes are essential since some of the variables have spaces and we need to capture the variable as a single variable. Bash sees space separated words as separate variables.
#Define variables
HOSTNAME="$1"
HOSTSTATE="$2"
SHORTDATETIME="$3"
HOSTOUTPUT="$4"
HOSTADDRESS="$5"
NOTIFICATIONTYPE="$6"
HOSTDISPLAYNAME="$7"
NOTIFICATIONAUTHORS="$8"
NOTIFICATIONCOMMENT="$9"
HOSTNOTESURL="${10}"
CONTACTPAGER="${11}"
CONTACTEMAIL="${12}"
ENV=`echo $1 | awk '{print substr($0,8,1)}'`
##Evaluate if the environment is Production.Please note, your logic may differ here. This is based on our naming convention.
if [ "$ENV" == "p" ];then
##If Production, then send SMS
/usr/bin/printf "%b" "$NOTIFICATIONTYPE - $HOSTNAME is $HOSTSTATE $SHORTDATETIME - Info:$HOSTOUTPUT ($HOSTADDRESS$)" | /bin/mail $CONTACTPAGER$
else
/usr/bin/printf "%b" "$SHORTDATETIME - Info:\n\n$HOSTOUTPUT\n\n$NOTIFICATIONTYPE - Host $HOSTNAME is $HOSTSTATE\n\n(Address: $HOSTADDRESS Displayname: $HOSTDISPLAYNAME)\n\nNotes: $NOTIFICATIONAUTHOR $NOTIFICATIONCOMMENT\n$HOSTNOTESURL\n\nUrl:\nhttps://icinga-tech.apartmentsext.com/icinga/cgi-bin/extinfo.cgi?type=1&host=$HOSTNAME\n\n" | /bin/mail -s "$NOTIFICATIONTYPE - $HOSTNAME is $HOSTSTATE" $CONTACTEMAIL
fi
заказ сервис уведомит
#!bin/bash
##Icinga passes variables in this format - Custom-Service-Notify "$HOSTNAME$" "$HOSTALIAS$" "$SERVICEDESC$" "$SERVICESTATE$" "$SHORTDATETIME$" "$SERVICEOUTPUT$" "$HOSTADDRESS$" "$NOTIFICATIONTYPE$" "$SERVICEDISPLAYNAME" "$NOTIFICATIONAUTHOR$" "$NOTIFICATIONNAME$" $SERVICENOTESURL$" "$CONTACTPAGER$" "$CONTACTEMAIL$"
##The quotes are essential since some of the variables have spaces and we need to capture the variable as a single variable. Bash sees space separated words as separate variables.
#Define variables
HOSTNAME="$1"
HOSTALIAS="$2"
SERVICEDESC="$3"
SERVICESTATE="$4"
SHORTDATETIME="$5"
SERVICEOUTPUT="$6"
HOSTADDRESS="$7"
NOTIFICATIONTYPE="$8"
SERVICEDISPLAYNAME="$9"
NOTIFICATIONAUTHORS="${10}"
NOTIFICATIONNAME="${11}"
SERVICENOTESURL="${12}"
CONTACTPAGER="${13}"
CONTACTEMAIL="${14}"
ENV=`echo $1 | awk '{print substr($0,8,1)}'`
##Evaluate if the environment is Production.Please note, your logic may differ here. This is based on our naming convention.
if [ "$ENV" == "p" ];then
##If Production, then send SMS
echo "$NOTIFICATIONTYPE - $HOSTALIAS/$SERVICEDESC is $SERVICESTATE on $HOSTADDRESS at $SHORTDATETIME ($SERVICEOUTPUT)" | /bin/mail $CONTACTPAGER
else
##If not production, send email
/usr/bin/printf "%b" "$SHORTDATETIME - Info:\n\n$SERVICEOUTPUT\n\n$NOTIFICATIONTYPE - Service $SERVICEDESC on Host $HOSTALIAS is $SERVICESTATE\n\n(Address: $HOSTADDRESS Displayname: $SERVICEDISPLAYNAME)\n\nNotes: $NOTIFICATIONAUTHOR $NOTIFICATIONCOMMENT\n$SERVICENOTESURL\n\nUrl:\nhttps://icinga-tech.apartmentsext.com/icinga/cgi-bin/status.cgi?host=$HOSTNAME\n\n" | /bin/mail -s "$NOTIFICATIONTYPE - $HOSTALIAS/$SERVICEDESC is $SERVICESTATE" $CONTACTEMAIL
fi
Вы всегда можете настроить сообщения и переменные по своему вкусу.
Перезапустите Icinga, и все готово.
Изменить: Я решил отказаться от подразумеваемого наследования и просто установить уведомления в сервис-шаблонах. Вы можете установить уведомления в самих службах.