Отправка уведомлений в Telegram-бот с помощью FunctionGraph

В этой инструкции описан процесс настройки быстрых уведомлений о состоянии сервисов облака Advanced и отправки их в Telegram-bot. Например, можно организовать работу так, чтобы бот присылал вам уведомления, если потребление vCPU, памяти или диска виртуальной машины превысит заданное пороговое значение.

Введение

Для настройки и работы быстрых уведомлений потребуются следующие сервисы:

Архитектура решения

../_images/schm__telegram-notifications.svg
  1. Cloud Eye — сервис мониторинга, отслеживает состояние облачных ресурсов и оповещает о достижении пороговых значений.

  2. При достижении пороговых значений аварийный сигнал приходит в Simple Message Notification — сервис для отправки уведомлений о событиях.

  3. Уведомление из Simple Message Notification становится триггером для запуска функции в FunctionGraph — сервисе для выполнения кода в бессерверной среде.

  4. FunctionGraph отрабатывает функцию и отправляет запрос в Telegram-бот.

Telegram-бот получает данные, записанные в коде функции, и присылает пользователю уведомление.

Создайте топик в сервисе SMN

В этом примере мы создадим оповещение о превышении пороговых значений CPU в сервисе ECS.

  1. Войдите в консоль управления.

  2. В панели управления выберите раздел Application → Simple Message Notification (SMN).

  3. В разделе Topic Management → Topics перейдите к созданию топика — нажмите Create Topic.

  4. Задайте параметры топика:

    • Topic Name — введите название топика, например, «CPU-topic».

    • Enterprise Project — выберите нужный проект или оставьте по умолчанию «default».

  5. Нажмите OK, чтобы сохранить топик.

Создайте правило в Cloud Eye

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

  1. В панели управления выберите раздел Management & Deployment → Cloud Eye.

  2. В меню слева выберите Alarm Management → Alarm Rules.

  3. Отметьте нужный облачный сервис и нажмите Create Alarm Rule. Задайте название, настройте политику и уведомления аварийных сигналов:

    • Name — укажите название сигнала. Например, «CPU-alarm».

    • Enterprise Project — выберите нужный проект или оставьте по умолчанию «default».

    • Resource Type — выберите нужный тип ресурса. В нашем примере это Elastic Cloud Server.

    • Dimension — по умолчанию ECSs.

    • Monitoring Scope — выберите Specific Resources. В появившемся окне отметьте и переместите нужные ресурсы во второе окно. В этом примере — это виртуальная машина ECS.

    • Мethod — выберите Configure Manually.

    • Alarm Policy — установите в поле политику отправки сигналов.

      1. В колонке Metric Name выберите CPU Usage.

      2. Alarm Policy — выберите Raw Data, 3 consecutive periods >= 60 % (укажите нужное процентное значение), Every 5 minutes.

      3. Alarm Severity — оставьте по умолчанию Major.

    • Alarm Notification — переместите переключатель вправо и настройте уведомления.

    • Notification Object — выберите ранее созданный топик в сервисе SMN.

    Прочие настройки оставьте по умолчанию.

  4. Нажмите Create.

Cloud Eye будет опрашивать состояние виртуальной машины каждые пять минут и при достижении порогового значения пользовательских метрик отправит уведомление с помощью сервиса Simple Massage Notification.

Создайте Telegram-бот

Создадим бота, в который будут приходить сообщения.

  1. Установитe BotFather в Telagram.

  2. Введите команду /newbot.

  3. Дайте название боту и укажите сокращенное название.

  4. BotFather пришлет сообщение об успешном создании бота и токен самого бота.

Создайте функцию в FunctionGraph

Для работы с функцией в FunctionGraph потребуется готовый архив c функцией.

  1. Перейдите в консоль сервиса Computing → FunctionGraph.

  2. В боковом меню выберите: Functions → Function List.

  3. Нажмите Import Function.

  4. Загрузите ранее скачанный zip-архив с готовой функцией, нажав Select File.

  5. Откроется окно с настройкой функции. Загруженный из архива код отобразится на вкладке Code.

  6. Перейдите на вкладку Configuration, чтобы добавить токен бота. Заполните поля:

    • Enterprise Project — укажите проект. Выберите тот же проект, к которому принадлежат экземпляры SMN и Cloud Eye.

    • Environment Variables:

      1. Нажмите Edit.

      2. Из BotFather скопируйте токен бота. Токен находится в сообщении об успешном создании бота и написан после слов «Use this token to access the HTTP API:».

      3. Вставьте токен в поле Value.

      4. Нажмите Save.

    ../_images/s__functiongraph-configuration.png
  7. Сохраните настройки на вкладке, нажав Save.

  8. Перейдите в группу Telegram, куда будут приходить сообщения от бота, и добавьте его. Бот добавляется в групповой чат также, как персональный профиль.

    Внимание

    Бот должен быть добавлен в чат непосредственно перед подстановкой токена в адресную строку браузера. В этом случае отобразится необходимая информация о chat_id.

  9. Перейдите в строку браузера:

    1. Вставьте следующий запрос:

      https://api.telegram.org/bot<YourBOTToken>/getUpdates
      
    2. Вместо <YourBOTToken> подставьте токен бота, который был создан на предыдущем шаге.

      Пример отображения запроса с подставленным токеном:

      https://api.telegram.org/bot5555555:AAGspBtbjz4FXTRA1O8sg11hfgfjgT6NWA/getUpdates
      

    Появится текст с данными бота.

  10. Скопируйте chat_id из API-запроса:

    1. Нажмите Ctrl + F/ Cmd + F (для Mac OS) для поиска по слову «сhat». ID групп всегда начинается с минуса -. Например, «-99999999».

    2. Скопируйте ID вместе со знаком минуса.

  11. Вернитесь в FunctionGraph к редактируемому коду функции на вкладке Code.

    1. Пролистайте код до конца страницы.

    2. Найдите строку с текстом «chat_id».

    3. Вставьте скопированный chat_id в код функции в соотвествующей строке. Нажмите кнопку Save над окном редактирования.

    Пример кода после подстановки chat_id

    data = {
            "chat_id": -99999999,
            #"text": os.environ["TEXT"],
            "text": text,
            "parse_mode": "HTML"
     }
    
  12. В консоли FunctionGraph перейдите на вкладку Triggers для подключения оповещений из SMN.

  13. Нажмите Create Triggers.

    • Выберите Trigger Type — «Simple Massage Notification».

    • Выберите Topic Name — название ранее созданного топика SMN.

    • Нажмите OK.

  14. Нажмите Save для сохранения настроек.

Функция настроена для отправки оповещений.

Запустите нагрузочное тестирование для нужного параметра, чтобы проверить работу оповещений. Для этого можно использовать инструмент Cloud Performance Test Service.