Шив Йер. Как реализовать журналирование через Syslog с использованием JournalD в PostgreSQL

Источник: Shiv Iyer. How to Implement Syslog Logging Using JournalD in PostgreSQL

Руководство по настройке журналирования Syslog через JournalD в PostgreSQL 2024-05-12

Содержание

Введение

Журналирование средствами syslog - хорошо зарекомендовавшая себя функция PostgreSQL, которая доступна много лет. Несмотря на то, что она существует давно, пользуется ей совсем немного пользователей. Вот почему я решил написать исчерпывающее вводное руководство, которое может быть полезным для широкой аудитории. Основная цель этого руководства - рассказать об этой обделённой вниманием функции и предоставить подробное руководство по её эффективному использованию.

Поскольку большинство современных дистрибутивов Linux теперь по умолчанию используют для журналирования journald, в моём руководстве сосредоточим внимание на интеграции журналирования PostgreSQL с journald. Этот подход поможет улучшить процесс журналирования, управление журналами и анализ данных из журнала. В конце этого руководства пользователи должны чётко представлять, как настроить и оптимизировать журналирование в PostgreSQL для лучшего соответствия современной практике журналирования.

Терминология Syslog

Syslog является стандартом по умолчанию для журналирования в системах, подобных Unix. Он работает через демон syslog, который является фоновым процессом, принимающем журнальные сообщения из разных приложений и сервисов, работающих в системе. После принятия сообщения демон обрабатывает его на основании предопределённого набора правил, настроенного системным администратором.

Каждому сообщению, обрабатываемому демоном syslog, присваиваются два ключевых атрибута: средство и важность. Код средства помогает определить тип программы, сгенерировавшей сообщение. Предопределены следующие средства: kernel для сообщений от ядра операционной системы, mail для компонентов почтового сервера и security для сообщений о безопасности. К несчастью, нет предопределённого средства для PostgreSQL или какой-либо другой системы баз данных. Поэтому PostgreSQL должен использовать одно из средств общего назначения от local0 до local7. Они обозначают сообщения, которые не соответствуют более специфичным категориям и предназначены для нетиповых журналов от приложений вроде баз данных.

Уровень важности сообщений syslog указывает на важность или срочность события, соответствующего сообщению. Он может находиться в диапазоне уровней от отладочных сообщений, которые имеют большим образом информационный характер и полезны в процессе отладки, до критических сообщений, указывающих на серьёзные проблемы, на которые необходимо обратить немедленное внимание.

При настройке PostgreSQL для журналирования в syslog, важно выбрать подходящее средство и чётко определить уровни важности. Благодаря этому сообщениям не только будет назначена правильная категория, но и они будут отфильтрованы и обработаны тем способом, который соответствует общей стратегии системы. С использованием средств от local0 до local7 PostgreSQL может эффективно интегрироваться в более широкую систему журналирования, позволяющую эффективнее управлять и анализировать журналы.

Уровень сообщения PostgreSQL Важность Syslog
DEBUG5 debug
DEBUG4 debug
DEBUG3 debug
DEBUG2 debug
DEBUG1 debug
LOG info
INFO info
NOTICE notice
WARNING warning
FATAL err
PANIC crit

Syslog и Journald

В настоящее время большинство дистрибутивов Linux использует systemd для различных ключевых задач управления системой. Systemd включает в себя:

  • Работу в роли процесса init, который работает под идентификатором 1 и отвечает за запуск всех остальных процессов в системе.

  • Систему автоматического запуска и управления сервисами, такими как PostgreSQL, позволяющую запускать эти сервисы при загрузке системы и эффективно управлять ими на протяжении всего времени работы системы.

  • Обработку общесистемных журналов с помощью выделенного демона под названием journald.

В частности, демон journald из systemd очень важен, поскольку реализует API syslog, что позволяет бесшовно интегрировать его с другими системами журналирования, включая PostgreSQL. В этой статье я сосредоточусь на настройке PostgreSQL для журналирования его активности с использованием journald. Хотя этапы настройки пригодны для любой реализации syslog, journald предоставляет дополнительные преимущества для локального журналирования на одном компьютере.

