Zabbix + Pushbullet: простой способ push-оповещения

    У нас на предприятии, основным способом оповещения о событиях системы мониторинга Zabbix является email-рассылка. Jabber не прижился ввиду малой распространенности, а СМС устарел (хоть и весьма универсален). Хотелось предложить ещё одну альтернативу, которой и стали push-уведомления.

    Сервис Pushbullet уже успел сделать себе имя на платформе Android, а с недавних пор пытается покорить и iOS. Pushbullet умеет слать «пуши» на телефоны, принимать их в браузере (Chrome и Firefox) и из него же снова отправлять. В общем очень удобный и полезный сервис, который плюс ко всему имеет открытый API. Посредством этого API мы и будем отправлять события Zabbix на телефоны сотрудников.



    Шаг 1: Узнайте свой Pushbullet API


    Предполагается, что у вас уже есть аккаунт на данном сервисе. В этом случае просто перейдите в настройки своего профиля.


    Шаг 2: Создаём bash-скрипт


    Вариант 1: Отправляем сообщения на все устройства

    Создайте bash-скрипт для отправки push-уведомлений на все устройства. Назовите его pushbullet-all
    #!/bin/bash
    API_KEY="$1"
    SUBJECT="$2"
    MESSAGE="$3"
    
    curl https://api.pushbullet.com/v2/pushes \
          -u $1: \
          -d type=note \
          -d title="$SUBJECT" \
          -d body="$MESSAGE" \
          -X POST

    Где $N — переменные. $1 — уникальный API (позже указывается в профиле пользователей Zabbix), $2 — будет заголовком, $3 — станет телом сообщения. Подробнее в справке Zabbix.

    Скрипт нужно скопировать в папку alertscripts вашего Zabbix-сервера (например: /usr/local/share/zabbix/alertscripts). Не забудьте сделать скрипт исполняемым (chmod +x pushbullet-all).

    Вариант 2: Отправляем сообщения на конкретные устройства

    Чуть позже, в комментариях, начали предлагать разные версии скриптов для отправки сообщений на конкретные устройства. В принципе, можно использовать данный способ как вместо, так и совместно с тем, что указан выше. Я решил добавить вариативности и использовать скрипты совместно. Назовите новый скрипт pushbullet-dev:
    #!/bin/bash
    API_KEY="${1%%_*}"
    DEV_ID="${1#*_}"
    SUBJECT="$2"
    MESSAGE="$3"
    
    curl https://api.pushbullet.com/v2/pushes \
          -u $API_KEY: \
          -d device_iden=$DEV_ID \
          -d type=note \
          -d title="$SUBJECT" \
          -d body="$MESSAGE" \
          -X POST

    Скрипт нужно скопировать в папку alertscripts вашего Zabbix-сервера (например: /usr/local/share/zabbix/alertscripts). Не забудьте сделать скрипт исполняемым (chmod +x pushbullet-all).

    Теперь, в поле «Отправить на» мы указываем не только API, но и идентификатор устройства. Узнать их перечень можно следующим способом:
    curl -u <your api key here>: https://api.pushbullet.com/api/devices

    Поле «Отправить на» у нас будет выглядеть так (разделитель "_"):
    api_dev

    Где api — Ваш API-ключ (api_key), а dev — Ваш идентификатор устройства (dev_iden).

    Ниже будут скриншоты для 1 варианта, со вторым просто имейте ввиду, что имя скрипта — pushbullet-dev, а в поле «Отправить на» нужно указать как API так и ID.

    Шаг 3: Настройка Zabbix


    Создайте новый способ оповещения (Администрирование — Способы оповещений)



    Создайте новое действие, на вкладке «Операции» определите новый тип уведомлений



    В настройках профиля пользователя укажите Ваш API Key



    Соответственно, каждый ответственный сотрудник указывает в своём профиле личный API и начинает получать уведомления.

    Шаг 4: Наслаждайтесь




    UPD_02.08.2014: Обновил статью. Добавил скрипт для отправки на конкретные устройства и с использованием API v2 от Pushbullet.
    Поделиться публикацией

    Комментарии 26

      0
      Настраивал так Zabbix давно уже. Главная проблема там даже не в том была, что уведомления приходят на все девайсы, а в том, что уведомления не группировались. А когда парк машин достаточно большой (плюс, Zabbix не умеет отлавливать flash-событие), утром имеем портянку из 20-30 сообщений, которые просто невозможно удобно просмотреть.
        +2
        Группировкой занимается почтовый клиент, на основании важности события. Для меня это не такая большая проблема. Плюс, для чрезвычайных событий настроены регулярные действия, чтобы их никто не упустил. Но всё же соглашусь, общий объем несколько велик, что мало мотивирует остальных сотрудников разгребать ворох сообщений. Но это не проблема Zabbix. :-)

        Zabbix не умеет отлавливать flash-событие

        Умеет ловить snmp-трапы, например. Не то?
          0
          flash-события — это flapping trigger (когда он срабатывает, а через минуту возвращается обратно)?

          Можно же настроить уведомление не сразу при срабатывании триггера а, скажем, через 5 минут после этого. Или, скажем, в почту сразу, в телефон через 15мин и еще руководству через полчаса.
        +4
        Я конечно понимаю что всегда есть зависимость от конкретных условий, но я бы не рискнул называть смс-уведомления устаревшим способом. Более того, я считаю что это способ оповещения, который в принципе необходим если вам действительно интересно знать, а не упал ли ваш центральный маршрутизатор, почтовый сервер или интернет-шлюз. Само собой я говорю о независимом GSM-модеме, а не о каких-то интернет-сервисах, доступность которых может оказаться под вопросом.
          0
          Конечно же, я с некоторой иронией написал эту фразу, хотя для меня конкретно, она силу имеет. Разумеется бывают ситуации, при которых СМС был и остаётся оптимальным способом уведомления. :-)
          +1
          а с недавних пор пытается покарать и iOS

          Суровые там каратели =)
            0
            Спасибо, исправил. :-D
            0
            Нечто похожее организовали с помощью приложения Zabbkit, есть под Android и iOS. В нем ID выдаются под каждое устройство, не пробовали его использовать?
              0
              Пробовал. Разработчики молодцы, жалко только, что очень вяло обновляется.
              0
              Делаем похожее с opsview и pushover. Pushover умеет выбирать звуки для уведомления, но не умеет отправлять изображения, как pushbullet. В остальном — api очень схожи.

              Из плюсов — у Pushover есть приложение для iOS,
              Из минусов — приложение «немного» платное.
                0
                Жаль, что iOS приложение работает только под iOS 7
                  0
                  В настройках профиля пользователя укажите Ваш API Key
                  надо вводить?
                    0
                    скобки надо или свой API без лишних символов
                      0
                      Да, вводить. Без скобок, «чистый» API Key.
                      0
                      В конфиге zabbix раскоментить строки alerscipts и путь указывать полностью /usr/local/etc/zabbix2/zabbix/alertscripts или оставить как было {datadir}/?
                        0
                        Если во время компиляции/установки Zabbix Server определялась переменная datadir отличная от /usr/local/etc/zabbix2, то да, наверное стоит AlertScriptsPath прописать ручками.
                        0
                        пользовал для этого jeapie (не уже помню почему выбрал именно его, будем считать что «исторически сложилось») но сейчас видимо слезу на pushbullet ибо по интерфейсу приложения намного вменяеймее(как минимум задать звук уведомления можно — одно это уже радует после jeapie где в принципе нету нихрена). да и плагин к браузеру порадовал — уведомления с телефона смотреть на компе, да и chrome2phone мне заменил
                        Искреннее спасибо за сервис.

                        ps. во многих пушсервисах n-уведомлений в день и т.п., а тут сходу не нашел ограничений api, они есть?
                          0
                          Вчера баловался с настройкой push после загрузки торрентов и немного переборщил… Получил минимум сотню сообщений. :-)
                          0
                          Прикрутил вдобавок к sms и e-mail уведомлениям, разбив по severity. Получилось весьма удобно.
                          Большое спасибо!
                            0
                            Спасибо за решение, работает как часы!
                              0
                              Здорово! Я тоже настроил и получил «очереди» из пуль Pushbullet в строчке статуса. :)

                              image

                              Просто почта gmail работает тоже очень быстро и очень удобно. Единственное — это то, что пересылка e-mail уведомления опирается на инфраструктуру, которая и «мониторится» средствами zabbix. Т.е. уведомления о выходе из строя одного из цепочки mail серверов ко мне просто не попадут.

                              А Pushbullet работает, понятно, в обход mail, что, в общем, повышает надежность доставки уведомлений.

                              Посмотрим, как оно будет работать дальше.

                              Спасибо за инструкцию!
                                0
                                Почему-то многие относятся к разным типам оповещения, как к дублирующим и взаимоисключающим. Почему бы, например, не рассмотреть следующий вариант:

                                1) Срабатывает триггер
                                2) Рассылается письмо администраторам
                                3) Допустим, админов нет на месте (обедают) и не в состоянии увидеть рабочую почту
                                4) Через какое-то время, при условии активности триггера и неподтверждения, делается повторная рассылка, но уже PUSH. Вероятность, что админы взяли телефон с собой на обед, достаточно высока.

                                Это как один из вариантов. :-)
                                0
                                Немного доработал скрипт:
                                #!/bin/bash
                                
                                DEV_ID=`echo $1 | awk '{print $1}'`
                                API_KEY=`echo $1 | awk '{print $2}'`
                                
                                curl https://api.pushbullet.com/api/pushes \
                                      -u $API_KEY: \
                                      -d device_iden=$DEV_ID \
                                      -d type=note \
                                      -d title="$2" \
                                      -d body="$3" \
                                      -X POST
                                


                                Таким образом если в «Отправлять на» указать строку вида:
                                «device_iden api_key» то сообщение для данного пользователя будет уходить строго на необходимый ему девайс.
                                  0
                                  Для второй версии API:

                                  #!/bin/bash

                                  CURL=$(which curl)
                                  API_KEY="${1%%_*}"
                                  DEV_ID="${1#*_}"
                                  SUBJECT="$2"
                                  MESSAGE="$3"

                                  $CURL api.pushbullet.com/v2/pushes \
                                  -u $API_KEY: \
                                  -d device_iden=$DEV_ID \
                                  -d type=«note» \
                                  -d title=$SUBJECT \
                                  -d body=$MESSAGE \
                                  -X POST

                                  Разделитель для device_iden и api_key — "_".
                                    0
                                    С вашей подачи написал для себя скриптик, и теперь у меня есть секретный почтовый адресок, при отправке письма на который, я получаю push-уведомление.
                                    Такая цепочка, конечно, менее надёжна, чем прямой push, но, зато, её можно элементарно развернуть на одном сервере, а уже туда строчить письма с любых других.
                                    Ну и для близких людей еще один способ до меня быстро достучаться 8)
                                    Если интересно, то вот: github.com/side2k/email2pb

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

                                    Самое читаемое