Раздел 40 · Elasticsearch и ELK

Альтернативы: Loki, Grafana и когда что

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

«Гонец» хранит месяц логов, но команда ищет почти всегда один сервис за последний час. Зачем оплачивать полнотекстовый индекс для каждого поля? Каталог библиотеки можно строить по каждому слову в книге, а можно по автору и жанру, а текст читать только у выбранных книг. Это разные затраты и разная скорость разных вопросов.

Loki: сначала выбери поток

Loki

группирует строки по меткам, например service="payments", env="production". Сжатые блоки логов обычно живут в object storage, а маленький индекс помогает найти нужные потоки. Grafana показывает их рядом с метриками и трейсами, агент вроде Grafana Alloy собирает и отправляет записи.

{service="payments", env="production"} |= "Bank gateway timeout"

Это LogQL, не KQL и не Elasticsearch Query DSL. Фрагмент иллюстрирует настоящий синтаксис Loki, но здесь его не исполняет никакой виджет.

Тот же смысл в нашем наборе выражают KQL service.name : payments and message : "Bank gateway timeout" или bool-запрос с term и match_phrase. Способы хранения и поиска при этом разные: одинаковое намерение не означает одинаковый план.

Не делай trace меткой потока

Если каждый trace.id уникален, метка trace создаст множество потоков. Кардинальность важна и в Elasticsearch, но у labels Loki особенно влияет на структуру потоков. trace.id, user id и request id обычно оставляют в тексте или structured metadata, а не индексных labels.

Ниже Elasticsearch считает число разных сервисов и trace в учебных логах. Это измерение формы данных, не имитация Loki и не сравнение скорости продуктов.

Сравни services.value и traces.value. Затем ограничь запрос payments и посмотри, уменьшилась ли кардинальность trace до одного значения. Малое число сервисов не означает малое число запросов. Cardinality в Elasticsearch в общем случае оценочная, на малом учебном наборе модель считает точно.

Другие варианты

ВариантКогда исследовать
Elasticsearch / OpenSearchинтерактивный поиск по тексту и разным полям
Loki + Grafanaзапросы начинаются с сервиса и времени, важен компактный индекс
ClickHouseбольшой поток структурированных событий и SQL-агрегации
managed loggingмало людей на эксплуатацию, приемлемы цена и ограничения провайдера

ClickHouse не даёт весь интерфейс Kibana из коробки; нужны сбор, схема, TTL и инструмент поиска. Loki не «не умеет искать текст»: он фильтрует строки после выбора потоков, но не использует такой же полнотекстовый индекс. Grafana не база логов: она обращается к источникам данных.

Выбирай не по логотипу

  1. Выпиши десять реальных запросов дежурного и объём за день.
  2. Задай срок, допустимую задержку и требования к удалению личных данных.
  3. Оцени вместе хранение, индекс, выходящий трафик и работу команды.
  4. Проверь запросы и восстановление на стенде, а не по рекламному сравнению.

Не дублируй весь поток в три хранилища «на всякий случай» без цели: стоимость и число копий чувствительных данных вырастут. Последний урок соберёт ошибки, которые ни смена продукта, ни managed-сервис не исправляют сами.

урок из курса

Урок из курса «Elasticsearch и ELK». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.