Как мониторить запросы на продакшене?

«Как мониторить запросы на продакшене?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Мониторинг запросов в production — критическая часть обеспечения доступности и производительности. Я строю его по нескольким уровням:

1. Логирование (Logging)

Настраиваю структурированное логирование всех входящих HTTP-запросов с ключевыми метриками (URL, метод, статус, время ответа, ID пользователя). Логи агрегируются в централизованную систему, такую как ELK-стек (Elasticsearch, Logstash, Kibana) или Loki/Grafana.

// Пример структурированной записи лога
{
  "timestamp": "2023-10-26T12:34:56Z",
  "level": "INFO",
  "message": "HTTP Request",
  "method": "GET",
  "path": "/api/v1/users",
  "status": 200,
  "response_time_ms": 145.6,
  "client_ip": "192.168.1.1",
  "request_id": "abc-123-def"
}

2. Метрики (Metrics)

Инструменты вроде Prometheus собирают числовые метрики, которые визуализируются в Grafana. Ключевые метрики для запросов:

  • Скорость (Rate): Запросов в секунду (RPS) по endpoint.
  • Ошибки (Errors): Количество и процент ответов с кодами 4xx и 5xx.
  • Продолжительность (Duration): Время выполнения запроса. Отслеживаю перцентили (p95, p99), чтобы видеть «хвост» медленных запросов.

3. Трассировка (Distributed Tracing)

Для микросервисных архитектур использую трассировку (например, через OpenTelemetry с Jaeger). Это позволяет отследить полный путь одного запроса через все сервисы, увидеть задержки на каждом этапе и выявить узкие места.

4. APM (Application Performance Monitoring)

Инструменты вроде New Relic, Datadog или открытого Pinpoint предоставляют «из коробки» детальную информацию о производительности каждого endpoint, запросов к БД, внешних HTTP-вызовах и потреблении памяти/CPU.

5. Активное тестирование (Synthetic Monitoring)

Настраиваю простые скрипты (например, в UptimeRobot или через k6), которые периодически «прозванивают» критические endpoint'ы, проверяя их доступность и базовое время ответа извне.

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