Ad Widget

Collapse

Может кому понадобится. Отображение цветом в сообщении в зависимости от важности.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Engraf
    Member
    • Sep 2014
    • 41

    #1

    Может кому понадобится. Отображение цветом в сообщении в зависимости от важности.

    Приветствую,
    Решил поделиться своими изысканиями по теме. Может кому понадобится. Если уже было - прошу прощения.

    Захотелось мне, чтоб в соответствии с "важностью" (severity) триггера/события, в сообщении текст отображался нужным цветом, как в вебморде. К сожалению с "темой" сообщения никакие манипуляции с форматированием невозможны, кроме вставки юникод-символов (и то не везде работает). Так что осталось только "тело".

    Встроенный способ оповещения "e-mail" не позволяет использовать html формат в сообщении, поэтому пользуюсь способом "script" для запуска внешней программы (у меня nbsmtp).

    С помощью скрипта добавляю в сообщение заголовок: Content-Type: text/html; charset="UTF-8". Теперь можно использовать html теги в шаблоне сообщения в настройках оповещений.
    Для условного форматирования, после непродолжительных блужданий по поисковикам и открытия для себя css , использовал селекторы атрибутов.
    Получился примерно такой код:
    HTML Code:
    <style>
    [severity="0"]{ background-color: #97aab3; padding: 0.5px 3px; color: black; }
    [severity="1"]{ background-color: #7499ff; padding: 0.5px 3px; color: darkblue; }
    [severity="2"]{ background-color: #ffc859; padding: 0.5px 3px; color: blue; }
    [severity="3"]{ background-color: #ffa059; padding: 0.5px 3px; color: darkgreen; }
    [severity="4"]{ background-color: #e97659; padding: 0.5px 3px; color: white; }
    [severity="5"]{ background-color: #e45959; padding: 0.5px 3px; color: yellow; }
    </style>
    ...
    Problem: <span severity="{EVENT.NSEVERITY}">{HOST.NAME}: {EVENT.NAME}</span>
    ...
    Как это выглядит, можно посмотреть здесь.
    Выглядит как бы похоже на то, что я хотел. Допилил весь шаблон сообщения, проверил в thunderbird'е - все работает! Но...
    На работе у нас MS Outlook, который селекторы не понимает совсем.
    Подумал и переделал в это:
    HTML Code:
    <style>
      .severity0 { background-color: #97aab3; padding: 0.5px 3px; color: black; }
      .severity1 { background-color: #7499ff; padding: 0.5px 3px; color: darkblue; }
      .severity2 { background-color: #ffc859; padding: 0.5px 3px; color: blue; }
      .severity3 { background-color: #ffa059; padding: 0.5px 3px; color: darkgreen; }
      .severity4 { background-color: #e97659; padding: 0.5px 3px; color: white; }
      .severity5 { background-color: #e45959; padding: 0.5px 3px; color: yellow; }
    </style>
    ...
    Problem: <b><span class="severity{EVENT.NSEVERITY}">{HOST.NAME}: {EVENT.NAME}</span></b>
    ...
    Такое Outlook понимает. Ура!

    P.S. Где-то на форуме уже было, но на всякий выкладываю скрипт для отправки сообщений с помощью nbsmtp (пути к файлам из freebsd):
    Code:
    #!/bin/sh
    
    export [email protected]
    export zabbixmailto="$1"
    export zabbixsubject="$2"
    export zabbixbody="$3"
    export smtpserver=smtp.mydomain.ru
    export [email protected]
    export smtppass=password
    export hellomsg=zabbix-server01
    
    echo "From: \"Zabbix Server\" <$smtpmailfrom>" > /tmp/zabbixmail
    echo "To: $zabbixmailto" >> /tmp/zabbixmail
    echo "Subject: ""$zabbixsubject" >> /tmp/zabbixmail
    echo "MIME-Version: 1.0" >> /tmp/zabbixmail
    echo "Content-Type: text/html; charset=\"UTF-8\"" >> /tmp/zabbixmail
    echo "" >> /tmp/zabbixmail
    echo "$zabbixbody" >> /tmp/zabbixmail
    
    /usr/local/bin/nbsmtp -V -N -n -M c -S -d $hellomsg -f $smtpmailfrom -h $smtpserver -U $smtplogin -P $smtppass < /tmp/zabbixmail
    rm -f /tmp/zabbixmail
    Скрипт поместить в папку etc/zabbix4/zabbix/alertscripsts/ Создать "способ оповещения" (Media type) типа "script", указать там имя скрипта (только имя!) и добавить параметры {ALERT.SENDTO}, {ALERT.SUBJECT}, {ALERT.MESSAGE} именно в таком порядке. Добавить этот тип оповещения в настройках пользователя, которого будем оповещать.

    P.P.S. MS Outlook не понимает селекторы css начиная с версии 2007. Outlook 2003 их еще понимает.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Спасибо, интересно и полезно!

    Единственное замечание - в скрипте у вас зафиксировано имя врЕменного файла ("/tmp/zabbixmail"); если несколько писем отправляются параллельно - будут друг другу мешать.
    Избежать этого можно, например, так:
    Code:
    TMPFILE=/tmp/zabbixmail.$$.tmp
    echo ... >$TMPFILE
    echo ... >>$TMPFILE
    ...
    rm -f $TMPFILE
    Хотя я бы делал вообще без врЕменного файла, через ковейер. Например:
    Code:
    {
    echo "From: \"Zabbix Server\" <$smtpmailfrom>"
    echo "To: $zabbixmailto"
    echo "Subject: $zabbixsubject"
    echo "MIME-Version: 1.0"
    echo "Content-Type: text/html; charset=\"UTF-8\""
    echo ""
    echo "$zabbixbody"
    } | /usr/local/bin/nbsmtp -V -N -n -M c -S -d $hellomsg -f $smtpmailfrom -h $smtpserver -U $smtplogin -P $smtppass
    или даже так:
    Code:
    printf "From: \"Zabbix Server\" <%s>\nTo: %s\nSubject: %s\nMIME-Version: 1.0\nContent-Type: text/html; charset=\"UTF-8\"\n\n%s" \
      "$smtpmailfrom" "$zabbixmailto" "$zabbixsubject" "$zabbixbody" \
      | /usr/local/bin/nbsmtp -V -N -n -M c -S -d $hellomsg -f $smtpmailfrom -h $smtpserver -U $smtplogin -P $smtppass

    Comment


    • Engraf
      Engraf commented
      Editing a comment
      Спасибо за замечание. У меня почтовый сервер в одной локальной сети с заббиксом, возможно поэтому подобная проблема пока не возникала
      Нравится мне описание nbsmtp в мане: "The no-brainer SMTP client"
Working...