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

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

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

Комментарии (13)


  1. zamsisadmin Автор
    21.11.2021 21:19
    +2

    Буду рад комментариям, замечаниям и т.д.


  1. kalach_89
    22.11.2021 08:37

    Ну в данном случае при недоступности канала будет приходить сообщение каждые 10 минут. А если таких каналов несколько и доступность отсутствует больше суток - то не оч.удобно.

    Сам использую похожие уведомления в ТГ для мониторинга 100+ каналов с добавлением БД.

    В таблице 3 поля: ip адрес, состояние (0 и 1), информация (договор, номер ТП)

    Сначала проверяются все каналы с состоянием 0. Если есть недоступный, то приходит уведомление о недоступности со всей сопутствующей информацией и меняется состояние на 1.

    Дальше проверяются все каналы с состоянием 1. Если канал доступен - состояние о возобновлении доступности и сброс статуса на 0.


    1. Oldster
      22.11.2021 10:43

      Сам использую похожие уведомления в ТГ для мониторинга 100+ каналов с добавлением БД.

      имхо, проще и правильнее поставить Zabbix.


      1. kalach_89
        23.11.2021 00:37

        В компании используется Operation Manager, вот не нашел как в нем мониторить доступ каналов, а с сетевого оборудования по SNMP снимается только наличие неактивных каналов.

        Так что написал такое решение.


  1. Oldster
    22.11.2021 08:38

    Как самый простой мониторинг пойдет, но лучше попросить админов настроить это через тот же zabbix. Как минимум получите сообщение когда канал восстановиться и сколько он был не доступен.


    1. zamsisadmin Автор
      22.11.2021 09:22

      Проблема в том что это у них не в приоритете, хотя сейчас они делают понемногу, но когда нужно было это быстро получить, был только такой способ


      1. Oldster
        22.11.2021 10:45
        +1

        Странные приоритеты у ваших админов. Если канал ляжет, то все остальное будет уже не важно.


        1. zamsisadmin Автор
          22.11.2021 12:33

          Ну у нас есть Grafana где в графическом представлении можно мониторить все сетевые устройства, вот мы и должны постоянно наблюдать там состояние каналов


      1. Jsty
        22.11.2021 11:13

        Настроить alert в уже работающем zabbix дело пары минут.

        Конечно, если нужны алерты в slack, а slack не прикручен, то придется потратить еще 5 минут, чтобы отправку в slack настроить.


  1. rudinandrey
    22.11.2021 09:16

    спасибо большое, как введение в технологию простыми словами. сколько раз все смотрел на этот слак, что-то все ботов делали, алерты. как? даже разбираться желания не было :) оказывается все не очень просто, а очень просто. Hello world себе в канал отослал, остальное дело техники. Спасибо еще раз!


    1. zamsisadmin Автор
      22.11.2021 09:24

      да, это оказалось даже проще чем через телеграмм, так как тут лучше можно сделать ограничение на просмотр канала, а если в телеграмме делать закрытый чат или канал, больше мороки чтобы заставить работать бота, хотя я думал тоже что со слак будет труднее


  1. Basyuk93
    22.11.2021 12:34

    #!/bin/bash - это то, с какой оболочки будет выполняться скрипт.


  1. Arsmerk_true
    22.11.2021 15:41

    молодец, из таких простых скриптов и вырастают профи