Modern QA2026Синтетический мониторинг
Join

Course06 Observability-Driven Testing

Cutting-edge · Chapter 06

Синтетический мониторинг

Updated Jul 2026

Что такое синтетический мониторинг?

Синтетический мониторинг означает непрерывный запуск автоматизированных тестов против продакшена — не только во время деплоев, а 24/7. Это не нагрузочные тесты; это легковесные пробы, которые проверяют, что критичные пользовательские сценарии остаются функциональными, обнаруживая проблемы между деплоями, которые ни один CI-пайплайн не обнаружит.

Примеры того, что обнаруживает синтетический мониторинг:

  • Деградация стороннего сервиса (платёжный провайдер недоступен)
  • Истечение сертификата
  • Неправильная конфигурация CDN
  • Сбои разрешения DNS
  • Региональные проблемы с подключением
  • Исчерпание пула соединений с базой данных
  • Медленные утечки памяти, накапливающиеся за часы

Архитектура синтетического мониторинга

  +-------------------+
  | Scheduler (cron)  |  -- Every 5 minutes from 3 regions
  +---------+---------+
            |
            v
  +---------+---------+     +---------+---------+     +---------+---------+
  | us-east-1 runner  |     | eu-west-1 runner  |     | ap-south-1 runner |
  | - Login flow      |     | - Login flow      |     | - Login flow      |
  | - Search flow     |     | - Search flow     |     | - Search flow     |
  | - Checkout flow   |     | - Checkout flow   |     | - Checkout flow   |
  +---------+---------+     +---------+---------+     +---------+---------+
            |                         |                         |
            +------------+------------+------------+------------+
                         |
                         v
              +----------+----------+
              | Metrics / Alerting  |   <-- Grafana, Datadog, PagerDuty
              | - Pass/fail status  |
              | - Response times    |
              | - Screenshot diffs  |
              +---------------------+

Скрипт синтетического мониторинга на Playwright

// synthetic/checkout-flow.spec.ts
// Runs every 5 minutes against production
import { test, expect } from '@playwright/test';

test.describe('Production Checkout Flow', () => {
  test.setTimeout(30_000); // 30s hard timeout for synthetic tests

  test('complete purchase of a test product', async ({ page }) => {
    // Step 1: Navigate and verify homepage
    const startTime = Date.now();
    await page.goto('https://store.example.com');
    await expect(page.locator('h1')).toContainText('Welcome');

    const homepageLoadTime = Date.now() - startTime;
    console.log(`METRIC homepage_load_ms=${homepageLoadTime}`);

    // Step 2: Search for test product
    await page.fill('[data-testid="search-input"]', 'synthetic-test-product');
    await page.click('[data-testid="search-button"]');
    await expect(page.locator('[data-testid="search-results"]')).toBeVisible();

    // Step 3: Add to cart
    await page.click(
      '[data-testid="product-card"]:first-child [data-testid="add-to-cart"]'
    );
    await expect(page.locator('[data-testid="cart-count"]')).toHaveText('1');

    // Step 4: Begin checkout (using test payment method)
    await page.click('[data-testid="cart-icon"]');
    await page.click('[data-testid="checkout-button"]');

    // Use test payment method that does not charge
    await page.fill('[data-testid="card-number"]', '4242424242424242');
    await page.fill('[data-testid="card-expiry"]', '12/28');
    await page.fill('[data-testid="card-cvc"]', '123');

    await page.click('[data-testid="place-order"]');

    // Step 5: Verify order confirmation
    await expect(page.locator('[data-testid="order-confirmation"]')).toBeVisible({
      timeout: 15_000,
    });
    await expect(page.locator('[data-testid="order-id"]')).toBeVisible();

    const totalFlowTime = Date.now() - startTime;
    console.log(`METRIC checkout_flow_total_ms=${totalFlowTime}`);

    // Assert performance budget
    expect(totalFlowTime).toBeLessThan(15_000);
  });
});

Запуск синтетических тестов по расписанию в CI

# .github/workflows/synthetic-monitor.yml
name: Synthetic Monitoring
on:
  schedule:
    - cron: '*/5 * * * *'  # every 5 minutes
  workflow_dispatch: {}     # allow manual trigger

