0002. Loki вместо ELK¶
Дата: август 2026. Состояние: принято.
Контекст¶
Логи нужны для разбора инцидентов, и они должны быть связаны с метриками и трейсами. В вакансии перечислен ELK, поэтому первым вариантом был он.
Elasticsearch на одном узле требует не меньше 1 ГБ памяти под кучу и столько же под системный кеш файлов; плюс Logstash или Filebeat, плюс Kibana. Итого около 2 ГБ — больше половины памяти узла на один сигнал из трёх.
Решение¶
Собирать логи агентом Grafana Alloy и хранить в Loki в одноблочном режиме на файловой системе узла. Loki с агентом занимает около 180 МБ.
Метка ставится только на то, по чему действительно отбирают: пространство имён, под, контейнер, приложение и уровень записи. Остальное остаётся в теле записи и разбирается на месте, при запросе.
Последствия¶
Что получили. Три сигнала в одном интерфейсе: Grafana показывает метрику,
рядом лог, из лога по полю traceId — переход в трейс. В ELK для такой связки
понадобился бы ещё и APM-сервер.
Место на диске: Loki хранит сжатые фрагменты и не строит обратный индекс по всему содержимому. Неделя логов стенда — около 300 МБ вместо нескольких гигабайтов.
Чем заплатили. Полнотекстового поиска по произвольному полю нет. Loki отбирает записи по меткам и затем просматривает их содержимое; запрос без метки по большому интервалу времени будет медленным. Для разбора инцидента, где всегда известны пространство имён и промежуток времени, это не мешает. Для аналитики по всему массиву за месяц — помешало бы.
Число серий нужно держать в узде: метка с высокой изменчивостью — например идентификатор запроса — разнесла бы хранилище на тысячи мелких потоков. Это дисциплина, которую в Elasticsearch соблюдать не требуется.
Что рассматривалось¶
Полный ELK — отклонён по памяти. Разговор был бы другим на узле с 8 ГБ.
OpenSearch — тот же порядок потребления, что у Elasticsearch, с теми же последствиями.
Только логи в стандартный вывод и kubectl logs — работает до первого
перезапуска пода, после которого улики исчезают. Для стенда, где поды падают по
нажатию кнопки, это заведомо негодно.