Главная

Wednesday, 2 December 2020

Журналы Linux #6 - journald.

Всем привет.

Я уже писал про систему инициализации systemd, но забыл упомянуть про journald - демон (служба), который собирает записи журнала из всей системы: это загрузочные сообщения, сообщения из ядра и syslog и различных приложений. Он хранит все сообщения в центральном месте - файле журнала. О нем много написано здесь и и здесь, поэтому здесь я изложу кратко только его особенности конфигурации.

Journald особенности:

-бинарный формат логов (защита от подделки, возможность конвертации в другие форматы)

-не требует специальной настройки

-структурированные данные (multi-field, multi-line)

-индексированные данные

-центральное хранилище логов


Какие логи принимает journald?

-простые syslog логи

-логи ядра (kmsg)

-структурированные данные через Journal API

-логи и статусы systemd юнитов

-записи системы аудита (auditd)


Условия работы journald:

-сервис - systemd-journald

-основной конфиг - /etc/systemd/journald.conf

-хранилище логов - /var/log/journal/*

-чтение из хранилища доступно только для группы systemd-journald


Параметры конфигурации:

-Storage (volatile, persistent, auto, none), по умолчанию auto (пишет логи в tmpfs), чтобы писать

логи на диск - нужно поставить persistent

-Compress (yes, no) - сжимает данные перед записью

-Seal (yes, no) - накладывает криптографическую печать

-SplitMode (uid, none) - позволяет разделять логи по UID пользователей

-RateLimitInterval, RateLimitBurst - регулировка скорость обработки

-MaxFileSec - период ротации

-MaxRetentionSec - как долго хранить логи

-SyncIntervalSec - интервал синхронизации журнала с файлами логов

-ForwardToSyslog, ForwardToKMsg, ForwardToConsole, ForwardToWall - опции перенаправления сообщений

-MaxLevelStore, MaxLevelSyslog, MaxLevelKMsg, MaxLevelConsole, MaxLevelWall - задаем уровни важности сообщений для разных логов

-SystemMaxUse - максимальный объем, который логи могут занимать на диске

-SystemKeepFree - объем свободного места на диске, после сохранения логов

-SystemMaxFileSize - объем файла лога, по достижении которого он должен быть удален с

диска

-RuntimeMaxUse - максимальный объем, который логи могут занимать в файловой системе /run

-RuntimeKeepFree - объем свободного места на /run, после сохранения логов

-RuntimeMaxFileSize - объем файла лога, по достижении которого он должен быть удален из

файловой системы /run


Централизованное хранение:

-systemd-journal-remote - демон для приема и сбора логов с удаленных хостов (работает в активном или пассивном режиме)

-systemd-journal-gatewayd - http-сервер для приема логов на центральный хост по протоколу http

-systemd-journal-upload - демон для загрузки логов с локальной машины в удаленное хранилище


Установка сервисов journald:

1) создаем каталог для хранения логов на центральном сервере:

yum -y install systemd-journal-gateway

mkdir -p /var/log/journal/remote

chown systemd-journal-remote:systemd-journal-remote /var/log/journal/remote

2) редактируем конфиг юнита systemd:

[Unit]

Description=Journal Remote Sink Service

Requires=systemd-journal-remote.socket

[Service]

ExecStart=/usr/lib/systemd/systemd-journal-remote --listen-http=-3 --output=/var/log/journal/remote

User=systemd-journal-remote

Group=systemd-journal-remote

PrivateTmp=yes

PrivateDevices=yes

PrivateNetwork=yes

WatchdogSec=10min

3) запускаем демон systemd-journal-remote:

На удаленном сервере редактируем конфиг

/etc/systemd/journal-upload.conf:

systemctl daemon-reload

systemctl restart systemd-journal-remote

[Upload]

URL=http://192.168.1.10:19532

# ServerKeyFile=/etc/ssl/private/journal-upload.pem

# ServerCertificateFile=/etc/ssl/certs/journal-upload.pem

# TrustedCertificateFile=/etc/ssl/ca/trusted.pem

4) на удаленном сервере запускаем демон

systemd-journal-upload:

5) на центральном сервере смотрим логи с удаленного сервера:

systemctl start systemd-journal-upload

journalctl -D /var/log/journal/remote --follow


Пример запуска systemd-journal-remote для отправки логов на удаленный сервер:

[root@logs ~]# systemd-journal-remote ??url https://myhost.forza.com:19531/


Пример запуска systemd-journal-remote для экспорта локальных логов в другой каталог:

[root@logs ~]# journalctl -o export | systemd-journal-remote -o /


No comments:

Post a Comment

А что вы думаете по этому поводу?