Блог и новости

Monitoring as code в Pingera

Блог Проверки
Изображение Monitoring as Code от AI
Привет, коллеги-инженеры! В Pingera мы твёрдо верим, что мониторинг — это не просто инструмент, а часть вашего кода. Именно поэтому мы продолжаем двигаться в сторону концепции Monitoring as Code. Это подход, который позволяет хранить, версионировать и запускать конфигурации мониторинга так же, как и остальной код вашего проекта. Сегодня я рад рассказать о наших последних шагах в этом направлении.

Почему Monitoring as Code так важен?

В современном мире CI/CD и DevOps, настройки мониторинга в UI — это прошлый век. Monitoring as Code позволяет:
  • 🤝 Командная работа: Ваши проверки хранятся в репозитории (например, на GitHub), что упрощает их совместную разработку, ревью и отладку.
  • 📈 Версионирование: Вы можете отслеживать изменения, откатываться к предыдущим версиям и понимать, кто и когда внёс изменения в логику мониторинга.
  • 🤖 Автоматизация: Запуск проверок становится частью вашего CI/CD-пайплайна. Хотите проверить, что новый деплой не сломал критические функции? Запустите проверку автоматически!
  • 🔐 Безопасность: В сочетании с нашим недавним обновлением, позволяющим хранить секреты, вы можете вынести конфиденциальные данные (токены, пароли) в безопасное хранилище и ссылаться на них в своих скриптах.

Шаг 1: Маркетплейс проверок

Чтобы облегчить старт, мы создали Маркетплейс проверок на GitHub. Пока это наш репозиторий pingera/marketplace, где мы собрали примеры различных проверок и подробные инструкции к ним. Теперь вы можете:
  • Использовать готовые шаблоны: Не нужно изобретать велосипед. Найдите подходящий шаблон для своих задач, например, для пошагового API-мониторинга.
  • Делиться своим кодом: Хотите внести свой вклад или поделиться интересным сценарием? Просто отправьте нам Pull Request. Это отличный способ обмениваться знаниями внутри сообщества.
  • Найти нужную информацию: Вся документация и примеры удобно расположены в README файлах.

Шаг 2: Хранение проверок как кода

Раньше для создания проверки через CLI вам приходилось использовать флаги, что не всегда удобно для сложных сценариев. Например:
pngr checks create --name "Some name" --type synthetic --pw-script-file some-playwright-script.js
Это работает, но что, если у вас много параметров или сложный скрипт? Такой подход не соответствует философии Monitoring as Code. Вы же не храните JSON-конфигурацию вашего сервиса в флагах запуска, верно?
Теперь вы можете хранить проверки в виде файлов (например, в формате JSON или YAML) и использовать наш CLI или API для их запуска. Это позволяет полностью интегрировать мониторинг в ваш рабочий процесс.
Вот как это работает на практике:
Представьте, что у вас есть файл simple.json, который описывает проверку доступности нашего API:
{
  "active": true,
  "interval": 60,
  "name": "Простейшая проверка GET API",
  "parameters": {
    "pw_script": "const { test, expect } = require('@playwright/test');\n\nconst apiUrl = process.env.API_URL || 'https://api.pingera.ru';\n\ntest('Проверка доступности API', async ({ request }) => {\n  const response = await test.step(`Отправка GET-запроса на ${apiUrl}`, async () => {\n    return await request.get(apiUrl);\n  });\n\n  await test.step('Проверка статуса ответа', async () => {\n    expect(response.status()).toBe(200);\n    console.log(`API доступно. Статус ответа: ${response.status()}`);\n  });\n});",
    "regions": [
      "RU, Moscow"
    ],
    "retry_enabled": true
  },
  "timeout": 15,
  "type": "multistep",
  "marketplace": {
    "tags": [
      "api",
      "доступность",
      "простота",
      "http"
    ],
    "name": "Простейший GET API-мониторинг",
    "description": "Отправляет простой GET-запрос к API-эндпоинту и проверяет, что он возвращает код 200. Использует переменную окружения для URL.",
    "secrets": true
  }
}
Вы можете хранить этот файл в своём репозитории, версионировать его и делиться с коллегами.
Кстати, наш CLI поддерживает не только локальные файлы, но и удаленные. Для этого можно использовать полный URL, например, https://raw.githubusercontent.com/pingera/marketplace/refs/heads/main/multistep/simple.json.
Чтобы выполнить проверку один раз:
  • Через CLI:
pngr checks run custom --from-file multistep/simple.json
# или с использованием сокращенного флага
pngr checks run custom -f multistep/simple.json
  • Через cURL:
curl -X POST -H "Authorization: ВАШ_ТОКЕН" -H "Content-Type: application/json" -d @multistep/simple.json https://api.pingera.ru/v1/checks/execute
Чтобы создать регулярную проверку:
  • Через CLI:
pngr checks create -f multistep/simple.json
  • Через cURL:
curl -X POST -H "Authorization: ВАШ_ТОКЕН" -H "Content-Type: application/json" -d @multistep/simple.json https://api.pingera.ru/v1/checks

Заключение

Мы верим, что Monitoring as Code — это будущее надёжных и масштабируемых систем. Предоставляя инструменты для работы с проверками как с кодом, мы даём вам полный контроль, гибкость и возможность интегрировать мониторинг в ваш привычный рабочий процесс. Это позволяет вам не просто реагировать на инциденты, а проактивно работать над надёжностью и качеством ваших сервисов.
Мы продолжим развивать эти возможности, и ждём ваши идеи и предложения на нашем GitHub-маркетплейсе.