Как стать автором
Обновить

Как я сделал простой мониторинг каналов с отправкой оповещений в slack без опыта

Время на прочтение3 мин
Количество просмотров5K

Работая в технической поддержке помимо всех обязанностей была обязанность следить и за работой каналов связи, а это все осуществлялось по средством сервиса Grafana который брал нужные метрики из Zabbix. Ну а так как сама специфика работы такова что ты не всегда сидишь за своим рабочем местом, возникла идея это все немного автоматизировать и сделать так чтобы в случае падения канала связи ты получил оповещение на телефон, например в мессенджер. Но дело в том что доступа к системе zabbix у меня не было и расширенного доступа к Grafana также (и да, я знаю что grafana тоже умеет отправлять алерты).

Так как же это сделать подумал я. Подумав немного я нашел решение. Понимаю, мое решение на какое-то открытие не претендует. Так может будет полезно, а может кто-то предложит что-то. Или же кто-то скажет что все плохо.

Логика работы проста, я с помощью команды ping проверяю доступность канала, соответственно если ping не прошел, то в 99% канал недоступен.

Для начала я сделал самого бота, через slack-api.

  1. Зашел на api slack https://api.slack.com/apps

  2. Перешел на страницу your apps

  3. Создал бота

  4. Далее создал вебхук и выбрал канал с которым он будет взаимодействовать получилось что-то на подобии https://hooks.slack.com/services/xxxxxxxxxxx/xxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxx

    Также сгенерировался автоматом код bash с помощью которого можно из терминала отправлять разные сообщения, Типа hello World. Вот это код будем использовать для отправки алертов

    код отправки Hello World
    код отправки 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 видим такое:

Пример алерта
Пример алерта

Спасибо что дочитали.

Теги:
Хабы:
Всего голосов 3: ↑3 и ↓0+3
Комментарии13

Публикации

Истории

Работа

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область