Если ваша цель - собрать журналы с различных систем в один централизованный репозиторий, systemd содержит надёжные инструменты для этих целей. Централизованное журналирование играет ключевое значение для управления журналами в средах, где нужно наблюдать и управлять несколькими серверами одновременно.

Настройка PostgreSQL для журналирования Syslog

Настройка на стороне PostgreSQL проста: всё, что нужно - отредактировать postgresql.conf

log_destination = 'syslog'
# Значение "on" используется, если PostgreSQL пишет журнал в файл
logging_collector = off
# Значение по умолчанию - "local0"
syslog_facility = 'local0'
# Значение по умолчанию - "postgres"
syslog_ident = postgres
# Нет смысла помещать в журнал время и идентификатор процесса
# (systemd журналирует их в любом случае),
# но журналировать пользователя и базу данных может оказаться полезно
log_line_prefix = '%q%u@%d '

После внесения этих изменения нужно перезагрузить PostgreSQL, чтобы применить новые настройки. Если же было изменено значение logging_collector, необходимо перезапустить сервис PostgreSQL.

Если на компьютере запущено несколько кластеров PostgreSQL, разумно назначить уникальные значения syslog_ident или syslog_facility для каждого кластера. Эти настройки помогут отделить журналы каждого кластера, упрощая поиск проблем и поддержку целостности системы. Этот этап в частности полезен для системных администраторов, управляющих несколькими базами данных и которым нужно обеспечить точное управление журналами.

Short option Long Option Description
-t postgres --identifier=postgres Просмотреть сообщения только с идентификатором postgres. В частности это полезно для управления несколькими кластерами с разными идентификаторами.
-S 09:00:00 --since=09:00:00 Отобразить сообщения только с 9 утра сегодняшнего дня (для другой даты и времени воспользуйтесь, например, опцией -S '2024-05-17 11:10:00').
-S today --since=today Отобразить сообщения только с полуночи сегодняшнего дня.
-S -1h --since=-1h Показать сообщения только за последний час.
-p warning --priority=warning Отобразить сообщения только из категорий ERROR, FATAL и PANIC.
-g 'syntax error' --grep='syntax error' Отобразить только сообщения, соответствующие указанному критерию (поддерживаются регулярные выражения Perl).
-f --follow Показать только самые недавние записи в журнале и продолжать выводить новые сообщения по мере их поступления в журнал.

Journald и разрешения

Журналы PostgreSQL содержат секретную информацию, включая выражения SQL, их параметры и, возможно, пароли. Следственно, важно ограничить доступ к журналу PostgreSQL для защиты от несанкционированного доступа. Это можно сделать с помощью journald: journalctl разрешает просмотр журнала только членам определённых системных групп. На операционной системе Fedora 39 Linux это группы adm, systemd-journal и wheel, хотя эта конфигурация может отличаться в разных дистрибутивах.

Кроме этого важно защитить каталоги, в которых journald хранит информацию. В моей системе это подкаталоги каталога /var/log/journal, доступ к которому разрешён только для пользователей из группы systemd-journal.

Производительность и управление местом в Journald

Широко известно, что журналирование может вызывать проблемы с производительностью. Эта проблема касаетсяч и журналирования syslog, когда PostgreSQL отправляет все сообщения демону syslog. Однако, journald подавляет их, ограничивая количество получаемых сообщений и отбрасывая некоторые из них, если объём становится чрезмерным. Этот подход помогает снизить влияние избыточного журналирования.

Кроме этого journald эффективно контролирует рост файлов журнала. Опции конфигурации /etc/systemd/journald.conf позволяют администратору ограничить размер файла журнала, чтобы журналы не тратили ценное место на диске.

Это руководство предоставляет введение в настройку PostgreSQL для журналирования в syslog с акцентом на интеграцию с journald из состава systemd для эффективного управления журналами. Оно объясняет основы syslog, включая настройку параметров журналирования PostgreSQL и объясняет преимущества использования journald, такие как улучшение производительности и управление местом на диске. Руководство также содержит советы для просмотра и защиты журналов, благодаря чему является исчерпывающим ресурсом по лучшим практикам журналирования PostgreSQL.

Источники: