четверг, 4 июля 2013 г.

Отправлять оповещения с Zabbix письмами в формате HTML

Исходные данные
CentOS 6.4 minimal
Zabbix 2.0.6
mail.domain.local - адрес почтового сервера.



Установка mutt
yum install mutt

Настройка mutt
vi /home/zabbix/.muttrc
set from = zabbix@domain.local
set realname = ""
set hostname = "domain.local"
set smtp_url = "smtp://mail.domain.local:25/"
set charset="utf-8"
set copy=no
<Esc> :x

chown zabbix /home/zabbix/.muttrc
chgrp zabbix /home/zabbix/.muttrc



Создаем скрипт для отправки почты
vi /usr/local/share/zabbix/alertscripts/mutt_send.sh
#! /bin/sh
# Parameters (as passed by Zabbix):
#  $1 : Recipient
#  $2 : Subject
#  $3 : Message
recipient=$1
subject=$2
message=$3
echo $message | mutt -e "set content_type=text/html" "$recipient" -s "$subject"
<Esc> :x

chgrp zabbix /usr/local/share/zabbix/alertscripts/mutt_send.sh
chown zabbix /usr/local/share/zabbix/alertscripts/mutt_send.sh
chmod 755 /usr/local/share/zabbix/alertscripts/mutt_send.sh 


Создаем новый тип медиа (Administration - Media Type)


Добавляем пользователю новый тип

Заходим в Configuration - Action (Event Source - Trigger) и создаем новое действие или правим существующее
В текст сообщения я внес:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
<style type="text/css">
td{
    padding: 5px;   
}
.PROBLEM {
    color: red;
}
.OK {
    color: green;
}
.Disaster {
    background-color: #FF3838;
}
.High {
    background-color: #FF9999;
}
.Average {
    background-color: #FFB689;
}
.Warning {
    background-color: #FFF6A5;
}
.Information {
    background-color: #D6F6FF;
}
</style>
</head>
<body>
<table border="1">
    <tr>

      <td colspan="2" class="{TRIGGER.STATUS}">{TRIGGER.STATUS}</td>
    </tr>
    <tr class="{TRIGGER.SEVERITY}">
      <td rowspan="5" style="font-weight: bold;">

        {HOST.NAME1}<br>({IPADDRESS1})
      </td>
      <td >Severity: {TRIGGER.SEVERITY}</td>
    </tr>
    <tr class="{TRIGGER.SEVERITY}">

      <td >{ITEM.NAME1} = {ITEM.VALUE1}</td>
    </tr>   
    <tr class="{TRIGGER.SEVERITY}">

      <td >URL: <a href="{TRIGGER.URL}">{TRIGGER.URL}</a></td>
    </tr>
</table>
</body>
</html>

Далее можно спровоцировать какой-либо триггер, и проверить оповещиния:



Не забываем про SElinux.



