Pull to refresh

Zabbix. Отправка триггера с комментарием

System administration *
Приветствую!
Решил поделиться небольшим скрипом (немного модифицированный оригинальный) по отправке уведомлений в Zabbix'е с пользовательскими комментариями.
Суть задачи: на работе используется Zabbix в основном для мониторинга удаленных сетей (доступность, немного качества). При отсутствии связи с удаленной сетью по должностной инструкции мы должны извещать об этом определенные отделы. Настроить обычную отправку почты не составило труда, но при такой отправке неясности у отделов хватало — по какой причине отключилась «сеть», как долго её не будет. Поэтому задался целью вставить в отсылаемое письмо комментарий водимый в дашборде при подтверждении триггера.
По сути, это тот же скрипт, что лежит в официальной документации Zabbix'а с одной небольшой вставкой:

#! /bin/bash
to=$1 #адресат сообщения
subject=$2 #тема сообщения
body=$3 #текст сообщения
status="$(echo $body | cut -d\; -f3)" #статус триггера, используется для if

text0='Сетевое оборудование на площадке, по адресу: '
text1='не доступно более 30 минут.'
text2='Статус:'
text3='Важность:'
text4='Сведения:'
text5='Дата и время возникновения проблемы:'
text6='Подробности о причинах отключения площадки можно узнать по телефону: ХХХХ'
text7='Original event ID:'
text8='Комментарий сотрудника ИТ:'
text9='Дата и время решения проблемы:'

ack=`echo "select message FROM acknowledges WHERE eventid='$(echo $body | cut -d\; -f1)'" | mysql -uuser -ppassword -Dzabbix` #собвственно запрос на выборку подтверждения

if [[ $status = "PROBLEM" ]]; then #if-ать нужно, для того что бы можно было выставить разные тексты на возникновение и восстановление триггера

cat <<EOF | mail -s "$subject" "$to"
$text0 $(echo $body | cut -d\; -f2) $text1

$text2 $(echo $body | cut -d\; -f3)
$text3 $(echo $body | cut -d\; -f4)

$text4
$text5 $(echo $body | cut -d\; -f5) $(echo $body | cut -d\; -f6)
$text6
$text8 $ack

$text7 $(echo $body | cut -d\; -f1)
EOF

else
cat <<EOF | mail -s "$subject" "$to"
$text0 $(echo $body | cut -d\; -f2) $text1

$text2 $(echo $body | cut -d\; -f3)
$text3 $(echo $body | cut -d\; -f4)

$text4
$text9 $(echo $body | cut -d\; -f5) $(echo $body | cut -d\; -f6)
$text6
$text8 $ack

$text7 $(echo $body | cut -d\; -f1)
EOF
fi


Теперь про настройку действий:




В моем случае, отправка сообщения происходит спустя 30 минут, после возникновения триггера, в связи с тем, что требуется время для уточнения информации о причинах недоступности сети и ее устранения. По истечении 30 минут, если проблема не устранена, происходит уведомление пользователей, находящихся в группе «notification».

Недоработки скрипта:
1) Скрипт не понимает многостроковые комментарии. В этом случае он присылает текст во вложении. Кто знает как исправить — поделитесь мыслью.
2) Т.к. я, можно сказать единственный, кто взаимодействует с фронтэндом заббикса — то не делал вставку автора комментария. Но это в принципе реализуемо:
userid=`echo "select userid FROM acknowledges WHERE eventid='$(echo $body | cut -d\; -f1)'" | mysql -uuser -ppassword -Dzabbix`
user=`echo "select alias [можно связку полей name и surname - это имя и фамилия соответственно] FROM users WHERE userid=$userid" | mysql -uuser -ppassword -Dzabbix`

3) Сделано через стандартный mail, можно переделать через mutt, что бы добавить html и сделать все красиво.

Теперь об особенностях. Местоположение хоста берется из «Инвентарные данные» — «Местоположение»
Разделитель — ";"
Текст прописанный в действии:
{EVENT.ID};{INVENTORY.LOCATION1};{TRIGGER.STATUS};{TRIGGER.SEVERITY};{EVENT.DATE};{EVENT.TIME}


В принципе можно менять все что угодно, главное найти соответствующий макрос, который можно посмотреть здесь

Я понимаю, что это слишком маленькое исправление, но возможно — кому-нибудь пригодится.

UPD: Тут на форуме, спустя недельку подсказали, что я изобрел велосипед, и было достаточно добавить {EVENT.ACK.HISTORY} в стандартный способ вывода.
Tags:
Hubs:
Total votes 8: ↑7 and ↓1 +6
Views 22K
Comments Comments 2