Ответ
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.