Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • ИИ для бизнеса
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Yandex Monitoring
  • Начало работы
    • Все инструкции
      • Создание алерта
      • Создание канала уведомлений с получателем
      • Создание канала уведомлений с вызовом функции
      • Создание webhook с вызовом внешнего API
      • Создание политики эскалаций
      • Удаление алерта
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • История изменений
  • Обучающие курсы

В этой статье:

  • Создание сервисного аккаунта
  • Создание функции
  • Создание канала
  • Создание алерта
  • Проверка вызова функции
  1. Пошаговые инструкции
  2. Работа с алертами
  3. Создание webhook с вызовом внешнего API

Webhook с использованием Cloud Functions

Статья создана
Yandex Cloud
Обновлена 20 ноября 2025 г.
  • Создание сервисного аккаунта
  • Создание функции
  • Создание канала
  • Создание алерта
  • Проверка вызова функции

Для автоматической обработки инцидентов и других событий в вашем облаке вы можете вызывать в Yandex Monitoring функции Cloud Functions. В этом разделе приведен пример настройки webhook с отправкой POST-запросов при срабатывании алерта. Таким образом при срабатывании алерта вы можете вызывать методы внешнего API. Так же можно вызывать функции Cloud Functions в эскалациях.

Чтобы отправлять POST-запросы при срабатывании алерта:

  1. Разверните сервис для обработки POST-запросов со следующими атрибутами:

    • https://my.url/route/for/alarm — URL для обработки запроса, когда алерт переходит в статус Alarm;
    • https://my.url/route/for/ok — URL для обработки запроса, когда алерт переходит в статус Ok;
    • my_secret_token — токен или файл с токеном для авторизации вызовов.

    Вы можете проверить работу функции без развертывания сервиса обработки POST-запросов. В этом случае при отправке запроса в логах вызова функции вы увидите сообщение, что указанный URL недоступен.

  2. Создайте сервисный аккаунт для вызова функции.

  3. Создайте функцию, которая отправляет POST-запросы при переходе алерта в статус Alarm и Ok.

  4. Создайте канал, который будет вызывать функцию.

  5. Создайте алерт, который будет отправлять уведомления в канал с функцией.

  6. Проверьте работу функции.

Создание сервисного аккаунтаСоздание сервисного аккаунта

Консоль управления
  1. В консоли управления перейдите в каталог с ресурсами, которые надо отслеживать в Monitoring.
  2. Перейдите в сервис Identity and Access Management.
  3. Нажмите кнопку Создать сервисный аккаунт.
  4. Введите имя сервисного аккаунта, например sa-alert-webhook.
  5. Добавьте роли functions.functionInvoker и functions.viewer.
  6. Нажмите кнопку Создать.

Создание функцииСоздание функции

Консоль управления
  1. Перейдите в сервис Cloud Functions.

  2. Нажмите кнопку Создать функцию.

  3. Введите имя функции, например alert-webhook.

  4. Нажмите кнопку Создать.

  5. Создайте версию функции:

    1. Выберите среду выполнения Python, отключите опцию Добавить файлы с примерами кода и нажмите кнопку Продолжить.

    2. Выберите способ Редактор кода.

    3. Нажмите Создать файл и введите имя файла, например index.

    4. Введите код функции, указав URL для обработки POST-запросов и токен:

      import json
      import requests
      
      WEBHOOK_ALARM_URL = "https://my.url/route/for/alarm"
      WEBHOOK_OK_URL = "https://my.url/route/for/ok"
      WEBHOOK_AUTH_TOKEN = "my_secret_token"
      
      def webhook(url, alert_id):
          headers_ = {
              "Authorization": f"OAuth {WEBHOOK_AUTH_TOKEN}",
              "Content-type": "application/json"
          }
          try:
              response = requests.post(url, headers = headers_, json = { "alert_id" : alert_id })
              if response.ok:
                  return { "status": "OK", "url": url, "response": json.dumps(response.json)}
              else:
                  return { "status": "ERROR", "url": url, "code": response.status_code, "error": response.text}
          except Exception as e:
              return { "status": "EXCEPTION", "url": url, "error": e}
          
      
      def handler(event, context):
          alert = event # сохраним event в переменную alert для удобства
          required_attributes = ["alertId", "status"] # массив с обязательными входными параметрами в формате JSON
          
          # если на вход функции не передан JSON или в нем отсутствуют нужные параметры, функция не выполняется
          if not alert or all(attr in required_attributes for attr in alert):
              return
          
          result = None
          # если функция вызвана, когда алерт в статусе ALARM, отправляем запрос на адрес WEBHOOK_ALARM_URL
          # если функция вызвана, когда алерт в статусе OK, отправляем запрос на адрес WEBHOOK_OK_URL
          # при других статусах алерта ничего не вызываем
          if alert["status"] == "ALARM":
              result = webhook(WEBHOOK_ALARM_URL, alert["alertId"])
          elif alert["status"] == "OK":
              result = webhook(WEBHOOK_OK_URL, alert["alertId"])
          else:
              pass
          
          if not result:
              return
      
          # выводим в лог результат вызова
          if result["status"] == "OK":
              print(f"Succesffully invoked {result['url']}. Response: {result['response']}")
          elif result["status"] == "ERROR":
              print(f"ERROR invoking {result['url']}. Code {result['code']}, error message: {result['error']}")
          else:
              print(f"{result['status']} when invoking {result['url']}. Error message: {result['error']}")
      
  6. В блоке Параметры задайте параметры версии:

    • Точка входа: index.handler.
    • Сервисный аккаунт: sa-alert-webhook.
  7. В блоке Дополнительные настройки включите Асинхронный вызов.

  8. Нажмите кнопку Сохранить изменения.

Создание каналаСоздание канала

Консоль управления
  1. Перейдите в сервис Monitoring.
  2. Выберите раздел Каналы уведомлений.
  3. Нажмите кнопку Создать канал.
  4. Введите имя канала уведомлений, например channel-function.
  5. В списке Метод выберите Cloud Functions.
  6. В списке Сервисный аккаунт выберите аккаунт, созданный при добавлении функции.
  7. Нажмите Создать.

Создание алертаСоздание алерта

Консоль управления
  1. В сервисе Monitoring выберите раздел Алерты.
  2. Нажмите кнопку Создать.
  3. Введите имя алерта, например alert-function.
  4. Введите запрос, по которому будут выбираться метрики для отслеживания.
  5. Настройте условия срабатывания.
  6. В блоке Уведомления нажмите Редактировать и затем кнопку Добавить.
  7. Выберите канал channel-function.
  8. Нажмите кнопку Добавить.
  9. Нажмите кнопку Создать.

Проверка вызова функцииПроверка вызова функции

Консоль управления
  1. Перейдите в сервис Cloud Functions.

  2. Выберите функцию alert-webhook.

  3. Выберите вкладку Тестирование.

  4. В качестве входных данных введите:

    {
      "alertId": "<идентификатор_алерта>",
      "alertName": "alert-function",
      "folderId": "<идентификатор_каталога>",
      "status": "OK"
    }
    
  5. Нажмите кнопку Запустить тест.

  6. В логах вызова функции на вкладке Тестирование или Логи посмотрите, что запрос был отправлен на URL https://my.url/route/for/ok.

Была ли статья полезна?

Предыдущая
Создание канала уведомлений с вызовом функции
Следующая
Создание политики эскалаций
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»