Работая в технической поддержке помимо всех обязанностей была обязанность следить и за работой каналов связи, а это все осуществлялось по средством сервиса Grafana который брал нужные метрики из Zabbix. Ну а так как сама специфика работы такова что ты не всегда сидишь за своим рабочем местом, возникла идея это все немного автоматизировать и сделать так чтобы в случае падения канала связи ты получил оповещение на телефон, например в мессенджер. Но дело в том что доступа к системе zabbix у меня не было и расширенного доступа к Grafana также (и да, я знаю что grafana тоже умеет отправлять алерты).
Так как же это сделать подумал я. Подумав немного я нашел решение. Понимаю, мое решение на какое-то открытие не претендует. Так может будет полезно, а может кто-то предложит что-то. Или же кто-то скажет что все плохо.
Логика работы проста, я с помощью команды ping проверяю доступность канала, соответственно если ping не прошел, то в 99% канал недоступен.
Для начала я сделал самого бота, через slack-api.
Зашел на api slack https://api.slack.com/apps
Перешел на страницу your apps
Создал бота
-
Далее создал вебхук и выбрал канал с которым он будет взаимодействовать получилось что-то на подобии https://hooks.slack.com/services/xxxxxxxxxxx/xxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxx
Также сгенерировался автоматом код bash с помощью которого можно из терминала отправлять разные сообщения, Типа hello World. Вот это код будем использовать для отправки алертов
Далее переходим к созданию скрипта который будет делать нужную работу для нас
#!/bin/bash
provider1=xxx.xxx.xxx.xxx
if /bin/ping -c 2 $sevlig > /dev/null 2> /dev/null
then
echo 'канал в норме';
else
curl -X POST -H 'Content-type: application/json' --data '{"text":" недоступен канал provider1"}' https://hooks.slack.com/services/xxxx/xxxx/xxxxxx;
fi
Пояснения к коду
#!/bin/bash - это начало скрипта(UPD: правильно меня поправили, это в какой оболочке будет скрипт выполняться)
-
provider1=xxx.xxx.xxx.xxx
переменные которым присвоено значение, в данном случае ip-адрес провайдера
if /bin/ping -c 2 $sevlig > /dev/null 2> /dev/null
здесь мы запустили команду ping
/bin/ping -c 2 - сама команда ping, отправляем два пакета и ждем ответ
> /dev/null 2> /dev/null - перенаправление результата выполнения команды в null, так как нам текст выполнения команды не нужен, нам нужен код возврата
если код возврата равен 0, то значит все пакеты были доставлены без потерь.
then echo 'канал в норме';
- тут скрипт выводит сообщение, если был код возврата 0, т.е. потерь не было и на этом работа скрипта завершается.
else curl -X POST -H 'Content-type: application/json' --data '{"text":" недоступен канал provider1 }' https://hooks.slack.com/services/xxxxxxxx/xxxxxxxxxxx/xxxxxxxxxxxxxxxx;
если код возврата был не 0, а другой, т.е. были потери, значит есть проблемы с доступностью канала, тогда выполняется вторая часть команды и она отправляет уже сообщение через curl через webhook в канал slack
fi - оператор окончания скрипта
Сохраняем все это как скриптовый файл bash и делаем исполняемым
Далее автоматизируем работу скрипта чтобы он мог сам запускался раз в 10 минут, для этого я использовал crontab
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/10 * * * * /home/us/1.sh
И вот в случае падения канала, мы в slack видим такое:
Спасибо что дочитали.
Комментарии (13)
kalach_89
22.11.2021 08:37Ну в данном случае при недоступности канала будет приходить сообщение каждые 10 минут. А если таких каналов несколько и доступность отсутствует больше суток - то не оч.удобно.
Сам использую похожие уведомления в ТГ для мониторинга 100+ каналов с добавлением БД.
В таблице 3 поля: ip адрес, состояние (0 и 1), информация (договор, номер ТП)
Сначала проверяются все каналы с состоянием 0. Если есть недоступный, то приходит уведомление о недоступности со всей сопутствующей информацией и меняется состояние на 1.
Дальше проверяются все каналы с состоянием 1. Если канал доступен - состояние о возобновлении доступности и сброс статуса на 0.
Oldster
22.11.2021 10:43Сам использую похожие уведомления в ТГ для мониторинга 100+ каналов с добавлением БД.
имхо, проще и правильнее поставить Zabbix.
kalach_89
23.11.2021 00:37В компании используется Operation Manager, вот не нашел как в нем мониторить доступ каналов, а с сетевого оборудования по SNMP снимается только наличие неактивных каналов.
Так что написал такое решение.
Oldster
22.11.2021 08:38Как самый простой мониторинг пойдет, но лучше попросить админов настроить это через тот же zabbix. Как минимум получите сообщение когда канал восстановиться и сколько он был не доступен.
zamsisadmin Автор
22.11.2021 09:22Проблема в том что это у них не в приоритете, хотя сейчас они делают понемногу, но когда нужно было это быстро получить, был только такой способ
Oldster
22.11.2021 10:45+1Странные приоритеты у ваших админов. Если канал ляжет, то все остальное будет уже не важно.
zamsisadmin Автор
22.11.2021 12:33Ну у нас есть Grafana где в графическом представлении можно мониторить все сетевые устройства, вот мы и должны постоянно наблюдать там состояние каналов
Jsty
22.11.2021 11:13Настроить alert в уже работающем zabbix дело пары минут.
Конечно, если нужны алерты в slack, а slack не прикручен, то придется потратить еще 5 минут, чтобы отправку в slack настроить.
rudinandrey
22.11.2021 09:16спасибо большое, как введение в технологию простыми словами. сколько раз все смотрел на этот слак, что-то все ботов делали, алерты. как? даже разбираться желания не было :) оказывается все не очень просто, а очень просто. Hello world себе в канал отослал, остальное дело техники. Спасибо еще раз!
zamsisadmin Автор
22.11.2021 09:24да, это оказалось даже проще чем через телеграмм, так как тут лучше можно сделать ограничение на просмотр канала, а если в телеграмме делать закрытый чат или канал, больше мороки чтобы заставить работать бота, хотя я думал тоже что со слак будет труднее
zamsisadmin Автор
Буду рад комментариям, замечаниям и т.д.