Какие ключевые сущности (понятия) есть в Elasticsearch?

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

Ответ

Elasticsearch — это распределенная поисковая и аналитическая система, построенная на основе Apache Lucene. В контексте DevOps (логирование, мониторинг метрик) важно понимать ее основные сущности.

1. Индекс (Index) Аналог базы данных в RDBMS. Это логический контейнер для документов. В стеке ELK/EFK (Elasticsearch, Logstash/Fluentd, Kibana) под каждый тип логов (app, nginx, system) часто создается отдельный индекс с шаблоном имен, например app-logs-2024.05.20.

2. Документ (Document) Основная единица информации в формате JSON. В DevOps это может быть одна строка лога, преобразованная Logstash в структурированный JSON-объект.

{
  "@timestamp": "2024-05-20T10:30:00Z",
  "level": "ERROR",
  "message": "Connection timeout to database",
  "service": "payment-service",
  "host.ip": "10.0.1.5"
}

3. Шард (Shard) Индекс делится на шарды для горизонтального масштабирования и распределения данных по кластеру.

  • Первичный шард (Primary Shard): Хранит данные и обрабатывает операции индексирования. Их количество фиксируется при создании индекса.
  • Реплика-шард (Replica Shard): Копия первичного шарда. Обеспечивает отказоустойчивость и повышает производительность чтения.

4. Маппинг (Mapping) Схема, определяющая типы полей и способ их индексации. Критически важен для корректного поиска и агрегаций.

PUT /app-logs
{
  "mappings": {
    "properties": {
      "@timestamp": { "type": "date" },
      "level": { "type": "keyword" }, // Точно совпадающие значения
      "message": { "type": "text" },   // Полнотекстовый поиск
      "duration_ms": { "type": "integer" }
    }
  }
}

5. Запросы (Queries) и Агрегации (Aggregations)

  • Запросы (match, term, range) используются для поиска конкретных логов.
  • Агрегации — мощный инструмент для аналитики. В мониторинге это подсчет ошибок, вычисление перцентилей времени ответа и группировка по сервисам.
    GET /app-logs/_search
    {
    "size": 0,
    "aggs": {
    "errors_by_service": {
      "terms": { "field": "service.keyword" },
      "aggs": {
        "error_count": {
          "filter": { "term": { "level": "ERROR" } }
        }
      }
    }
    }
    }

6. Шаблоны индексов (Index Templates) и Lifecycle Policy (ILM)

  • Index Template автоматически применяет настройки (маппинг, количество шардов) к новым индексам, чьи имена соответствуют шаблону (например, logs-*).
  • ILM управляет жизненным циклом индекса: создание (hot), переход в фазу для поиска (warm), удаление (delete). Это основа для эффективного хранения логов.

Понимание этих сущностей позволяет эффективно настраивать и поддерживать кластер Elasticsearch для задач централизованного логирования и APM.