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

Главная → Статьи → Log aggregation: централизованное управление логами

Log aggregation: централизованный сбор, хранение и анализ логов

Агрегация логов: сбор из распределенных систем, централизованное хранение, инструменты (ELK, Loki, Fluentd) и практические паттерны анализа.

Прямой ответ

Log aggregation — сбор логов из распределенных систем в централизованное хранилище (aggregation — «логи со всех сервисов в одном месте» — aggregation — incident — «централизованное управление» — aggregation), зачем: отладка распределенных систем (aggregation — «логи со всех сервисов» — aggregation — incident — «не искать по серверам» — aggregation — logs — «централизованно» — aggregation); как работает (aggregation — «сбор → обработка → хранение → анализ» — aggregation): (1) Сбор (aggregation — «агенты собирают логи» — aggregation — incident — «с серверов/подов» — aggregation — logs — «агенты» — aggregation — Fluentd/Filebeat (aggregation — «сборщики» — aggregation — Fluentd — «логи» — aggregation); (2) Обработка (aggregation — «парсинг/фильтрация/обогащение» — aggregation — incident — «структурирование» — aggregation — logs — «обработка» — aggregation — Fluentd (aggregation — «фильтры» — aggregation — Fluentd — «логи» — aggregation); (3) Хранение (aggregation — «централизованное хранилище» — aggregation — incident — «логи хранятся» — aggregation — logs — «хранилище» — aggregation — Elasticsearch/Loki (aggregation — «хранилища» — aggregation — ELK — «логи» — aggregation); (4) Анализ (aggregation — «поиск/визуализация» — aggregation — incident — «анализ логов» — aggregation — logs — «анализ» — aggregation — Kibana/Grafana (aggregation — «визуализация» — aggregation — ELK — «логи» — aggregation); инструменты (aggregation): (1) ELK Stack (aggregation — Elasticsearch + Logstash + Kibana (aggregation — «полный стек» — aggregation — incident — «сбор/хранение/анализ» — aggregation — logs — «стек» — aggregation — ELK — «популярный» — aggregation); (2) Loki (aggregation — «система логов от Grafana» — aggregation — incident — «лёгкая альтернатива» — aggregation — logs — «логи» — aggregation — Loki — «Grafana» — aggregation); (3) Fluentd (aggregation — «сборщик логов» — aggregation — incident — «сбор/обработка» — aggregation — logs — «сборщик» — aggregation — Fluentd — «CNCF» — aggregation); преимущества (aggregation): (1) Централизация (aggregation — «логи в одном месте» — aggregation — incident — «не искать по серверам» — aggregation — logs — «централизованно» — aggregation); (2) Поиск (aggregation — «быстрый поиск по логам» — aggregation — incident — «запросы» — aggregation — logs — «поиск» — aggregation); (3) Визуализация (aggregation — «дашборды/графики» — aggregation — incident — «визуализация» — aggregation — logs — «дашборды» — aggregation); (4) Алерты (aggregation — «алерты по логам» — aggregation — incident — «оповещения» — aggregation — logs — «алерты» — aggregation); когда использовать (aggregation): распределенные системы (aggregation — «много сервисов» — aggregation — incident — «логи со всех» — aggregation — logs), отладка (aggregation — «поиск по логам» — aggregation — incident — «анализ» — aggregation — logs), мониторинг (aggregation — «алерты по логам» — aggregation — incident — «оповещения» — aggregation — logs); антипаттерны: логи без структуры (aggregation — «неструктурированные логи» — aggregation — incident — «сложно искать» — aggregation — logs — «структурировать» — aggregation), игнорирование хранения (aggregation — «логи не хранятся» — aggregation — incident — «история теряется» — aggregation — «хранить» — aggregation).

Практика: настройка log aggregation

Fluentd (aggregation — сборщик (aggregation — kubectl apply -f fluentd-daemonset.yaml (aggregation — «Fluentd в Kubernetes» — aggregation — logs — «сборщик» — aggregation — Fluentd); Elasticsearch (aggregation — хранилище (aggregation — kubectl apply -f elasticsearch-statefulset.yaml (aggregation — «Elasticsearch в Kubernetes» — aggregation — logs — «хранилище» — aggregation — ELK); Kibana (aggregation — визуализация (aggregation — kubectl apply -f kibana-deployment.yaml (aggregation — «Kibana в Kubernetes» — aggregation — logs — «визуализация» — aggregation — ELK); Loki (aggregation — хранилище (aggregation — kubectl apply -f loki-statefulset.yaml (aggregation — «Loki в Kubernetes» — aggregation — logs — «хранилище» — aggregation — Loki); Grafana (aggregation — визуализация (aggregation — kubectl apply -f grafana-deployment.yaml (aggregation — «Grafana в Kubernetes» — aggregation — logs — «визуализация» — aggregation — Loki).

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

Контекст: микросервисы (logs — много сервисов (incident — aggregation), боль: логи разбросаны (aggregation — «логи на разных серверах» — aggregation — incident — «искать сложно» — aggregation — logs); решение — log aggregation: (1) Fluentd (aggregation — сборщик (aggregation — kubectl apply -f fluentd-daemonset.yaml (aggregation — logs — «сбор логов» — aggregation — Fluentd); (2) Elasticsearch (aggregation — хранилище (aggregation — kubectl apply -f elasticsearch-statefulset.yaml (aggregation — logs — «хранение» — aggregation — ELK); (3) Kibana (aggregation — визуализация (aggregation — kubectl apply -f kibana-deployment.yaml (aggregation — logs — «анализ» — aggregation — ELK); (4) централизация (aggregation — логи в одном месте (aggregation — «все логи в Elasticsearch» — aggregation — incident — «поиск» — aggregation — logs); (5) поиск (aggregation — Kibana (aggregation — «поиск по логам» — aggregation — incident — «запросы» — aggregation — logs — ELK); результат: log aggregation настроен (aggregation — «логи централизованы» — aggregation — incident — «поиск быстрый» — aggregation — logs — «визуализация» — aggregation — «все логи в одном месте» — aggregation); вывод: log aggregation решили задачу (централизация — aggregation — ADR — «логи без структуры» — антипаттерн — logs — структурировать — aggregation — техдолг).

FAQ

Что такое log aggregation и зачем она нужна? Log aggregation (aggregation — сбор логов из распределенных систем (aggregation — «логи со всех сервисов» — aggregation — incident — «в централизованное хранилище» — aggregation — logs); зачем: отладка (aggregation — «логи со всех сервисов» — aggregation — incident — «не искать по серверам» — aggregation — logs), поиск (aggregation — «быстрый поиск» — aggregation — incident — «запросы» — aggregation — logs), мониторинг (aggregation — «алерты по логам» — aggregation — incident — «оповещения» — aggregation — logs); «логи без агрегации» — антипаттерн (искать сложно — incident — агрегация обязательна — aggregation — ADR — техдолг).

Какие инструменты log aggregation существуют и чем они отличаются? ELK Stack (aggregation — Elasticsearch + Logstash + Kibana (aggregation — «полный стек» — aggregation — incident — «сбор/хранение/анализ» — aggregation — logs — ELK — «популярный» — aggregation); Loki (aggregation — «система логов от Grafana» — aggregation — incident — «лёгкая альтернатива» — aggregation — logs — Loki — «Grafana» — aggregation); Fluentd (aggregation — «сборщик логов» — aggregation — incident — «сбор/обработка» — aggregation — logs — Fluentd — «CNCF» — aggregation); отличие: ELK — полный стек (aggregation — ELK), Loki — лёгкая (aggregation — Loki), Fluentd — сборщик (aggregation — Fluentd — «выбор по задаче» — aggregation — incident — ADR — техдолг).

Как настроить log aggregation для Kubernetes? Настройка (aggregation — Fluentd (aggregation — kubectl apply -f fluentd-daemonset.yaml (aggregation — logs — «сборщик» — aggregation — Fluentd); хранилище (aggregation — Elasticsearch/Loki (aggregation — kubectl apply -f elasticsearch-statefulset.yaml (aggregation — logs — «хранилище» — aggregation — ELK); визуализация (aggregation — Kibana/Grafana (aggregation — kubectl apply -f kibana-deployment.yaml (aggregation — logs — «визуализация» — aggregation — ELK); централизация (aggregation — логи в одном месте (aggregation — «все логи» — aggregation — incident — «поиск» — aggregation — logs); «логи без агрегации» — антипаттерн (искать сложно — incident — агрегация обязательна — aggregation — ADR — техдолг).

Как структурировать логи для эффективной агрегации? Структурирование (aggregation — JSON (aggregation — «логи в JSON» — aggregation — incident — «структурированные» — aggregation — logs — «JSON» — aggregation); как: JSON формат (logs — {"timestamp": "...", "level": "ERROR", "message": "..."} (logs — «JSON» — logs — incident — «структура» — logs — aggregation), поля (logs — timestamp/level/message/service (logs — «обязательные поля» — logs — incident — «структура» — logs — aggregation), парсинг (aggregation — Fluentd парсит (aggregation — «JSON → поля» — aggregation — incident — «структурирование» — aggregation — logs — Fluentd); «логи без структуры» — антипаттерн (сложно искать — incident — структурировать — logs — ADR — техдолг).

Источники: Elastic (ELK stack), Grafana Loki docs, Fluentd docs — ссылки в шапке.