Какие системы и практики логирования ты используешь?

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

Ответ

Я строю логирование на основе принципа structured logging (структурированное логирование) для эффективного сбора и анализа.

Стек и инструменты:

  • Сбор и агрегация: Fluentd / Vector как log forwarder, отправляющий логи в центральное хранилище.
  • Хранилище: Elasticsearch (в связке ELK) или Grafana Loki для более легковесного варианта.
  • Визуализация и поиск: Kibana или Grafana.
  • Трейсинг: Jaeger или Grafana Tempo для распределенной трассировки.

Практики и конфигурация:

  1. Уровни логирования: Использую стандартные уровни (DEBUG, INFO, WARN, ERROR). В продакшене по умолчанию INFO, DEBUG включается только для конкретных проблемных сервисов.
  2. Структурированный формат (JSON): Каждая запись лога — это JSON-объект с полями для машинного парсинга.
    {
      "timestamp": "2023-10-05T14:30:00Z",
      "level": "ERROR",
      "service": "payment-service",
      "trace_id": "abc123",
      "message": "Failed to process payment",
      "error": "Connection timeout to PSP",
      "user_id": "user_456",
      "order_id": "order_789"
    }
  3. Контекст и корреляция: Все логи в рамках одного HTTP-запроса или бизнес-процесса содержат общий trace_id или request_id. Это позволяет в Loki или Kibana восстановить полную цепочку событий по одному ID.
  4. Ротация и retention: Настраиваю log rotation на узлах (через logrotate) и политики хранения в Elasticsearch/Loki (например, удалять логи старше 30 дней).

Такой подход позволяет быстро находить root cause проблем, анализировать поведение системы и строить дашборды для ключевых метрик.