К основному содержанию

Кейс

«Прочее» на 24 миллиона строк: как мы заставили логи MikroTik разбираться правильно

Логи с маршрутизаторов собирались и занимали место, а на вопрос «кто и что менял в конфигурации на прошлой неделе» отвечали неправильно. Перебрали конвейер разбора Logstash целиком: события классифицируются, имена и адреса лежат в своих полях, история пересчитана задним числом, расхождений — 0.

855 118событий вынуто из «прочего» и разложено по своим типам

Как устроен сбор

  1. Приём. rsyslog принимает UDP/TCP от сетевых устройств и серверов. Дисковая очередь — логи переживают недоступность коллектора.
  2. Буфер. Kafka. Всплеск при разборе накопленного бэклога не роняет разбор.
  3. Префильтр. Снятие технического префикса, отпечаток сообщения, маршрутизация потока.
  4. Разбор. Фильтры Logstash: 12 веток классификации, гроки под реальные формы сообщений, раскладка адресов и имён по полям ECS.
  5. Хранение. Разные типы логов — в разные датастримы Elasticsearch, каждый со своим шаблоном полей и жизненным циклом.

Задача

Логи с сетевого оборудования — это не один формат, а десяток диалектов. Вендорский syslog редко совпадает с RFC, а часто не совпадает и с собственной документацией вендора.

Что мы увидели в живом потоке:

Итог: большая часть потока лежала в общем «прочем», а дашборд изменений конфигурации был почти пустым при живых логинах администраторов.

Главное условие — ничего не потерять. Ни одно сообщение не должно быть выброшено только потому, что фильтр его не понял: непонятое получает явный тип «неклассифицировано», а не пропадает молча.

Что сделали

Результат

Изменения конфигурации

было стало
Записей в дашборде 1 469 3 503
Записей без имени автора больше половины 0

Вынуто из «прочего»

Тип события Документов
link_up 310 647
link_down 310 482
ipsec_error 230 521
ipsec_phase1_failed 3 468
Итого 855 118

Имена пользователей в своём поле

было стало
Документов с именем 582 458 2 340 392

Прибавка — 1,76 млн: события sshd, sudo и systemd, у которых имя раньше лежало только в тексте сообщения и не искалось.

Переход на ECS

event.action  35 971 910 = event_action  35 971 910
user.name      2 358 161 = username       2 358 161
расхождений 0

Классифицировано по категориям 12 856 585 документов, остаток — 0. Документов с потерянными полями (_ignored) на исправленных потоках: 0,3 % против 64,4 % до правок.

Что нашли попутно — и это оказалось важнее логов

После того как события состояния интерфейсов стали видны, выяснилось, что порты флапают: 347 794 перехода на одном интерфейсе, 117 034 на другом, 12 758 подъёмов и 12 725 падений за сутки. Это не проблема логирования — это неисправность физики или автосогласования, которая до этого просто не попадала ни на один дашборд.

Отдельно: 80 % объёма хранилища занимали сообщения сломанного файрвола — по строке на пакет. Диагноз поставлен по данным, файрвол пересобран, поток упал с 9 328 до 1 089 документов в минуту.

Три правила, которые мы вынесли из этой работы

  1. Порядок веток разбора — часть логики, а не оформление. Широкое условие выше молча забирает события у узкого ниже. Добавляя ветку, надо проверять запросом, не ловит ли её признак кто-то выше по цепочке.

  2. Молчаливые отказы опаснее громких. Подстановка несуществующего поля кладёт в индекс текст шаблона; пропавшее поле рисует пустую панель; неразобранный заголовок подменяет время события временем приёма. Ни одно из этого не даёт ошибки в логе — только неверные данные на экране.

  3. Заплатка обязана иметь записанный критерий снятия. Иначе она останется навсегда и замаскирует следующую поломку того же рода.

Чем можем помочь

Если у вас уже стоит ELK, но дашборды по сетевому оборудованию выглядят подозрительно пустыми — скорее всего, дело не в железе и не в объёме, а в разборе.

Берёмся за:

Все кейсы