Что такое журналирование (logging) в контексте DevOps?

«Что такое журналирование (logging) в контексте DevOps?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Журналирование (logging) — это систематическая запись событий, происходящих в приложениях, инфраструктуре и системах, в хронологическом порядке. В DevOps это критически важный процесс для обеспечения наблюдаемости, отладки инцидентов, аудита безопасности и анализа производительности.

Ключевые уровни логирования (стандарт Syslog / RFC 5424):

  • DEBUG: Детальная информация для разработчиков (например, значения переменных, шаги алгоритма).
  • INFO: Рутинные события, подтверждающие нормальную работу (запуск сервиса, успешное завершение задачи).
  • WARN: Предупреждения о потенциально нештатных ситуациях, которые не прерывают работу (например, приближение к лимиту диска).
  • ERROR: Критические ошибки, требующие внимания, но позволяющие приложению продолжать работу (сбой подключения к внешнему API).
  • CRITICAL/FATAL: Фатальные ошибки, после которых приложение не может продолжать работу (нехватка памяти, потеря связи с БД).

DevOps-практики и инструменты:

  • Структурированное логирование (JSON): Логи в машиночитаемом формате для автоматической обработки в стеке ELK (Elasticsearch, Logstash, Kibana) или Grafana Loki.
    {
    "timestamp": "2023-10-26T10:30:00Z",
    "level": "ERROR",
    "service": "auth-api",
    "pod": "auth-api-7c5fd8cc6b-abc12",
    "message": "Failed to connect to Redis cluster",
    "error": "connection timeout",
    "target_host": "redis-cluster:6379"
    }
  • Сбор и агрегация: Использование агентов (Fluentd, Filebeat) для сбора логов с контейнеров (Docker, Kubernetes) и серверов, их парсинг и отправка в центральное хранилище.
  • Ротация и retention: Настройка политик (через logrotate или механизмы контейнеризации) для автоматического архивирования и удаления старых логов, чтобы не исчерпать дисковое пространство.
  • Контекст и трассировка: Обогащение логов correlation ID (например, из заголовка X-Request-ID) для связывания всех записей, относящихся к одному пользовательскому запросу, что критично для отладки в распределенных системах.