Шив Йер. Как реализовать журналирование через 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.
Источники: