- Организация системных служб в Astra Linux
- Инструмент journalctl для анализа журналов системных служб
- Источники данных для службы journalctl
- Сохранение журналов после перезагрузок
- Фильтрация сообщений
- Просмотр сообщений определенной загрузки
- Просмотр сообщений за определенный период времени
- Фильтрация сообщений ядра
- Фильтрация сообщений определенных служб и приложений
- Дополнительные опции просмотра
- Ограничение размера журнала
- Удаление журналов
- Ротация логов в Linux и FreeBSD с помощью logrotate
- Установка
- Настройка
- Описание опций
- Запуск
- Вручную
Организация системных служб в Astra Linux
Обновления Astra Linux, выпущенные после очередного обновления 1.5, используют систему управления службами systemd (подробнее см. Systemd). В состав компонент systemd, предоставляемых при установке ОС входят:
- systemd — системная служба управления службами;
- systemctl – инструмент командной строки для управления службами;
- systemd-analyze — инструмент командной строки для получения статистики работы служб;
- journald – системная служба ведения журналов служб;
- journalctl — инструмент командной строки для анализа журналов служб.
Инструмент journalctl для анализа журналов системных служб
Общая команда для просмотра журналов:
Команды выводит все записи из всех журналов начиная с момента последней загрузки ОС. Записи выводятся в порядке регистрации. При просмотре можно использовать клавиши PageUp и PageDown для поэкранного листания, Пробел — для поэкранного последовательного просмотра, Enter — для построчного последовательного просмотра, Q — для выхода. Отметки времени регистрации событий по умолчанию отображаются в локальном времени. Для отображения отметок времени в формате UTC (см. Службы синхронизации времени в Astra Linux) можно использовать опцию —utc:
мар 18 14:28:46.171881 se10704 kernel:
или опция short-iso-precise (доступна начиная с очередного обновления x.7):
2023-03-18T14:28:46.171893+0300 se10704 kernel:
Для фильтрации сообщений по критичности можно использовать опцию -p с указанием уровня критичности. Для обозначения критичности используются следующие значения:
- 0 — emergency — неработоспособность системы;
- 1 — alerts — предупреждения, требующие немедленного вмешательства;
- 2 — critical — критическое состояние;
- 3 — errors — ошибки;
- 4 — warning — предупреждения;
- 5 — notice — уведомления;
- 6 — info — информационные сообщения;
- 7 — debug — отладочные сообщения.
При указании уровня критичности выводятся все сообщения с указанным и меньшим уровнем. Например если указать значение -p 3, то будут показаны все сообщения с уровнями 3, 2, 1 и 0 (т.е. все сообщения об ошибках).
Источники данных для службы journalctl
Служба journald консолидирует данные из следующих источников:
- сокет /run/systemd/journal/stdout – данные, поступающие от служб systemd;
- устройство /dev/kmsg — журнал ядра;
- устройство /dev/log ( /run/systemd/joural/dev-log) — данные приложений, поступающие через службу syslog.
Сохранение журналов после перезагрузок
При настройках, заданных по умолчанию служба journald перезаписывает журналы при каждой перезагрузке. Соответственно, вызов инструмента journalctl выведет журнал начиная с момента последней загрузки системы. Для сохранения журналов на постоянной основе (после перезагрузки) следует создать каталог /var/log/journal/, в котором и будут на постоянной основе сохраняться журналы. Для управления постоянным сохранением журналов используется параметр Storage в файле /etc/systemd/journald.conf. По умолчанию этот параметр не задан (имеет значение Auto). При этом каталог постоянного хранения журналов /var/log/journal/:
- используется, если он существует;
- не создается автоматически, и если этого каталога не существует, то журнал будет записываться в /run/log/journal без сохранения между перезагрузками.
Каталог будет /var/log/journal/ создаваться автоматически если значение параметра Storage изменить на persistent и перезапустить systemd-journald.service или перезагрузить ОС. Подробнее см. man journald.conf.
Проверить наличие сохраненных журналов можно командой:
-1 98b893e51c0a43249b8b6e824266fc1c Tue 2023-02-28 07:46:21 MSK—Tue 2023-02-28 15:22:02 MSK 0 cdd48e77de394ebca4df162359bfb412 Tue 2023-02-28 15:22:17 MSK—Tue 2023-02-28 15:41:34 MSK
В примере вывода первое поле представляет собой номер журнала, второе поле — идентификатор загрузки. Далее предоставлен диапазон времени, в течение которого выполнялась запись в журнал. Эти значения можно использовать при выборе журнала для просмотра. Например, просмотреть журнал последней загрузки ОС, можно командой:
Фильтрация сообщений
Просмотр сообщений определенной загрузки
Для выбора загрузки для фильтрации сообщений можно использовать опцию -b с указанием номера журнала. Например, просмотреть журнал последней загрузки ОС, можно командой:
Просмотр сообщений за определенный период времени
Для задания периодов времени для фильтрации событий при просмотре можно использовать опции —snce (с какого времени) и —until (до какого времени) в сочетании с лексемами “yesterday” (вчера), “today” (сегодня), “tomorrow” (завтра), или “now” (сейчас). Например:
Фильтрация сообщений ядра
Чтобы отдельно просмотреть сообщения ядра используется ключом -k:
Фильтрация сообщений определенных служб и приложений
Для фильтрации сообщений отдельных служб можно использовать опцию -u. Например, для просмотра сообщений службы NetworkManager можно использовать команду:
Также можно отфильтровать сообщения приложения, указав его исполняемый файл. Например, для менеджера дисплеев fly-dm:
Дополнительные опции просмотра
Следить за появлением новых сообщений:
По умолчанию journalctl отсекает части выводимых строк, не вписывающиеся в экран по ширине. Управление этой возможностью производится значением переменной окружения SYSTEMD_LESS, определяющей опции программы less (программа постраничного просмотра, используемая по умолчанию). По умолчанию переменная имеет значение FRSXMK. Опция S отвечает за перенос строк, длина которых превышает ширину экрана терминала. Если опцию S исключить, то строки не будут обрезаться и прочесть их содержимое можно с помощью клавиш «стрелка влево» и «стрелка вправо». Пример команды:
Ограничение размера журнала
Если журналы сохраняются после перезагрузки, то по умолчанию размер журналов ограничен 10% от объема файлового раздела и максимально может занять 4 Гб дискового пространства. Максимальный объем журнала можно задать явно в параметре SystemMaxUse в файле /etc/systemd/journald.conf.
Удаление журналов
Удалить файлы журналов можно вручную или использовать journalctl. Например:
Удалить журналы, оставив только последние 100 Мб:
Ротация логов в Linux и FreeBSD с помощью logrotate
Обновлено: 17.01.2022 Опубликовано: 08.06.2017
С помощью утилиты logrotate можно настроить автоматическое удаление (чистку) лог-файлов. В противном случае, некоторые логи могут заполнить все дисковое пространство, что приведет к проблемам в работе операционной системы.
Установка
Чаще всего, в Linux данная утилита установлена по умолчанию. Если это не так, установка выполняется следующими командами.
Ubuntu / Debian:
CentOS / Red Hat:
Утилита не работает как служба, поэтому нет необходимости в ее запуске или перезагрузке (logrotate start или logrotate restart делать не нужно).
Настройка
Для приложение, ротация логов настраивается в отдельных файлах, расположенных по пути /etc/logrotate.d/ (во FreeBSD — /usr/local/etc/logrotate.d/).
К примеру, нам необходимо настроить ротацию лога для logstash-forwarder. Создаем файл со следующим содержимым:
/var/log/logstash-forwarder/* rotate 30
size=10M
missingok
notifempty
daily
compress
delaycompress
maxage 30
create 0644 root root
postrotate
/usr/bin/systemctl restart logstash-forwarder
endscript
>
* /var/log/logstash-forwarder/* — путь к файлу, который нужно ротировать. * указывает, что нужно чистить все файлы, которые расположены в каталоге /var/log/logstash-forwarder.
** имейте в виду, что во FreeBSD, путь может быть /usr/local/etc/logrotate.d/logstash.
При настройке необходимо проверять работу сервиса после ротации лога. Некоторые службы могут перестать работать без лог-файла. В данном случае, необходимо создавать новый (create). Также, в некоторых случаях, сервис необходимо перезапускать, так как при создании нового файла меняется его дескриптор.
Описание опций
Для описания ротации мы можем использовать следующие директивы:
Параметр | Описание |
---|---|
rotate N | Хранить последние N ротированных файлов. Остальные удалять. |
maxage N | Хранить ротированные файлы за последние N дней. Остальные удалять. |
copytruncate | Сначала создается копия файла лога, после уже обрезается действующий. Это может понадобиться в случаях, когда программа должна писать лог непрерывно. Но существует 2 очевидных минуса: долгое выполнение при больших объемах и возможность потерять небольшое число записей, если из запись придется на процесс усечения. |
size=xM | Пока размер лог-файла не превысит x мегабайт, он не будет ротироваться. |
missingok | Если файла не существует, не выкидывать ошибку. |
notifempty | Если файл пустой, не выполнять никаких действий. |
daily | Делать ротацию каждый день. |
weekly | Делать ротацию каждую неделю. |
monthly | Делать ротацию каждый месяц. |
compress | Сжимать ротированные файлы. |
delaycompress | Сжимать только предыдущий журнал. Позволяет избежать ошибок, связанных с отсутствием доступа к используемому файлу. |
create 0644 root root | Создать новый лог-файл после ротирования с конкретными правами 0644 и владельцем root (меняем значения на нужные). Можно указать без прав (просто create), тогда права будут назначены по умолчанию для пользователя, под которым запускается ротация. |
su root root | Под какими пользователем и группой выполнять ротацию. В данном примере root (необходимо поменять на нужные). |
prerotate . endscript | Скрипт, который необходимо выполнить перед чисткой лога. |
postrotate . endscript | Скрипт, который необходимо выполнить после чистки лога. |
sharedscripts | Если мы указали выполнить ротацию для нескольких файлов (например, при помощи *), скрипт prerotate/postrotate будет выполняться для каждого из них. Данная опция указывает, что скрипт нужно выполнить один раз после завершения ротации всех файлов. |
Запуск
Мы можем разово запустить ротацию, а также настроить автозапуск.
Вручную
Запуск выполняется со следующим синтаксисом: