PostgreSQL 日志配置优化:仅记录连接成功信息并过滤本地连接日志

学习笔记作者:admin日期:2025-07-17点击:26

摘要:本文介绍了如何通过调整 PostgreSQL 配置文件,仅记录连接成功的信息(IP、数据库名、用户名、客户端应用等),并解决日志中出现的大量本地连接日志问题。推荐使用 CSV 日志格式并结合日志采集工具进行过滤,避免影响日志分析效率。

1. 问题背景

      用户希望在 PostgreSQL 中仅记录连接成功的信息,如 IP 地址、数据库名、用户名、客户端应用等,并且遇到大量本地连接日志的问题,这些日志可能来自监控脚本或系统工具。

2. 解决方案概述

      为满足需求,需对 PostgreSQL 的日志配置进行调整,包括关闭不必要的日志项、启用连接日志,并通过日志采集工具过滤本地连接日志。

3. 修改 PostgreSQL 配置

      以下是针对 PostgreSQL 的配置修改建议:


logging_collector = on
log_destination = 'csvlog'
log_directory = 'pg_log'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_file_mode = 0600
log_rotation_age = 1d
log_rotation_size = 100MB
log_truncate_on_rotation = off
log_timezone = UTC

log_connections = on
log_line_prefix = '%m [%p] user=%u,db=%d,app=%a,client=%h '

log_statement = none
log_min_messages = warning
log_min_error_statement = error
log_min_duration_statement = -1
log_duration = off
log_checkpoints = off
log_disconnections = off
log_lock_waits = off
log_temp_files = -1
log_autovacuum_min_duration = -1

      此配置将只记录连接成功的信息,同时关闭其他不相关日志。

4. 处理本地连接日志

      本地连接日志通常由系统工具或监控脚本产生,例如 pg_isreadypg_basebackup。这些日志内容如下:

2025-07-01 15:45:09.135 UTC,,,122,"[local]",68640285.7a,1,"",2025-07-01 15:45:09 UTC,,0,LOG,00000,"connection received: host=[local]"

      要减少这些日志,可以采取以下方法:

4.1 使用 CSV 日志并后期过滤

      由于日志以 CSV 格式存储,可通过日志采集工具(如 Logstash、Promtail)过滤掉包含 host=[local] 的行。

pipeline_stages:
  - regex:
      expression: '.*host=$$local$$.*'
  - drop:
      source: 'match'

4.2 修改客户端行为

      如果能控制发起本地连接的程序,建议改为使用 TCP 连接,例如指定 host=127.0.0.1

pg_isready -h 127.0.0.1 -U postgres

4.3 使用 syslog 并配合 rsyslog 过滤

      若日志输出到 syslog,可在 rsyslog 中添加规则来忽略本地连接日志。

if $msg contains 'host=$$local$$' then stop

5. 总结

      通过合理配置 PostgreSQL 日志参数,可以实现仅记录连接成功信息的目标。对于本地连接日志,推荐使用日志采集工具进行后期过滤,或者从源头上避免其生成。这样既能确保日志的简洁性,又不影响系统的正常运行。

上一篇      下一篇