Москва: проверенные б/у ноутбуки с гарантией и проверкой перед оплатой
+7 906 722-94-45

Главная → Статьи → Log pipeline: сбор и обработка записей

Log pipeline: этапы сбора, разбора и обогащения

Поток обработки логов: сбор, разбор, обогащение признаками, фильтрация и проверка потерь на каждом этапе.

Прямой ответ

Поток обработки логов состоит из сбора, разбора, обогащения и передачи, поэтому потеря либо искажение записи локализуется на конкретном этапе.

Этап Что выполняет
Сбор Читает записи из источника
Разбор Извлекает поля из текста записи
Обогащение Добавляет признаки источника и обращения
Передача Отправляет запись в хранилище
[sources.app_logs]
type = "file"
include = ["/var/log/app/*.log"]

[transforms.parse]
type = "remap"
inputs = ["app_logs"]
source = '. = parse_json!(.message)'

[sinks.loki]
type = "loki"
inputs = ["parse"]

Разбор извлекает поля записи, поэтому поиск по полю работает без разбора текста на стороне запроса. Об агрегации записей — в статье про агрегацию логов.

Разбор, обогащение и потери на этапах

Разбор извлекает поля из текста записи, поэтому структура становится доступна для фильтрации и агрегации.

Разбор. Текст записи разбирается на поля, поэтому значение поля используется в запросе без разбора строки.

Обогащение. К записи добавляются признаки источника, окружения и обращения, поэтому контекст доступен без разбора текста.

Потеря на этапе. Запись, не прошедшая разбор, отбрасывается либо передаётся неразобранной, поэтому поле отсутствует.

Практическое следствие: запись, не прошедшая разбор, не содержит извлечённых полей, поэтому фильтр по полю не возвращает её.

Отдельный аспект — потери при передаче. Записи, не дошедшие до хранилища, не находятся при поиске, поэтому пропуск даёт неполную картину.

Три признака некорректного потока обработки.

Разбор не покрывает формат записи. Поля не извлекаются, поэтому фильтр по полю не работает.

Отсутствие обогащения. Признаки источника и обращения не добавляются, поэтому контекст теряется.

Потеря записей при передаче. Часть записей не доходит до хранилища, поэтому картина неполная.

О структуре записей для разбора — в статье про структуру логов; о связи записей с сигналами — в статье про связь метрик и трейсов.

Контроль потерь и метрики этапов

Контроль потерь на этапах потока позволяет определить узкое место обработки и масштаб пропуска записей.

Счётчик на входе и выходе. Счётчик записей на входе и выходе этапа показывает пропуск, поэтому масштаб потери определяется по расхождению.

Метрики длительности этапа. Длительность обработки этапа позволяет определить узкое место потока.

Признак неразобранной записи. Запись, не прошедшая разбор, передаётся с признаком, поэтому потеря не остаётся незамеченной.

Практическое следствие: отсутствие счётчика на этапе не позволяет определить масштаб пропуска, поэтому потеря остаётся незамеченной.

Практика: настройка потока обработки логов

1. Проверяйте разбор на реальном формате записи. Разбор, не покрывающий формат, не извлекает поля.

2. Добавляйте признаки источника при обогащении. Признаки сервиса и окружения позволяют фильтровать записи.

3. Включайте признак обращения при обогащении. Признак позволяет найти записи одного обращения.

4. Проверяйте потери на каждом этапе. Счётчик записей на входе и выходе этапа показывает пропуск.

5. Обрабатывайте неразобранные записи явно. Запись, не прошедшая разбор, передаётся с признаком, поэтому не теряется.

6. Фиксируйте метрики этапов потока. Длительность и объём этапа позволяют определить узкое место.

7. Ограничивайте объём передаваемых записей. Ограничение предотвращает переполнение хранилища.

Рекомендации:

  1. Не отбрасывайте неразобранные записи молча. Запись без признака потери не позволяет определить масштаб пропуска.
  2. Учитывайте объём на этапе передачи. Объём определяет требования к хранилищу и сроку хранения.
  3. Сопоставляйте признаки с обращениями. Связь признака с обращением позволяет перейти от записи к дереву операций.
  4. Фиксируйте признак источника в ошибке. Признак в записи ошибки позволяет определить сервис сбоя.
  5. Пересматриваем поток при изменении формата записи. Изменение формата требует обновления разбора.

Практический сценарий: поле записи не извлекалось при поиске

Контекст: фильтр по полю записи не возвращал записи, хотя поле присутствовало в тексте.

  1. Диагностика. Проверка показала, что разбор не покрывал формат записи этого сервиса. Поле присутствовало в тексте, но не извлекалось, поэтому фильтр по полю не возвращал записи.
  2. Причина. Разбор этапа обработки не соответствовал формату записи сервиса, поэтому поля не извлекались.
  3. Действия. (а) Обновили разбор под формат записи сервиса; (б) проверили извлечение полей на реальных записях; (в) добавили признак неразобранной записи, чтобы определять пропуск; (г) добавили метрики этапов потока для контроля потерь; (д) проверили фильтр по полю и убедились в возврате записей.
  4. Результат. Поля извлекаются, поэтому фильтр по полю возвращает записи.

Вывод: разбор, не покрывающий формат записи, не извлекает поля, поэтому фильтр по полю не работает. Обновление разбора под формат и контроль потерь на этапах обеспечивают полноту обработки.

Практический сценарий: поле записи не извлекалось при поиске

Контекст: фильтр по полю записи не возвращал записи, хотя поле присутствовало в тексте.

  1. Диагностика. Проверка показала, что разбор не покрывал формат записи этого сервиса. Поле присутствовало в тексте, но не извлекалось, поэтому фильтр по полю не возвращал записи.
  2. Причина. Разбор этапа обработки не соответствовал формату записи сервиса, поэтому поля не извлекались.
  3. Действия. (а) Обновили разбор под формат записи сервиса; (б) проверили извлечение полей на реальных записях; (в) добавили признак неразобранной записи, чтобы определять пропуск; (г) добавили метрики этапов потока для контроля потерь; (д) проверили фильтр по полю и убедились в возврате записей.
  4. Результат. Поля извлекаются, поэтому фильтр по полю возвращает записи.

Вывод: разбор, не покрывающий формат записи, не извлекает поля, поэтому фильтр по полю не работает. Обновление разбора под формат и контроль потерь на этапах обеспечивают полноту обработки.

FAQ

Из каких этапов состоит поток обработки логов? Сбор, разбор, обогащение и передача. Каждый этап выполняет свою часть обработки записи.

Что происходит с записью, не прошедшей разбор? Она отбрасывается либо передаётся неразобранной. Явная обработка с признаком потери позволяет определить масштаб пропуска.

Как проверяются потери на этапах? По счётчику записей на входе и выходе этапа. Расхождение указывает на потерю на этом этапе.

Зачем нужно обогащение записей? Добавление признаков источника и обращения даёт контекст без разбора текста, поэтому фильтрация работает по полям.

Источники: Vector, Grafana Loki, Python logging — ссылки в шапке.