postgres 日志工作流:根据特定工作时间过滤日志事件

postgres 日志工作流:根据特定工作时间过滤日志事件

要分析 postgres 日志,我们的工作流程是:

  1. postgres 通过 syslog 记录
  2. rsyslog 写入一个文本文件
  3. 午夜时分我们停止了 postgres
  4. pgbadger 读取并解析每日日志文件(大约 2 GB)

我们希望排除一些异常值,例如当应用程序启动时,因为对我们来说它们是无用的数据并且只会污染日志文件。

为了实现这一点:如何/在哪里指定工作时间(从..到)过滤器?

理想的解决方案是在 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

答案1

rsyslog.conf您可以使用时间指定过滤器系统属性保存当前时间,如hourminute。例如,

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

请注意,这些过滤器必须位于从第一列开始的同一行上。

相关内容