Назад | Перейти на главную страницу

Рабочий процесс журнала postgres: фильтрация событий журнала с указанием определенных рабочих часов

Для анализа журналов postgres наш рабочий процесс:

  1. журналы postgres через syslog
  2. rsyslog записывает в один текстовый файл
  3. в полночь мы останавливаем постгрес
  4. pgbadger читает и анализирует ежедневный файл журнала (около 2 Гбайт)

Мы хотим исключить некоторые выбросы, например, при запуске приложения, потому что для нас они являются бесполезными данными и просто загрязняют файл журнала.

Для этого: как / где я могу указать фильтр рабочего времени (с .. по)?

Идеальное решение - установить фильтр в postgres.

Менее идеального, фильтруйте в rsyslog.

Последний вариант - фильтровать в pgbadger: вывод html будет обрезан, но наши серверы продолжают писать толстые файлы журнала.


текущая конфигурация rsyslog:

:msg, contains, "connection authorized: user=root database=root" ~
:msg, contains, "FATAL:  database \"root\" does not exist" ~
local0.*    -/var/log/postgresql.log

Вы можете указать фильтр, используя время в rsyslog.conf используя свойства системы текущее время, например hour и minute. Например,

if $$hour >= '10' and $$hour <='17' then /var/log/output

Насколько я понимаю, значения часов и минут представляют собой 2-символьные строки с нулем в начале.

Вы можете совместить это с тестом для объекта (local0 и т. Д.), Например:

if ( $syslogfacility-text=='local0' ) and ( $$hour <= '10' or $$hour>='20' ) then stop

(где stop это новый способ сказать ~), или, если хотите

if ( $syslogfacility-text=='local0' ) and ( $$hour > '10' and $$hour<'20' ) then /var/log/output

Обратите внимание, что эти фильтры должны быть в одной строке, начиная с первого столбца.