Введение
Способов настройки уведомлений из заббикса в телеграм существует несколько. Их можно разделить по информативности:
- Отправка только текстовых оповещений
- Отправка графиков
Так же можно разделить по типу реализации:
- Использовать готового бота
- Создать своего бота для уведомлений
- Отправлять оповещения себе лично или в группу
Я постараюсь разобрать все возможные варианты. Идти будем от простого к сложному. Сначала настроим текстовые оповещения, потом добавим графики. Отправлять будем как в личку, так и в группу.
Кстати, еще один способ отправки уведомлений из zabbix — с помощью звонка через asterisk. Если вам это интересно, читайте соответствующий материал — оповещения zabbix через asterisk.
Я буду настраивать все в zabbix 3.4, установленный на Centos 7. Принципиального значения это не имеет, решение будет одинаково работать практически на всех дистрибутивах linux.
Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:
- Установка CentOS 7.
Настройка CentOS 7.
Установка и настройка zabbix сервера.
То же самое на Debian 9, если предпочитаете его:
- Установка Debian 9.
Базовая настройка Debian 9.
Установка и настройка zabbix на debian.
Приступим к реализации.
Введение
Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:
- Установка CentOS 8.
- Настройка CentOS 8.
- Установка и настройка zabbix сервера.
То же самое на Debian 10, если предпочитаете его:
- Установка Debian 10.
- Базовая настройка Debian.
- Установка и настройка zabbix на debian.
Бэкапы в виде сырых данных в директории (1-й способ)
У меня много где настроена самодельная система бэкапа, похожая на то, что описано в статье по настройке бэкапа с помощью rsync. Не буду подробно останавливаться на том, почему бэкаплю именно так. Во многих случаях это удобно, так как всегда имеешь под рукой свежую версию данных в исходном виде. В случае повреждения источника, просто меняешь точку монтирования и получаешь практически сразу все данные, без простоя рабочего процесса.
На всякий случай хочется следить за тем, что бэкапы у тебя актуальны и в случае чего ты можешь на них рассчитывать. Делать мы это будет по очень простой схеме. На сервере источнике будет раз в сутки создаваться файл. Во время бэкапа этот файл будет улетать на сервер с резервными данными. Этот сервер подключен к системе мониторинга zabbix с помощью агента. Этот агент будет периодически проверять дату последнего изменения файла. Если эта дата больше заданного интервала, то мы будем получать оповещение о том, что бэкапы не выполняются.
Для настройки описанной схемы нам понадобится выполнить несколько шагов:
- На серверах источниках настроить скрипт, который будет создавать файл и поместить его в планировщик.
- На сервере заббикс настроить на хосте с бэкапами item и trigger для слежения и оповещения о дате файла.
Бэкапы в виде запакованных архивов (2-й способ)
Если у вас бэкапится, к примеру, какая-то база в дамп или есть просто отдельный файл, то имеет смысл его архивировать и хранить в виде одиночного архива. Для таких бэкапов тоже нужен мониторинг. Чтобы следить за актуальностью бэкапа, я предлагаю мониторить 2 параметра:
- Размер файла. Если он равен нулю, то срабатывает триггер.
- Дата создания бэкапа. Если он старше какого-то срока, в моем примере будут 24 часа, то шлем оповещение.
Мониторинг бэкапов будет настроен из расчета, что у вас все бэкапы лежат в одной директории на сервере. В этой директории резервные копии хранятся для каждого объекта в отдельной папке. Будет настроено автообнаружение папок в директории с бэкапами.
ZABBIX – Создание действия.
Теперь нам необходимо создать так называемое “Действие”, которое при определенных условиях будет использовать наш способ оповещения. Для этого нам нужно перейти на вкладку “Настройка” и в появившейся строке нажать на кнопку “Действия”, как показано на скриншоте ниже.
Обратите внимание, что здесь отображается вся информация по действиям, уже имеющимся в системе. Нам нужна кнопка “Создать действие”
В пример я приведу действие “KKT Notification”:
В пример я приведу действие “KKT Notification”:
Снова пройдемся по полям:
- Имя – видимое имя действия.
- Тип вычисления – здесь необходимо выбрать будут складываться ваши условия и выдавать алерт, или если хотя бы одно из условий нарушено, то генерируется алерт.
- Условия – условия срабатывания действия.
Далее переходим на вкладку “Операции”. Здесь нам необходимо нажать на кнопку “Новый” в поле “Операции”.
В появившихся поля нам необходимо указать:
- Шаги – количество выполнения данной операции.
- Длительность шага – время выполнения 1 шага.
- Тип операции – сама операция, это поле уже на ваш выбор.
- Отправлять группам пользователей – отправка сразу нескольким пользователям, входящих в указанную группу.
- Отправлять пользователям – отправка указанным пользователям. (не забудьте поставить себя и в своем профиле указать свой электронный адрес)
- Отправлять только через – способ отправки. (Нам нужен Email)
- Условия – дополнительные условия отправки. (Указываем “Событие подтверждено = Не подтверждено”)
Для того, чтобы добавить группу пользователей, пользователя отдельно или дополнительное условие, нажимайте на кнопки в этих полях “Добавить” и “Новый”.
После нажатия кнопки “Добавить”, вас перенесет на страницу действий, где появится только что созданное действие. Теперь нам осталось проверить работоспособность нашего действия. Для этого мне необходимо снова зайти на сервер vtrsagent и выключу блокнот.
После проделанных операций мне пришло письмо на почтовый адрес с содержанием проблемы:
Выглядит не очень презентабельно, но если вчитаться, то можно понять, что упал блокнот на сервере.
Ну-с, собственно все, могу вас поздравить! Вы только что создали систему оповещения алертов в заббиксе!
Настройка в Zabbix отправки уведомлений
Заполняем необходимые параметры как на картинке:
Name | |
Type | Script |
Script name | mail.sh |
Сохраняем настройки, нажав Update. Дальше идем в раздел Administration -> Users. Меняем отображение с групп на пользователей:
Нажимаем на пользователя Admin и переходим на вкладку Media, там жмем на add. Откроется окно добавления источника оповещений. Заполняем как на картинке:
Нажимаем Update. Затем в разделе Media пользователя Admin еще раз жмем Update для применения настроек:
Теперь последний штрих, который лично я частенько забываю сделать, а потом долго разбираюсь, почему zabbix не отправляет оповещения на почту. Идем в раздел Configuration -> Actions и в единственной строке Report problems to Zabbix administrators жмем на Disabled в столбце статус, чтобы он стал Enabled:
Теперь все готово. Надо ждать срабатывания тригера и проверять почту. После срабатывания тригера и отправки заббиксом письма, в системном почтовом логе /var/log/maillog должны появиться записи об этом.
Отправка оповещений в группу
Рассмотрим ситуацию, когда мы хотим отправлять уведомления из zabbix не конкретным людям, а сразу в группу, где будут несколько пользователей. Никаких особых настроек для этого не надо. Просто создайте группу в Телеграме, добавьте в эту группу бота @my_id_bot и напишите /start. Так вы узнаете ID группы. В эту же группу добавьте своего бота.
Теперь ID группы надо использовать в способе оповещения пользователя. Там, где мы раньше использовали ID пользователя, теперь ставим ID группы. Можете либо отредактировать предыдущий способ, либо добавить новый. Я добавлю новый, конкретно проделав следующие действия:
- Создал 2 способа оповещения: Telegram private и Telegram group.
- Добавил оба этих способа пользователю администратор, указав соответствующие ID.
- Добавил оба эти способа в Действия.
Хочу обратить внимание, что ID группы начинается с тире, например -288179672. Я этот момент упустил и долго не мог сообразить, почему в группу не отправляются оповещения
Не знал, что этот символ является неотъемлемой частью.
После этого оповещения стали приходит как в приват, так и в общую группу. Можно настраивать разные сообщения на разные события и отправлять их по разным каналам. Это все настраивается под конкретные обстоятельства.
Оповещения в telegram со ссылками на график и триггер
Расскажу про еще один интересный скрипт для отправки красивых и функциональных оповещений в telegram, в котором помимо всего прочего сразу же публикуются ссылки на триггер, график и некоторые другие полезности. Вот он на гитхабе — https://github.com/xxsokolov/Zabbix-Notification-Telegram. Инструкция от автора в некоторых местах не очень понятная, так что я немного повозился, прежде чем все получилось. В основном c xml были проблемы, но обо всем по порядку.
Клонируем к себе репозиторий.
# cd ~ # git clone https://github.com/xxsokolov/Zabbix-Notification-Telegram
Копируем в /usr/lib/zabbix/alertscripts папку zbxTelegram_files и файлы _config.yml, zbxTelegram.py, .requirements и zbxTelegram_config.example.py. Последний переименовываем в zbxTelegram_config.py.
Делаем пользователя zabbix владельцем этих файлов и разрешаем исполнение скрипта.
# chown -R zabbix. /usr/lib/zabbix/alertscripts # chmod +x zbxTelegram.py
Автор скрипта предлагает запускать его в виртуальном окружении, поэтому поставим пакет virtualenv.
# dnf install virtualenv
Переходим в /usr/lib/zabbix/alertscripts, создаем виртуальное окружение и активируем его.
# cd /usr/lib/zabbix/alertscripts # virtualenv venv --python=python3 # source venv/bin/activate
Ставим зависимости и деактивируем окружение.
# pip install -r .requirements # deactivate
Редактируем конфигурационный файл zbxTelegram_config.py. Список параметров, которые нужно поменять.
tg_proxy = False tg_token = '1393668911:AFGHTRDVdfJ28R-wxKfvH1RTR6-vdNw' zabbix_api_url = 'http://10.20.1.23/zabbix/' zabbix_api_login = 'Admin' zabbix_api_pass = 'zabbix'
В url на конце должен обязательно быть слеш. Дальше делаем все то же самое, что и ранее. Идем в Способы оповещений и добавляем новый тип, где в качестве скрипта указываем zbxTelegram.py.
Шаблоны тем сообщений можете настроить как вам больше нравится. Автор предлагает такие:
{Problem} {TRIGGER.SEVERITY} `TRIGGER`.`SEVERITY`: {EVENT.NAME} {Resolved} {TRIGGER.SEVERITY} `TRIGGER`.`SEVERITY` {EVENT.NAME} {Update} {TRIGGER.SEVERITY} `TRIGGER`.`SEVERITY` {EVENT.NAME}
- {Problem} — мапинг значений Problem\Resolved\Update в emoji (config: zabbix_status_emoji_map)
- `TRIGGER`.`SEVERITY` — мапинг значений Severity в emoji (config: zabbix_status_emoji_map)
В поле Сообщение копируется xml конфиг полностью, который приведен в файле actions.example. Копируйте его 1 в 1.
Во все шаблоны можете его вставить без изменений. Я немного попытался его править, но каждый раз потом получал ошибку парсинга xml. В итоге бросил. Автор перечисляет значение каждого парметра, так что можете попытаться настроишь шаблоны на свой вкус.
- <graphs></graphs> — прикреплять график (True\False)
- <graphlinks>True</graphlinks> — прикрепить ссылку url на History (True\False)
- <triggerlinks>True</triggerlinks> — прикрепить ссылку url из триггера (True\False)
- <tag>True</tag> — прикрепить теги (True\False)
- <graphs_period></graphs_period> — период графика в секундах
- <itemid></itemid> — передача itemid {ITEM.ID1}
- <triggerid></triggerid> — передача triggerid {TRIGGER.ID}
- <eventid></eventid>- передача eventid {EVENT.ID}
- <title></title> — заголовок графика {HOST.HOST} — {EVENT.NAME}
- <triggerurl></triggerurl> — передача url из триггера {TRIGGER.URL}
- <tags></tags> — передача списка тэгов из триггера {EVENT.TAGS}
Проверим работу уведомлений. Сначала через консоль.
# ./zbxTelegram.py @serveradmin_zabbix_group test test
В данном случае слова test менять нельзя. Именно они инициируют отправку тестового сообщения. Вот как оно выглядит.
То же самое можно сделать через web интерфейс.
Если все в порядке, подключайте данный тип уведомлений к пользователю, указывайте его в действиях и проверяйте. Уже не буду это подробоно описывать, так как устал. Материал и так очень объемный получился. В итоге уведомления в телеграме от этого скрипта будут выглядеть вот так:
Текст более информативен по дефолту и выглядит приятнее, графики в одном сообщении с текстом. В последней строке есть готовые ссылки на триггер, историю по итему. Только имейте ввиду, что url для ссылок берется из конфига и если у вас там указан localhost, то только с него и можно будет их посмотреть. Так что указывайте внешний, а не локальный url. Из минусов отмечу тоненькие графики без заливки. В скрипте от ableev они более наглядные.
Шаг третий: получаем событие и отображаем уведомления
- иконки, соответствующие критичностям триггеров;
- звуковое сопровождение всплывающих уведомлений;
- выполнение действия по нажатию на уведомление (SSH-логин, открытие ссылки, заведение тикета о проблеме и т. д.).
terminal-notifier
terminal-notifier
- можно устанавливать разные иконки для разных критичностей;
- можно формировать ссылки на графики в Zabbix и открывать их по клику на уведомление;
- можно реализовать открытие SSH-ссылок: увидели нотификацию -> кликнули -> сразу зашли на хост.
Growl
Для включения установите growl_enabled = True в settings.cfg.
- возможно, у вас приложение уже установлено;
- можно выбрать разные иконки под разные критичности;
- так же, как и в terminal-notifier, можно настроить действия по нажатию на уведомления.
Отправка уведомлений из Zabbix в Telegram
Как то я подумал о том, что было бы неплохо отправлять уведомления не на почту, а в TelegramХотелось получить что то интереснее, чем спам-рассылка по поводу и без повода. Telegram крут ещё и своими групповыми чатами (в том числе и приватными)
Установка каких либо дополнительных программ и библиотек меня вообще не впечатлила. Да и зачем всё это если можно использовать Telegram-бота и отправлять сообщения простым запросом
Первый шагНеобходимо создать бота в Telegram. Для этого нужно добавить в список контактов бота @BotFather, сказать ему /start и /newbot BotFather сперва спросит как назвать нового бота, а потом какое имя ему присвоить. В ответном сообщении вы получите всю необходимую информацию для его использования
Вы можете создать своего бота, а можете использовать моего Познакомьтесь,
его зовут @TradeNarK_ZabbixBot
его токен 256070243:SHAAHonjepm7mzR6doFLgSNAbKg3BNJzQQm Этого бота необходимо добавить либо к себе в список контактов либо в тот чат, куда вы планируете получать уведомления.
Эта информация нам пригодится немного позже.
Второй шаг Для того что бы отправить сообщение себе или в чат необходимо знать ID чата или контакта Сразу замечу, что по ID можно определить пользователь это или чат — ID чата начинается со знака «-» (минус)
Мой список контактовЧат для уведомленийКак и говорилось выше ID группы начинается со знака минус
Третий шагДля отправки сообщения достаточно выполнить зарос
# curl –header ‘Content-Type: application/json’ –request ‘POST’ –data ‘{“chat_id”:”_ID_”,”text”:”_MESSAGE_”}’ “https://api.telegram.org/bot_TOKEN_/sendMessage”
где _ID_ — ID чата или контакта полученный на втором шаге; _MESSAGE_ — текст сообщения;
_TOKEN_ — токен бота полученный на первом шаге;
Запрос приобретает вид:
# curl –header ‘Content-Type: application/json’ –request ‘POST’ –data ‘{“chat_id”:”1111111″,”text”:”test message for blog https://tradenark.com.ua here”}’ “https://api.telegram.org/bot256070243:SHAAHonjepm7mzR6doFLgSNAbKg3BNJzQQm/sendMessage”
и бот присылает сообщениеУбедившись что вся эта кухня работает нужно написать скрипт который поможет нам в отправке.
Смотрим дефолтное расположение скриптов для отправки
# grep -i AlertScriptsPath /etc/zabbix/zabbix_server.conf | grep -v ^# AlertScriptsPath=/usr/lib/zabbix/alertscripts
Теперь создаём скрипт в этой папке с таким содержимым:
# cat /usr/lib/zabbix/alertscripts/telegram_bot.sh #!/bin/bash TOKEN=’256070243:SHAAHonjepm7mzR6doFLgSNAbKg3BNJzQQm’ if ; then echo ‘Error! You must to define three params’ && exit 1 ; fi CHAT_ID=”$1″ SUBJECT=”$2″ MESSAGE=”$3″ # Определяем emoji для темы сообщения if ] then ICON=”uD83DuDE31″ elif ] then ICON=”uD83DuDC4C” else ICON=”u26A0″ fi curl -s –header ‘Content-Type: application/json’ –request ‘POST’ –data “{“chat_id”:”${CHAT_ID}”,”text”:”$ICON ${SUBJECT} ${MESSAGE}”}” “https://api.telegram.org/bot${TOKEN}/sendMessage” | grep -q ‘”ok”:false,’
Тут я добавил немного «развлекухи». В зависимости от темы бот будет добавлять смайлик. Как оказалось это одна из самых сложных задач. По той причине что вместо смайликов отображался текст / чистый кодРешение всё же нашлось. Для этого необходимо выбрать смайлик и определить его Unicode-формат. К примеру для обычного улыбающегося смайлика
Установка скрипта
Создание папки для скриптов:
mkdir /etc/zabbix/alertscripts chown root:zabbix /etc/zabbix/alertscripts chmod 750 /etc/zabbix/alertscripts
Создадим сам скрипт:
/etc/zabbix/alertscripts/telegram.sh
#!/bin/bash export LC_ALL="C" export LANG="en_US.UTF-8" #------------------------------------------------------------------------------ BOT_AUTH_TOKEN="553904595:AAHk16bcwKV72ULQMGnBY5eaUEm_d1dkHko" LOG_FILE="/var/log/zabbix/telegram.log" DATETIME=$(date '+%Y/%m/%d %H:%M:%S') CHAT_ID="$1" TEXT=$(echo "$2" | grep -v '.UNKNOWN. = .UNKNOWN.' | sed 's/\"//g') #------------------------------------------------------------------------------ if "${CHAT_ID}" == "getid" ; then RESULT=$(curl -sS -i --max-time 30 "https://api.telegram.org/bot${BOT_AUTH_TOKEN}/getUpdates" 2>&1) RC=$? if ${RC} -ne ; then echo "${RESULT}" exit 1 elif ! echo "${RESULT}" | grep -iq '"ok":true'; then echo "${RESULT}" exit 1 fi echo "${RESULT}" | awk -F'"chat":' '{print $2}' | awk -F'"date":' '{print $1}' | sort -u | grep --color -E "\-?{7,}" exit elif "${CHAT_ID}" =~ ^-?-9+$ && -n "${TEXT}" ; then echo " CHAT_ID:\"${CHAT_ID}\" TEXT=\"${TEXT}\"" >> "${LOG_FILE}" RESULT=$(curl -sS -i --max-time 30 \ --header 'Content-Type: application/json' \ --request 'POST' \ --data '{"chat_id": "'"${CHAT_ID}"'", "text": "'"${TEXT}"'"}' \ "https://api.telegram.org/bot${BOT_AUTH_TOKEN}/sendMessage" 2>&1) RC=$? if ${RC} -ne ; then echo "${RESULT}" | tee -a "${LOG_FILE}" echo '' >> "${LOG_FILE}" exit 1 elif ! echo "${RESULT}" | grep -iq '"ok":true'; then echo "${RESULT}" | tee -a "${LOG_FILE}" echo '' >> "${LOG_FILE}" exit 1 fi echo "${RESULT}" >> "${LOG_FILE}" echo '' >> "${LOG_FILE}" echo " Message was sent" exit else echo " CHAT_ID:\"${CHAT_ID}\" TEXT=\"${TEXT}\"" >> "${LOG_FILE}" echo " Invalid arguments" | tee -a "${LOG_FILE}" echo '' >> "${LOG_FILE}" exit 1 fi exit
Не забыть заменить BOT_AUTH_TOKEN в скрипте
Ребут и агента нет
Бывают случаи, когда агент был успешно установлен и настроен на хосте, мониторинг работает как надо. НО! При очередном запланированном перезапуске сервера (хоста) Zabbix-агент не смог запуститься.
Причин тому может быть несколько:
- Агент запускается от доменной учетной записи, но на момент старта сервера связи с доменом не оказалось.
- В момент запуска агент пытался запуститься, когда еще не “поднялся” доступ к сети.
При этом в файле лога агента может не быть какой-либо полезной информации, но она есть в системных журналах ОС. Чаще всего это поведение встречал в ОС Windows.
Решение достаточно простое: нужно установить для службы Windows режим запуска “Автоматически (отложенный запуск)”. В большинстве случаев проблема будет решена.
Быстро и просто!
Низкоуровневое обнаружение
Функция Низкоуровневого обнаружения (LLD) автоматически создает элементы и триггеры, которые позволяют отслеживать системы сервера, находящимся под наблюдением. Включение функции происходит через настройку атрибутов, которую можно сделать, пройдя по пути: «Настройка» → «Шаблоны» → «Обнаружение» (вкладка в строке с шаблоном) → вкладки «Правила обнаружения»/«Фильтры».
Что можно обнаружить
- Распространённые OID, используемые SNMP.
- Сетевые интерфейсы.
- Процессоры, их ядра.
- Файловые системы.
- Службы Windows.
- ODBC.
Дополнительные типы
Задать собственные типы низкоуровневого обнаружения возможно с применением формата JSON. Типы проверок, для которых можно указать список портов и интервал для них:
- SSH;
- LDAP;
- SMTP;
- FTP;
- HTTP;
- POP;
- NNTP;
- IMAP;
- TCP.
Если хост пропадает или обнаруживается, для события можно привязать любое действие — условия и операцию для них.
Дополнительные материалы по Zabbix
Онлайн курс по Linux
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Administrator Linux. Professional» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.
Что даст вам этот курс:
- Знание архитектуры Linux.
- Освоение современных методов и инструментов анализа и обработки данных.
- Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
- Владение основными рабочими инструментами системного администратора.
- Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
- Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.
Проверьте себя на вступительном тесте и смотрите подробнее программу по .
Рекомендую полезные материалы по Zabbix: |
Настройки системы |
---|
Видео и подробное описание установки и настройки Zabbix 4.0, а также установка агентов на linux и windows и подключение их к мониторингу. Подробное описание обновления системы мониторинга zabbix версии 3.4 до новой версии 4.0. Пошаговая процедура обновления сервера мониторинга zabbix 2.4 до 3.0. Подробное описание каждого шага с пояснениями и рекомендациями. Подробное описание установки и настройки zabbix proxy для организации распределенной системы мониторинга. Все показано на примерах. Подробное описание установки системы мониторинга Zabbix на веб сервер на базе nginx + php-fpm. |
Мониторинг служб и сервисов |
Мониторинг температуры процессора с помощью zabbix на Windows сервере с использованием пользовательских скриптов. Настройка полноценного мониторинга web сервера nginx и php-fpm в zabbix с помощью скриптов и пользовательских параметров. Мониторинг репликации mysql с помощью Zabbix. Подробный разбор методики и тестирование работы. Описание настройки мониторинга tcp служб с помощью zabbix и его инструмента простых проверок (simple checks) Настройка мониторинга рейда mdadm с помощью zabbix. Подробное пояснение принципа работы и пошаговая инструкция. Подробное описание мониторинга регистраций транков (trunk) в asterisk с помощью сервера мониторинга zabbix. Подробная инструкция со скриншотами по настройке мониторинга по snmp дискового хранилища synology с помощью сервера мониторинга zabbix. |
Мониторинг различных значений |
Настройка мониторинга web сайта в zabbix. Параметры для наблюдения — доступность сайта, время отклика, скорость доступа к сайту. Один из способов мониторинга бэкапов с помощью zabbix через проверку даты последнего изменения файла из архивной копии с помощью vfs.file.time. Подробное описание настройки мониторинга размера бэкапов в Zabbix с помощью внешних скриптов. Пример настройки мониторинга за временем делегирования домена с помощью Zabbix и внешнего скрипта. Все скрипты и готовый шаблон представлены. Пример распознавания и мониторинга за изменением значений в обычных текстовых файлах с помощью zabbix. Описание мониторинга лог файлов в zabbix на примере анализа лога программы apcupsd. Отправка оповещений по событиям из лога. |
Оповещения в Telegram
Соответственно из этих метрик мы сделали оповещения через Telegram – в СушиВок для оперативной информации используется именно Telegram, а не почта. Причем, в Zabbix оповещения для Telegram настраиваются «из коробки».
В оповещениях операционный отдел просил указывать всю информацию о точке – количество поваров, сумма чеков, количество чеков в комплектации и т.д., чтобы можно было полностью понимать, какая ситуация на точке была во время сбоя. Из-за этого в выражении триггера и нужны были эти лишние всегда истинные неравенства. Но при большом объёме срабатывающих триггеров из-за всей этой информации сообщения стали не читаемы – получалось полотно из слов.
Поэтому я воспользовался советом Родислава Гандапаса из книги «К выступлению готов», где он при подготовке к выступлениям на карточках рекомендует использовать пиктограммы, т.к. они быстрее читаются при беглом взгляде.
Так в наших оповещениях появились:
-
ножи – это кухня;
-
черепашки – это доставка;
-
огоньки – если проблема не закрыта больше 10 мин.
Операционный отдел был очень доволен данными оповещениями.
Отправка уведомлений в telegram через webhook
Начиная с 5-й версии, в Zabbix из коробки работают уведомления в telegram через механизм webhook. Чтобы настроить его, переходите в Администрирование -> Способы оповещений и выбирайте там Telegram.
Внутри увидите некоторые параметры. Можно так же посмотреть текст скрипта, который используется для отправки оповещений. В целом, тут сейчас не обязательно что-то менять. Дефолтные настройки полностью рабочие. Надо только указать токен бота.
Тут же можете шаблоны поправить так, как вам нравится. Это нововведение 5-й версии Zabbix – правка шаблонов оповещений в настройках самих оповещений. Это позволяет создавать для каждого типа свои шаблоны. Очень удобно.
Давайте теперь проверим отправку уведомлений через этот способ. Нажимайте Тест.
Я указал текст сообщения, заголовок, свой id и token бота. В итоге мне в личку пришло сообщение от бота.
Если хотите отправить оповещение в группу, то сначала создайте ее, а потом добавьте туда бота. Не потеряйте минус в id группы. Его тоже нужно указывать. Я сначала не понял этого и копировал id группы без минуса. В итоге, оповещения в группу не отправлялись.
Итак, убедились, что сообщения в telegram нормально отправляются. С технической стороны проблем нет. Теперь настроим отправку уведомлений по событиям. Я обычно для этого использую тестовый триггер. В стандартном шаблоне zabbix для OS Linux есть элемент данных Number of logged in users, который считает количество залогиненных пользователей. Я для него делаю триггер, чтобы он срабатывал, когда пользователей 2 и более. И с его помощью тестирую уведомления, просто подключаясь на сервер по ssh двумя подключениями одновременно.
Теперь идем в настройки пользователя и добавляем ему способ оповещений через telegram.
Если у вас ранее не работали никакие уведомления, то не забудьте активировать Действия.
У нас все настроено для отправки оповещений в telegram. Добейтесь срабатывания триггера и проверяйте телеграм канал, в который настроили отправку сообщений.
Все работает. Если вам достаточно такого функционала, то можно оставлять и пользоваться. Но как по мне, так бледновато эти уведомления выглядят. Можно немного шаблоны изменить, чтобы было более читаемо. Так же есть возможность все настроить более красиво и наглядно, да еще и с графиками. Дальше я расскажу еще 2 разных способа отправки уведомлений из zabbix в telegram с графиками и готовыми ссылками на события.
Мониторинг подписчиков telegram в Zabbix
Переходим в web интерфейс zabbix-server, создаем новый шаблон и добавляем туда новый item.
В качестве url указано следующее значение:
https://api.telegram.org/bot{$TOKEN_BOT}/getChatMembersCount?chat_id={$CHANNEL_NAME}
Ниже указан Тип информации: Числовой (целое положительное). В предобработке делаем фильтр по JSONPath, чтобы получить числовое значение из json.
Добавляем в шаблон макросы для названий группы и канала, а так же токена бота.
Из основного все. По аналогии делается мониторинг за пользователями группы (чата). Вот пример моего шаблона — zabbix-telegram.xml. Не забудьте указать свои макросы для названий канала, группы и токена бота.
В шаблоне несколько айтемов:
- TG Group — число подписчиков группы, обновляется раз в 10 минут;
- TG Chat — число подписчиков чата, обновляется раз в 10 минут;
- Изменение подписчиков — зависимый элемент данных, фиксирует относительное изменение числа подписчиков группы после каждой проверки;
- Изменения за сутки — сумма значений предыдущего айтема изменение подписчиков за последние 24 часа;
- Подписчики по дням — запускается раз в сутки в 23:59, чтобы зафиксировать количество подписчиков в этот день.
На этом у меня по мониторингу подписчиков телеграм в zabbix все.
Действие
Итак, Имя — названия действия Тема по умолчанию *{HOST.NAME1} — *`{TRIGGER.STATUS}`* — {EVENT.DATE} — {EVENT.TIME}* Сообщение по умолчанию {TRIGGER.NAME}
Если Вам нужно сообщение о восстановлении, то ставим галочку и заполняем поля аналогично
На вкладке Условия добавляем какие душе угодно зависимости: узлы/группы/шаблоны, важность триггеров, время и прочее.. На вкладке Операции добавляем операцию с шагом от 1 к 1, добавляем группы пользователей или пользователей, которым нужно отправлять сообщение (ну и вообще для которых это действие будет работать), выбираем способ оповещения в Отправлять только через. Обновляем, добавляем, сохраняем
Обновляем, добавляем, сохраняем.
На вкладке Операции добавляем операцию с шагом от 1 к 1, добавляем группы пользователей или пользователей, которым нужно отправлять сообщение (ну и вообще для которых это действие будет работать), выбираем способ оповещения в Отправлять только через. Обновляем, добавляем, сохраняем.
Настройка повторяющегося оповещения
После того, как убедились, что тестовый триггер работает, настроим для него повторяющееся уведомление. Для этого идем в раздел Настройка -> Действия и нажимаем Создать действие.
Во вкладке Действие указываете имя и добавляете тестовый триггер.
Дальше переходим в раздел Операции и указываем длительность шага равное 1 минуте. Добавляем шаг с параметром 1 — 0 и указываем необходимое действие. В примере я просто буду отправлять всем администраторам оповещение на почту.
Сохраняйте настроенное действие и ждите срабатывания триггера. Вы должны получать оповещение на почту каждую минуту до тех пор, пока триггер не будет отключен
Обращаю внимание, что вы получите оповещение и от стандартного правила, которое шлет один раз и от нового, которое повторяющееся. Чтобы все было красиво и удобно, необходимо отключать стандартное оповещение и создавать свои с определенными правилами в зависимости от типа триггера
Заключение
Теперь у нас zabbix работает современно, модно, молодежно Использует telegram для отправки оповещений с графиками, ссылками и т.д. Функционал удобный и настраивается достаточно просто. У меня практически не было затруднений, когда разбирал тему. Беру себе на вооружение и использую по необходимости. Хотя сам не люблю оповещения в телеграме, и чаще всего их отключаю, как и от остальных программ. Не нравится, когда меня в каждую минуту могут отвлечь какие-то события. Проверка почты раз в 30 минут самая подходящая интенсивность для меня.
Тем не менее, при работе коллектива, оповещения в общую группу могут быть очень удобны. Особенно, если только на мониторинге сидят отдельные люди, в чью задачу входит оперативная реакция на события.
Заключение
Я показал общий принцип работы с google api в Zabbix. Сам еще подробно не разбирался и дашборды не составлял. Остановился ровно на том, на чем закончил статью. Дальше буду все это разрабатывать и настраивать под конкретные задачи и нужды. Потом все это уедет вместе с остальными метриками в grafana для удобного дашборда. Возможно покажу все это уже в готовом виде.
Для более сложных и разнообразных запросов надо сделать один скрипт с передачей параметров даты, чтобы не плодить скрипты под каждый айтем. Хотелось бы получить какую-то обратную связь от тех, кто всем этим уже занимался. Тема вообще не гуглится, разбирался во всем сам. Думаю, что в основном для работы с api используются готовые библиотеки под различные языки программирования. Прямые запрос через curl больше на экзотику тянет.
И еще у меня есть некоторые подозрения, что я пошел по сложному пути, и есть способ доступа к api попроще, без протухающих токенов. Но я не понял, как сделать по-другому.
Заключение
В своем материале я рассмотрел два различных способа, с помощью которых можно мониторить любой удаленный сервис по протоколу tcp, либо локальную службу на сервере linux. Конкретно в моих примерах можно было воспользоваться вторым способом в обоих случаях. Я этого не сделал, потому что первым способом я не просто проверяю, что служба запущена, я еще и обращаюсь к ней по сети и проверяю ее корректную работу для удаленного пользователя.
Разница тут получается вот в чем. Допустим, сервер squid у вас запущен и работает на сервере. Проверка работы локальной службы показывает, что сервис работает и возвращает значение 1. Но к примеру, вы настраивали firewall и где-то ошиблись. Сервис стал недоступен по сети, пользователи не могут им пользоваться. При этом мониторинг будет показывать, что все в порядке, служба запущена, хотя реально она не может обслужить запросы пользователей. В таком случай только удаленная проверка покажет, что с доступностью сервиса проблемы и надо что-то делать.
Из этого можно сделать вывод, что система мониторинга zabbix предоставляет огромные возможности по мониторингу. Какой тип наблюдения и сбора данных подойдет в конкретном случае нужно решать на месте, исходя из сути сервиса, за которым вы наблюдаете.