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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Работая в технической поддержке помимо всех обязанностей была обязанность следить и за работой каналов связи, а это все осуществлялось по средством сервиса 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    -   это начало скрипта

  • 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 видим такое:

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

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

Источник: https://habr.com/ru/post/590573/


Интересные статьи

Интересные статьи

Любой Android разработчик работал с кнопками, поэтому видел ripple эффект и всю его красоту.Иногда хочется реализовать что-нибудь кастомное нежели стандартные вещи, которые уже предоставляются компоне...
Привет, Хабр! Наш проект "Пятерочки #налету", описанный в статье "Как тебе такое, Джефф Безос?"продолжает развиваться - надеемся, что вскоре дадим по нему апдейт. Ну...
Итак, я продолжу статью, посвященную мониторингу безопасности облачных провайдеров. В первой части я рассказывал об опыте Cisco в работе с внешними облачными сервисами, а также о наблюдениях Cisc...
Cтатья будет полезна тем, кто думает какую выбрать CMS для интернет-магазина, сравнивает различные движки, ищет в них плюсы и минусы важные для себя.
В этой статье я расскажу как использовать pinba совместно с clickhouse и grafana вместо pinba_engine и pinboard. На php-проекте pinba — пожалуй единственный надёжный способ понять, что происходи...