23 комментария:

  1. Спасибо за интересную статью! А можно ли Заббиком анализировать теги HTML ответа?

    Кондюрин Владимир

    ОтветитьУдалить
  2. Не понял вопроса, приведите пример

    ОтветитьУдалить
  3. Почему то не отправляется сообщение, как можно протестировать ?

    ОтветитьУдалить
    Ответы
    1. Отправить сообщение вручную из консоли, например:
      /usr/local/share/zabbix/alertscripts/mutt_send.sh my@mail.ru "Subject: Test" "Test"

      Удалить
  4. username@zabbix:/usr/lib/zabbix/alertscripts$ ./zabbix-send.sh mail@mail.ru "Subject: Test" "Test"
    ./zabbix-send.sh: 11: ./zabbix-send.sh: /usr/lib/sendEmail: not found


    хотя sendEmail присутствует в папке /usr/lib/

    ОтветитьУдалить
    Ответы
    1. хотя теперь тест проходит точнее ошибка не выходит но письмо на почту не приходит

      Удалить
    2. Значит что-то не корректно настроили в mutt или смотреть логи системы(/var/logs) или логи почтовика.

      Удалить
  5. Почему-то тестовое письмо ./mutt_send.sh mail@gmail.com "Subject: Test" "Test2" проходит успешно, но вот при добавление данного скрипта в zabbix оно не отправляется.

    ОтветитьУдалить
  6. запили чуть иначе, подскажите у меня не добавляется цвет фона в присылаемом письме возможно блог съедает часть html'a можете вставить как code ?

    ОтветитьУдалить
    Ответы
    1. Цвет фона устанавливается CSS и основан на макросе {TRIGGER.SEVERITY}.
      У меня установлен английский язык. Если установлен другой язык, то надо проверять посмотреть что за значение туда подставляется(открыть письмо как html). Если там что-то не английское, попробовать поправить CSS (но я не уверен что это будет работать).

      Удалить
    2. Каким образом запилил иначе? Тоже не отправляется маил в html виде из заббикса. Запускаю скрипт руками - все норм, из заббикса - болт. Пробовал и sendmail, и mutt все одно. Zabbix 2.4.6. Права на скрипт норм, запускаю руками под пользователем zabbix норм, пишу полные пути... Ничего не помогает. В виде простого текста проблем нет.

      Удалить
    3. У меня работает именно так как на скринах. Путь /usr/local/share/zabbix/alertscripts (для CentOS, для других не знаю), а в настройках указывается только имя файла. Не забывайте проверить selinux. А дальше смотреть логи

      Удалить
  7. /usr/local/share/zabbix/alertscripts лежат два скрипта:
    1. Рабочий
    #! /bin/bash
    to=$1
    subject=$2
    body=$3
    fr="email"

    cat <<EOF | mail -s "$subject" -r "$fr" "$to"
    $body
    EOF

    2. Работает только при запуске руками:
    #! /bin/bash
    to=$1
    subject=$2
    body=$3
    fr="email"
    echo "$body" | /usr/bin/mutt -s "$subject" -e "set envelope_from=yes" -e "set from="$fr"" -e "set content_type="text/html"" -- "$to"

    и еще

    cat <<EOF | /usr/sbin/sendmail -r "$fr" -t
    To: $to
    Subject: $subject
    Content-Type: text/html
    $body
    EOF

    В какие логи посмотреть? Пожалуйста объясните подробнее!

    ОтветитьУдалить
    Ответы
    1. Попробуйте использовать именно приведенные скрипты и настройки.
      /home/zabbix/.muttrc
      /usr/local/share/zabbix/alertscripts/mutt_send.sh
      Логи заббикса (по-умолчанию) /var/log/zabbix/zabbix_server.log
      Логи selinux /var/log/audit/audit.log

      Удалить
    2. Прошел по тем же граблям http://habrahabr.ru/post/267523/
      Переустановил все на CentOS7. Работает. СПАСИБО!

      Удалить
    3. Вот еще один маленький вопрос. Есть несколько триггеров, в которых три итема, поэтому уведомление оформляю вот так:

      {ITEM.NAME1} = {ITEM.VALUE1}
      {ITEM.NAME2} = {ITEM.VALUE2}
      {ITEM.NAME3} = {ITEM.VALUE3}

      Но в таком случае, триггеры, где итемов меньше трех выглядят как *UNKNOWN*=*UNKNOWN*
      Как избавится от такого мусора? Размер шрифта сделать 0 ? Как?

      Удалить
    4. Если говорить про html, то каждую такую строку можно положить внутрь div или span и т.д.
      В css добаить что-то типа
      .UNKNOWN {
      visibility: hidden;
      }
      а в hml
      <div class="ITEM.NAME1">{ITEM.NAME1} = {ITEM.VALUE1}</div>
      Если имя итема будет unknown то поле будет скрыто

      Удалить
    5. А если это ячейка таблицы
      <"tr" class="{TRIGGER.SEVERITY}">
      <"td" >{ITEM.NAME1} = {ITEM.VALUE1}<"/td">
      <"/tr">
      Как ее скрыть?

      Удалить
    6. Как-то так, (только соответственно имя существующего итема не должно содержать unknown)
      <"tr" class="{TRIGGER.SEVERITY} {ITEM.NAME1}">
      <"td" >{ITEM.NAME1} = {ITEM.VALUE1}<"/td">
      <"/tr">

      Удалить
    7. Вот не получается совсем.

      .UNKNOWN {
      display: none;
      }

      <"tr" class="{TRIGGER.SEVERITY}">
      <"td" class="{ITEM.NAME3}">{ITEM.NAME3} = {ITEM.VALUE3}


      Все дело в что, что zabbix выдает {ITEM.NAME3} = *UNKNOWN*. Вот так он считает и никак иначе. А имя класса должно начинаться с латинской буквы и может содержать только - или _. Не знаю как эти грабли обойти.

      Удалить
    8. настройка действия в заббиксе обращайте внимание если кто еще столкнется.

      Удалить
  8. А в FreeBSD у Zabbix не существует пользовательской директории, как быть?

    ОтветитьУдалить
    Ответы
    1. Ни разу не сталкивался с FreeBSD, но как написано в мане https://www.freebsd.org/cgi/man.cgi?query=mutt&sektion=1&manpath=freebsd-release-ports
      Пользовательский конфиг быть должен
      ~/.muttrc or ~/.mutt/muttrc
      User configuration file.

      Удалить