Где и как Elasticsearch хранит логи?

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

Ответ

Elasticsearch сам по себе не является системой хранения файловых логов. Он хранит индексированные и структурированные данные логов внутри своих индексов, которые физически лежат на дисках нод кластера. А файловые логи самого Elasticsearch (журналы его работы) пишутся в отдельную директорию.

1. Хранение индексированных логов приложений:

  • Куда: Данные попадают в индексы (например, logstash-2024.05.15-000001). Эти индексы — это набор сегментов (shards), распределенных по нодам кластера.
  • Путь: Физическое расположение данных задается параметром path.data в elasticsearch.yml (по умолчанию ./data в tar-установке, часто /var/lib/elasticsearch).
  • Как попадают: Через сборщики вроде Filebeat или Fluentd, которые отправляют логи на Logstash или напрямую в Elasticsearch по HTTP API.

2. Файловые логи Elasticsearch (журналы):

  • Куда: Пишутся в директорию, указанную в path.logs (по умолчанию /var/log/elasticsearch/). Там лежат файлы my-cluster.log, my-cluster_deprecation.log и т.д.
  • Управление: Ротацией этих файловых логов обычно управляет сам Elasticsearch или системный демон logrotate.

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

# filebeat.yml
filebeat.inputs:
- type: filestream
  id: nginx-logs
  paths:
    - /var/log/nginx/access.log

output.elasticsearch:
  hosts: ["es-node-01:9200"]
  indices:
    - index: "nginx-access-%{+yyyy.MM.dd}"

setup.ilm.enabled: true # Включаем управление жизненным циклом индексов (ILM)

Ключевая практика: Для управления объемом данных я всегда настраиваю Index Lifecycle Management (ILM). Он автоматически перекладывает "горячие" индексы на быстрые диски, а затем удаляет старые логи по истечении заданного срока (например, 30 дней), что критически важно для DevOps-практик.