Отправка уведомлений в Telegram-бот с помощью FunctionGraph
В этой инструкции описан процесс настройки быстрых уведомлений о состоянии сервисов облака Advanced и отправки их в Telegram-bot. Например, можно организовать работу так, чтобы бот присылал вам уведомления, если потребление vCPU, памяти или диска виртуальной машины превысит заданное пороговое значение.
Введение
Для настройки и работы быстрых уведомлений потребуются следующие сервисы:
Архитектура решения
-
Cloud Eye — сервис мониторинга, отслеживает состояние облачных ресурсов и оповещает о достижении пороговых значений.
-
При достижении пороговых значений аварийный сигнал приходит в Simple Message Notification — сервис для отправки уведомлений о событиях.
-
Уведомление из Simple Message Notification становится триггером для запуска функции в FunctionGraph — сервисе для выполнения кода в бессерверной среде.
-
FunctionGraph отрабатывает функцию и отправляет запрос в Telegram-бот.
Telegram-бот получает данные, записанные в коде функции, и присылает пользователю уведомление.
Создайте топик в сервисе SMN
В этом примере мы создадим оповещение о превышении пороговых значений CPU в сервисе ECS.
-
Войдите в консоль управления Advanced:
-
В списке сервисов выберите Server Migration Service.
-
В разделе Topic Management → Topics перейдите к созданию топика — нажмите Create Topic.
-
Задайте параметры топика:
-
Topic Name — введите название топика, например, «CPU-topic».
-
Enterprise Project — выберите нужный проект или оставьте по умолчанию «default».
См.также
-
-
Нажмите OK, чтобы сохранить топик.
Создайте правило в Cloud Eye
В этом примере мы создадим политику оповещения, при которой каждые пять минут опрашивается состояние виртуальной машины ECS, и бот присылает уведомление при достижении ВМ пороговых значений.
-
В панели управления выберите раздел Management & Deployment → Cloud Eye.
-
В меню слева выберите Alarm Management → Alarm Rules.
-
Отметьте нужный облачный сервис и нажмите Create Alarm Rule. Задайте название, настройте политику и уведомления аварийных сигналов:
-
Name — укажите название сигнала. Например, «CPU-alarm».
-
Enterprise Project — выберите нужный проект или оставьте по умолчанию «default».
-
Resource Type — выберите нужный тип ресурса. В нашем примере это Elastic Cloud Server.
-
Dimension — по умолчанию ECSs.
-
Monitoring Scope — выберите Specific Resources. В появившемся окне отметьте и переместите нужные ресурсы во второе окно. В этом примере — это виртуальная машина ECS.
-
Method — выберите Configure Manually.
-
Alarm Policy — установите в поле политику отправки сигналов.
-
В колонке Metric Name выберите CPU Usage.
-
Alarm Policy — выберите Raw Data, 3 consecutive periods >= 60 % (укажите нужное процентное значение), Every 5 minutes.
-
Alarm Severity — оставьте по умолчанию Major.
-
-
Alarm Notification — переместите переключатель вправо и настройте уведомления.
-
Notification Object — выберите ранее созданный топик в сервисе SMN.
Прочие настройки оставьте по умолчанию.
-
-
Нажмите Create.
Cloud Eye будет опрашивать состояние виртуальной машины каждые пять минут и при достижении порогового значения пользовательских метрик отправит уведомление с помощью сервиса Simple Message Notification.
Создайте Telegram-бот
Создадим бота, в который будут приходить сообщения.
-
Установите BotFather в Telegram.
-
Введите команду /newbot.
-
Дайте название боту и укажите сокращенное название.
-
BotFather пришлет сообщение об успешном создании бота и токен самого бота.
Создайте функцию в FunctionGraph
Для работы с функцией в FunctionGraph потребуется готовый архив c функцией.
-
Перейдите в консоль сервиса Computing → FunctionGraph.
-
В боковом меню выберите: Functions → Function List.
-
Нажмите Import Function.
-
Загрузите ранее скачанный zip-архив с готовой функцией, нажав Select File.
-
Откроется окно с настройкой функции. Загруженный из архива код отобразится на вкладке Code.
-
Перейдите на вкладку Configuration, чтобы добавить токен бота. Заполните поля:
-
Enterprise Project — укажите проект. Выберите тот же проект, к которому принадлежат экземпляры SMN и Cloud Eye.
-
Environment Variables:
-
Нажмите Edit.
-
Из BotFather скопируйте токен бота. Токен находится в сообщении об успешном создании бота и написан после слов «Use this token to access the HTTP API:».
-
Вставьте токен в поле Value.
-
Нажмите Save.
-
-
-
Сохраните настройки на вкладке, нажав Save.
-
Перейдите в группу Telegram, куда будут приходить сообщения от бота, и добавьте его. Бот добавляется в групповой чат также, как персональный профиль.
ВниманиеБот должен быть добавлен в чат непосредственно перед подстановкой токена в адресную строку браузера. В этом случае отобразится необходимая информация о chat_id.
-
Перейдите в строку браузера:
-
Вставьте следующий запрос:
https://api.telegram.org/bot<YourBOTToken>/getUpdates -
Вместо <YourBOTToken> подставьте токен бота, который был создан на предыдущем шаге.
Пример отображения запроса с подставленным токеном:
Появится текст с данными бота.
-
-
Скопируйте chat_id из API-запроса:
-
Нажмите Ctrl + F/ Cmd + F (для Mac OS) для поиска по слову «сhat». ID групп всегда начинается с минуса -. Например, «-99999999».
-
Скопируйте ID вместе со знаком минуса.
-
-
Вернитесь в FunctionGraph к редактируемому коду функции на вкладке Code.
-
Пролистайте код до конца страницы.
-
Найдите строку с текстом «chat_id».
-
Вставьте скопированный chat_id в код функции в соответствующей строке. Нажмите Save над окном редактирования.
Пример кода после подстановки chat_id -
-
В консоли FunctionGraph перейдите на вкладку Triggers для подключения оповещений из SMN.
-
Нажмите Create Triggers.
-
Выберите Trigger Type — «Simple Message Notification».
-
Выберите Topic Name — название ранее созданного топика SMN.
-
Нажмите OK.
-
-
Нажмите Save для сохранения настроек.
Функция настроена для отправки оповещений.
Запустите нагрузочное тестирование для нужного параметра, чтобы проверить работу оповещений. Для этого можно использовать инструмент Cloud Performance Test Service.
- Введение
- Архитектура решения
- Создайте топик в сервисе SMN
- Создайте правило в Cloud Eye
- Создайте Telegram-бот
- Создайте функцию в FunctionGraph