PostgreSQL 模块编辑

postgresql 模块收集并解析由 PostgreSQL 创建的日志。

当您运行该模块时,它会在后台执行一些任务

  • 设置日志文件的默认路径(但别担心,您可以覆盖默认值)
  • 确保每个多行日志事件都作为单个事件发送
  • 使用 Elasticsearch 摄取管道来解析和处理日志行,将数据塑造成适合在 Kibana 中可视化的结构
  • 部署仪表板以可视化日志数据

阅读快速入门以了解如何配置和运行模块。

兼容性编辑

此模块有两种形式:一种是基于 Linux 发行版默认值的日志文件解析器,另一种是 CSV 日志解析器,您需要在数据库配置中启用它。

使用 .logpostgresql 模块已经过测试,可以使用 Ubuntu 上版本 9.5、Debian 上版本 9.6 以及 Arch Linux 9.3 上版本 10.11、11.4 和 12.2 的日志。

使用 .csvpostgresql 模块已经过测试,可以使用版本 11 和 13(此处发行版无关紧要)。

支持的日志格式编辑

此模块可以收集来自 PostgreSQL 服务器的任何日志,但为了能够更好地分析其内容并提取更多信息,应以确定的方式格式化它们。

日志格式有一些设置需要考虑。

日志行应以毫秒为单位的时间戳、进程 ID、用户 ID 和数据库名称为前缀。 这通常是大多数发行版中的默认设置,并在配置文件中转换为此设置

log_line_prefix = '%m [%p] %q%u@%d '

可以将 PostgreSQL 服务器配置为记录语句及其持续时间,并且此模块能够收集此信息。 为了能够将每个持续时间与其语句相关联,必须将它们记录在同一行中。 当使用以下选项时会发生这种情况

log_duration = 'on'
log_statement = 'none'
log_min_duration_statement = 0

log_min_duration_statement 中设置零值将记录客户端执行的所有语句。 您可能希望将其配置为更高的值,以便它仅记录较慢的语句。 此值以毫秒为单位配置。

当同时使用 log_statementlog_duration 时,语句和持续时间会记录在不同的行中,Filebeat 无法关联这两个值,因此建议禁用 log_statement

Metricbeat 的 PostgreSQL 模块还能够收集有关服务器中执行的所有语句的信息。 您可以选择哪一个更适合您的需求。 一个重要的区别是 Metricbeat 模块在多次执行语句时收集聚合信息,但无法知道每个语句是什么时候执行的。 此信息可以从日志中获取。

您可能会考虑启用的其他日志记录选项如下

log_checkpoints = 'on';
log_connections = 'on';
log_disconnections = 'on';
log_lock_waits = 'on';

如果您没有持久连接,log_connectionslog_disconnections 都会导致大量事件,因此请谨慎启用。

使用 CSV 日志编辑

由于 PostgreSQL CSV 日志文件是一种定义良好的格式,因此几乎不需要在 Filebeat 中进行任何配置,只需配置文件路径即可。

另一方面,需要将 postgresql 配置为发出 .csv 日志。 建议的参数是

logging_collector = 'on';
log_destination = 'csvlog';

配置模块编辑

您可以通过在 modules.d/postgresql.yml 文件中指定变量设置或在命令行覆盖设置,进一步优化 postgresql 模块的行为。

您必须在模块中至少启用一个文件集。 默认情况下禁用文件集。

以下示例显示了如何在 modules.d/postgresql.yml 文件中设置路径以覆盖 PostgreSQL 日志的默认路径

- module: postgresql
  log:
    enabled: true
    var.paths: ["/path/to/log/postgres/*.log*"]

要在命令行指定相同的设置,请使用

-M "postgresql.log.var.paths=[/path/to/log/postgres/*.log*]"

变量设置编辑

每个文件集都有单独的变量设置,用于配置模块的行为。 如果您没有指定变量设置,则 postgresql 模块将使用默认值。

对于高级用例,您还可以覆盖输入设置。 请参阅覆盖输入设置

当您在命令行指定设置时,请记住在设置前加上模块名称,例如,postgresql.log.var.paths 而不是 log.var.paths

log 文件集设置编辑

var.paths
一个基于 glob 的路径数组,用于指定在何处查找日志文件。 Go Glob 支持的所有模式在此处也受支持。 例如,您可以使用通配符从预定义级别的子目录中获取所有文件:/path/to/log/*/*.log。 这将从 /path/to/log 的子文件夹中获取所有 .log 文件。 它不会从 /path/to/log 文件夹本身获取日志文件。 如果将此设置留空,Filebeat 将根据您的操作系统选择日志路径。

示例仪表板编辑

此模块附带两个示例仪表板。

第一个仪表板用于常规日志。

filebeat postgresql overview

第二个显示 PostgreSQL 的慢日志。 如果未使用 log_min_duration_statement,则此仪表板将显示不完整的数据或不显示数据。

filebeat postgresql slowlog overview

字段编辑

有关模块中每个字段的描述,请参阅导出字段部分。