Перейти к основному содержимому

Journalctl в Linux

·535 слов·3 минут
DevOps • Networks • Security • Infrastructure
Автор
DevOps • Networks • Security • Infrastructure
DevOps/Network/Infra Engineer, CyberSecurity Expert

journalctl — утилита для просмотра логов, которые собирает systemd-journald. Сам systemd-journald принимает сообщения от ядра, systemd-сервисов, приложений, stdout/stderr, syslog и команды logger, сохраняет их в journal, а journalctl используется для поиска и фильтрации.

Основные команды
#

Команда Назначение
journalctl Показать все доступные логи
journalctl -n 50 Последние 50 записей
journalctl -e Перейти в конец журнала
journalctl -f Смотреть новые сообщения в реальном времени
journalctl --since "1 hour ago" Логи за последний час
journalctl --since today Логи за сегодня
journalctl --no-pager Вывести лог без less

Логи systemd-сервиса
#

Для конкретного сервиса используется параметр -u.

Команда Назначение
journalctl -u nginx Все логи nginx
journalctl -u nginx -n 100 Последние 100 записей
journalctl -u nginx -f Логи в реальном времени
journalctl -u nginx -p err Только ошибки
journalctl -u nginx --since "1 hour ago" Логи за последний час
journalctl -u nginx -b Логи nginx с текущей загрузки

Уровни сообщений
#

journalctl позволяет фильтровать записи по уровню важности через параметр -p.

Уровень Значение Описание
0 emerg Система неработоспособна
1 alert Требуется немедленное вмешательство
2 crit Критическая ошибка
3 err Ошибка
4 warning Предупреждение
5 notice Важное уведомление
6 info Информационное сообщение
7 debug Отладочное сообщение

Например, показать ошибки уровня err и выше:

journalctl -p err

Ошибки только с текущей загрузки:

journalctl -b -p err

Загрузки системы
#

Journal умеет разделять записи по загрузкам системы, что особенно полезно после неожиданного reboot или сбоя.

Команда Назначение
journalctl -b Текущая загрузка
journalctl -b -1 Предыдущая загрузка
journalctl -b -2 Загрузка перед предыдущей
journalctl --list-boots Список доступных загрузок
journalctl -b -1 -p err Ошибки предыдущей загрузки

Логи ядра
#

Сообщения ядра Linux:

journalctl -k

Ошибки ядра:

journalctl -k -p err

Поиск OOM Killer:

journalctl -k | grep -i oom

Фильтрация
#

Journal хранит не только текст сообщения, но и метаданные: PID, UID, имя процесса, systemd unit, priority, hostname и другие поля.

Команда Фильтр
journalctl _PID=1234 По PID процесса
journalctl _COMM=sshd По имени процесса
journalctl _UID=1000 По UID пользователя
journalctl -t backup-script По SYSLOG_IDENTIFIER
journalctl -g "error" По тексту сообщения
journalctl -o verbose Показать все метаданные записи

logger
#

Команда logger позволяет отправлять собственные сообщения в journal. Это удобно для cron-задач и административных скриптов.

logger -t backup-script "Backup started"

Посмотреть записи:

journalctl -t backup-script

Например, в скрипте:

#!/bin/bash

TAG="backup-script"

logger -t "$TAG" "Backup started"

# команды backup

logger -t "$TAG" "Backup completed"

Где хранятся логи
#

Путь Назначение
/run/log/journal/ Временный journal, обычно очищается после reboot
/var/log/journal/ Постоянное хранение логов
/etc/systemd/journald.conf Конфигурация systemd-journald

Для постоянного хранения можно использовать:

Storage=persistent

Основные варианты Storage:

Значение Режим
auto Persistent, если доступен /var/log/journal
persistent Постоянное хранение
volatile Только временное хранение в /run
none Не хранить journal

Размер и очистка journal
#

Команда Назначение
journalctl --disk-usage Показать размер journal
journalctl --vacuum-time=7d Удалить записи старше 7 дней
journalctl --vacuum-size=500M Сократить journal примерно до 500 МБ
journalctl --rotate Принудительно выполнить ротацию

Например:

journalctl --rotate
journalctl --vacuum-time=7d

Быстрая диагностика сервиса
#

Для большинства проблем с systemd-сервисом достаточно нескольких команд:

Команда Что проверяем
systemctl status nginx Текущее состояние сервиса
journalctl -u nginx -n 100 Последние события
journalctl -u nginx -p err Ошибки
journalctl -u nginx -f Логи в реальном времени
journalctl -u nginx -b -1 Что происходило до последнего reboot

Главное различие: systemd-journald собирает и хранит логи, а journalctl показывает, ищет и фильтрует их.

Related

Crontab в Linux
·867 слов·5 минут
Как изменить образ Docker
·561 слово·3 минут
Основные команды Docker
·1030 слов·5 минут