jobs:
  synthetic-us-east:
    runs-on: ubuntu-latest  # GitHub-hosted runner (US East)
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npm ci
      - name: Install Playwright browsers
        run: npx playwright install --with-deps chromium

      - name: Run synthetic tests
        run: npx playwright test synthetic/ --reporter=json
        env:
          BASE_URL: https://store.example.com
          SYNTHETIC_MODE: true

      - name: Push metrics to Datadog
        if: always()
        run: |
          python scripts/push_synthetic_metrics.py \
            --results playwright-report/results.json \
            --region us-east-1 \
            --datadog-api-key ${{ secrets.DATADOG_API_KEY }}

      - name: Alert on failure
        if: failure()
        run: |
          curl -X POST "${{ secrets.PAGERDUTY_EVENTS_URL }}" \
            -H "Content-Type: application/json" \
            -d '{
              "routing_key": "${{ secrets.PD_ROUTING_KEY }}",
              "event_action": "trigger",
              "payload": {
                "summary": "Synthetic checkout flow FAILED in us-east-1",
                "severity": "critical",
                "source": "github-actions-synthetic"
              }
            }'

Проектирование эффективных синтетических тестов

Что мониторить

Сценарий Приоритет Частота Таймаут
Загрузка главной страницы Критический Каждую 1 мин 10 с
Вход пользователя Критический Каждые 2 мин 15 с
Поиск продукта Высокий Каждые 5 мин 15 с
Добавление в корзину Высокий Каждые 5 мин 15 с
Оформление заказа Критический Каждые 5 мин 30 с
Health-эндпоинты API Критический Каждые 30 с 5 с

Лучшие практики

  1. Используйте выделенные тестовые данные. Создайте «synthetic-test-product», который всегда в наличии, никогда не на распродаже и легко идентифицируется в фильтрах аналитики.

  2. Помечайте синтетический трафик. Добавьте заголовок или параметр запроса (?synthetic=true), чтобы аналитика и системы биллинга могли фильтровать синтетическую активность.

  3. Запускайте из нескольких регионов. Тест, проходящий в us-east-1 и проваливающийся в ap-south-1, немедленно указывает на региональные проблемы.

  4. Держите тесты простыми. Синтетические тесты должны быть простейшим возможным путём через критичный сценарий. Сложная многоветвистая логика тестов принадлежит CI, а не продакшен-мониторингу.

  5. Устанавливайте жёсткие таймауты. Если оформление заказа занимает более 30 секунд в продакшене, оно фактически сломано независимо от того, завершится ли оно успешно в итоге.

  6. Делайте скриншоты при сбое. Прикрепляйте скриншоты к уведомлениям алертов, чтобы дежурный инженер мог видеть, что увидел бы пользователь.

Платформы синтетического мониторинга

Платформа Тип Поддержка браузеров Регионы Стоимость
Datadog Synthetic SaaS Chrome, API 100+ локаций За тест
Grafana Synthetic SaaS / Self-hosted Chrome, API 30+ локаций Включено в Grafana Cloud
Checkly SaaS Нативная поддержка Playwright 20+ локаций За проверку
GitHub Actions (DIY) Self-hosted Любой (Playwright) Регионы раннеров GitHub За минуты раннера
AWS CloudWatch Synthetics SaaS Chrome (Puppeteer) Все регионы AWS За канарейку

Выбор платформы

  • Checkly — лучший выбор для команд, уже использующих Playwright, поскольку он запускает скрипты Playwright нативно
  • Datadog Synthetic бесшовно интегрируется, если вы уже используете Datadog для мониторинга
  • GitHub Actions DIY — экономичный вариант для небольших команд, готовых построить свой пайплайн отчётности
  • Grafana Synthetic идеален для команд, инвестировавших в экосистему Grafana

Метрики для отслеживания из синтетического мониторинга

Метрика Назначение Порог алерта
Доля прохождения/провала по сценарию Общее здоровье Любой сбой
Доступность (% проходящих прогонов) Соответствие SLO < 99,5% за 7 дней
Время ответа по шагам Отслеживание производительности > 2x от базовой линии
Региональная доступность Географическое здоровье Любой регион < 99%
Оценка различий скриншотов Визуальная регрессия > 10% разницы в пикселях

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