Logs analysis
https://habr.com/ru/articles/749714/
journalctl - Работа со структурированными логами
Журнал событий, это компонент systemd, который захватывает сообщения Syslog, логи ядра, все события при инициализации системы (RAM, диск, boot, STDOUT/STDERR для всех сервисов), индексирует их и затем предоставляет удобной пользовательский интерфейс для поиска и фильтрации логов. Журнал (systemd journal) можно использовать вместе или вместо syslog или syslog-ng.
Утилита командной строки journalctl, если сравнивать ее с традиционным инструментами для работы с логами в UNIX (tail, grep, sed, awk) более широкие возможности.
Давайте рассмотрим основные возможности которые предоставляет журнал systemd и способы их применения.
Журнал systemd сохраняется на диск, поэтому все логи «переживают» перезагрузку системы. Посмотреть список с доступными загрузками:
Команда journalctl –b
покажет все логи для текущей загрузки. Если необходимы логи какого-то определенного периода, то нужно добавить в качестве аргумента номер загрузки:
Для того, чтобы получить все логи для текущей загрузки в обратном хронологическом порядке:
Все логи за все время в одном файле:
Текущая загрузка, только логи ядра:
Для того, чтобы можно было отслеживать логи в режиме реального времени (похоже на tail –f):
Просмотреть сколько места занимают журналы systemd на диске (/var/log/journal/):
Получить логи и метаданные:
Экспорт логов в файл:
Фильтрация логов
Можно фильтровать логи по приоритету (RFC 5424 6.2.1):
Вывести только логи c приоритетом error, critical и alert:
Логи только для определенного идентификатора:
journalctl можно использовать вместе с стандартными инструментами командной строки - grep, awk:
Для того, чтобы сократить время лучше использовать флаг -g
или --grep
:
Как и grep --grep
«понимает» регулярные выражения:
Позволяет отфильтровывать логи по временным штампам, без grep, awk и sed. Не нужно запоминать сложные регулярные выражения:
Если у вас геораспределенная инфраструктура в разных часовых поясах, то journalctl поможет с разными часовыми поясами:
Журнал systemd сохраняет логи в структурированном формате:
Журнал systemd сохраняет логи в структурированном формате:
Или например посмотреть логи всех программ написанных на питоне:
JSON - новые возможности для автоматизации
journalctl умеет выводить логи в формате json – можно использовать утилиту jq для фильтрации сообщений:
Структурированные логи открывают широкие возможности для автоматизации. Больше не надо «хачить» пытаясь склеить sed, grep и awk в скриптах. Любой высокоуровневый язык программирования содержит модуль для работы с JSON.
В качестве наглядного примера можно представить себе сдающий сценарий: Приложение X записывает в журнал событий какие-то сообщения. Простая программа работающая в режиме демона Linux отслеживает события в журнале systemd. В случае появления какого-то определенного сообщения в журнале, программа следуя внутренней логике отправляет сообщение в шину данных (kafka, rabbitmq, NATS) или выполняет определенные операции в системе:
Код
Теперь в одной сессии терминала мы запускаем программу отслеживающую события в журнале:
А в другой сессии терминала эмулируем запись приложением X сообщений в журнал с помощью встроенной утилиты systemd-cat:
В данном случае для работы с журналом используется пакет "os/exec" – то есть мы выполняем системные команды, но можно воспользоваться одной из существующих библиотек:
https://github.com/coreos/go-systemd
Это простой пример использования структурированных логов журнала systemd. Возможности systemd гораздо шире – многие из них используются, например облачными провайдерами для построения отказоустойчивой инфраструктуры.
sos report - когда нужно найти иголку в стоге сена
https://github.com/sosreport/sos
Не всегда есть возможность в спокойной, неспешной обстановке проанализировать логи и выводы различных диагностических команд на промышленной инфраструктуры. В некоторых случаях для поиска корневой причины нужен глубокий анализ, сверка логово и метрик в ретроспективе, иногда написание автоматизации для парсинга логов.
Для таких сценариев как раз и предназначен sos report. Это унифицированный инструмент для сбора логов и диагностической информации. С помощью sos report можно создавать архив со всей необходимой информацией о системе – эти данные используются для анализа и поиска проблем в режиме оффлайн.
Установка sosreport:
Программа написана Python. Легко расширяется. Для sos report были написаны десятки плагинов:
профилей:
и пресетов:
Все это можно кастомизировать под определенный кейс.
Пример генерации репорта:
Созданный архив с логами можно забрать для дальнейшего анализа:
В зависимости от выбранного профиля и плагинов, в архиве может содержатся подробная диагностическая информация с выводами различных утилит и инструментов:
При генерации репорта, с помощью флагов --clean
, --domains
и --keywords
можно обфусцирвоать (подчистить) полученный архив удалив всю конфиденциальную информацию.
Last updated