Прямой ответ
Агрегация логов собирает записи всех сервисов в единый поток, поэтому поиск по признаку обращения возвращает записи независимо от места их создания.
| Параметр | Что задаёт |
|---|---|
| Единый формат | Разбираемость записей при поиске |
| Признаки источника | Определение сервиса и экземпляра |
| Признак обращения | Поиск записей одного обращения |
| Полнота сбора | Отсутствие пропущенных записей |
import logging, json
class JsonFormatter(logging.Formatter):
def format(self, record):
return json.dumps({
"ts": self.formatTime(record),
"level": record.levelname,
"service": "orders",
"msg": record.getMessage(),
})
Единый формат обеспечивает разбираемость записей при поиске, поэтому поля извлекаются одинаково для всех сервисов. О структуре записей — в статье про структуру логов.
Признаки источника и полнота сбора
Запись содержит признаки сервиса и экземпляра, поэтому источник определяется без разбора текста.
Признаки сервиса. Запись содержит имя сервиса, поэтому источник определяется при поиске.
Признаки экземпляра. Запись содержит признак экземпляра, поэтому записи разных экземпляров различаются.
Полнота сбора. Отсутствие записей сервиса указывает на незапущенный сбор либо на потерю при передаче.
Практическое следствие: запись без признаков источника не позволяет определить сервис, поэтому поиск по признаку не возвращает записи.
Отдельный аспект — полнота сбора. Записи, не дошедшие до хранилища, не находятся при поиске, поэтому пропуск части записей даёт неполную картину.
Три признака некорректной агрегации.
Разные форматы записей. Разбор полей отличается для разных сервисов, поэтому поиск возвращает неполные данные.
Отсутствие признаков источника. Сервис не определяется, поэтому записи не фильтруются по источнику.
Потеря записей при передаче. Часть записей не доходит до хранилища, поэтому картина неполная.
О передаче и обработке записей — в статье про log pipeline; о признаках обращения — в статье про сквозной идентификатор.
Объём записей и срок хранения
Объём собранных записей определяет требования к хранилищу и сроку хранения, поэтому баланс между полнотой и затратами задаётся настройкой.
Объём на обращение. Каждая запись содержит признаки и текст, поэтому объём растёт с числом обращений и детализацией записей.
Срок хранения. Период доступности записей определяет возможность расследования за прошедшее время.
Отбор записей. Доля сохраняемых записей ограничивается, поэтому объём хранения остаётся в допустимых пределах.
Практическое следствие: хранение всех записей при высокой нагрузке приводит к росту объёма, поэтому отбор ограничивает затраты.
Практика: настройка агрегации логов
1. Используйте единый формат записей. Разбор полей одинаков для всех сервисов, поэтому поиск возвращает полные данные.
2. Добавляйте признаки сервиса и экземпляра. Источник определяется без разбора текста, поэтому записи фильтруются по источнику.
3. Включайте признак обращения в запись. Поиск по признаку возвращает записи одного обращения.
4. Проверяйте полноту сбора. Отсутствие записей сервиса указывает на незапущенный сбор либо на потерю.
5. Фиксируйте метки времени в едином формате. Единый формат обеспечивает сортировку записей по времени.
6. Проверяйте разбор полей при поиске. Неразбираемое поле указывает на отклонение формата.
7. Храните записи с признаками доступа. Ограничение доступа к записям с признаками обеспечивается настройкой хранилища.
Рекомендации:
- Не смешивайте форматы записей. Разный формат требует разбора для каждого сервиса, поэтому поиск усложняется.
- Учитывайте объём собранных записей. Объём определяет требования к хранилищу и сроку хранения.
- Сопоставляйте записи с признаками обращения. Связь записи с признаком позволяет перейти к дереву операций.
- Фиксируйте признак источника в ошибке. Признак в записи ошибки позволяет определить сервис сбоя.
- Пересматриваем сбор при добавлении сервисов. Новый сервис требует включения в сбор для появления записей.
Практический сценарий: записи сервиса не попадали в поиск
Контекст: поиск по признаку обращения не возвращал записи одного из сервисов, поэтому картина обработки была неполной.
- Диагностика. Проверка показала, что сбор записей этого сервиса не был запущен. Записи создавались локально, но не передавались в хранилище, поэтому поиск их не возвращал.
- Причина. Сбор записей сервиса не был настроен, поэтому записи не попадали в единый поток.
- Действия. (а) Настроили сбор записей сервиса; (б) привели формат записей к единому, чтобы разбор полей совпадал; (в) добавили признаки сервиса и экземпляра в запись; (г) включили признак обращения, чтобы записи находились по нему; (д) проверили поиск по признаку и убедились в появлении записей сервиса.
- Результат. Записи всех сервисов находятся одним запросом по признаку обращения.
Вывод: запись, не переданная в хранилище, не находится при поиске, поэтому картина обработки неполная. Настройка сбора, единый формат и признаки источника обеспечивают полноту агрегации.
Практический сценарий: записи сервиса не попадали в поиск
Контекст: поиск по признаку обращения не возвращал записи одного из сервисов, поэтому картина обработки была неполной.
- Диагностика. Проверка показала, что сбор записей этого сервиса не был запущен. Записи создавались локально, но не передавались в хранилище, поэтому поиск их не возвращал.
- Причина. Сбор записей сервиса не был настроен, поэтому записи не попадали в единый поток.
- Действия. (а) Настроили сбор записей сервиса; (б) привели формат записей к единому, чтобы разбор полей совпадал; (в) добавили признаки сервиса и экземпляра в запись; (г) включили признак обращения, чтобы записи находились по нему; (д) проверили поиск по признаку и убедились в появлении записей сервиса.
- Результат. Записи всех сервисов находятся одним запросом по признаку обращения.
Вывод: запись, не переданная в хранилище, не находится при поиске, поэтому картина обработки неполная. Настройка сбора, единый формат и признаки источника обеспечивают полноту агрегации.
FAQ
Зачем нужна агрегация логов? Она собирает записи всех сервисов в единый поток, поэтому поиск по признаку обращения возвращает записи независимо от места создания.
Какие признаки обязательны в записи? Признаки сервиса и экземпляра, а также признак обращения. Без них источник не определяется и поиск по обращению не работает.
Как проверяется полнота сбора? По наличию записей каждого сервиса в хранилище. Отсутствие записей указывает на незапущенный сбор либо на потерю при передаче.
Почему важен единый формат? Разбор полей одинаков для всех сервисов, поэтому поиск возвращает полные данные без отдельного разбора каждого формата.
Источники: Grafana Loki, Python logging, Grafana Loki datasource — ссылки в шапке.