Работал ли с системами логирования?

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

Ответ

Да, я настраивал и поддерживал стек для централизованного логирования в нескольких проектах. Основной опыт — с ELK (Elasticsearch, Logstash, Kibana) и Grafana Loki в связке с Promtail.

Мои типичные задачи:

  • Сбор и парсинг: Настройка агентов (Filebeat, Fluentd, Promtail) для сбора логов с приложений (Java, Python, Nginx) и их структурирования. Например, парсинг JSON-логов из stdout контейнеров или access/error логов веб-серверов.
  • Транспорт и буферизация: Использование Logstash или Fluentd в качестве агрегатора, настройка буферизации (в памяти/на диске) для устойчивости к сбоям.
  • Хранение и retention: Настройка индексов в Elasticsearch (ILM-политики для горячих/теплых/холодных данных) или сегментов в Loki с ограничением по объему и времени хранения.
  • Визуализация и алертинг: Создание дашбордов в Kibana/Grafana для анализа логов и настройка алертов на критические ошибки или паттерны (например, рост 5xx ошибок).

Пример конфигурации Fluentd для парсинга логов Nginx:

<source>
  @type tail
  path /var/log/nginx/access.log
  pos_file /var/log/fluentd/nginx-access.pos
  tag nginx.access
  <parse>
    @type nginx
  </parse>
</source>

<filter nginx.access>
  @type record_transformer
  <record>
    hostname ${hostname}
    log_type nginx_access
  </record>
</filter>

<match nginx.access>
  @type elasticsearch
  host elasticsearch.logging.svc
  port 9200
  logstash_format true
  logstash_prefix nginx-access
</match>

Ключевой принцип — обеспечить сквозную трассируемость: от лога в приложении до алерта в Slack/Telegram, с минимальной задержкой и гарантией доставки.