PostgreSQL 语句 metricset

编辑

这是 PostgreSQL 模块的 statement metricset。

此模块从 pg_stat_statements 视图收集信息,该视图跟踪服务器执行的所有 SQL 语句的计划和执行统计信息。

pg_stat_statements 由 PostgreSQL 中的附加模块包含。此模块需要额外的共享内存,并且默认情况下处于禁用状态。

您可以通过将此模块作为共享预加载库添加到配置中来启用它。

shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all

在服务器中预加载此库将增加 PostgreSQL 服务器的内存使用量。请谨慎使用。

服务器启动此模块后,它将开始收集有关所有执行语句的统计信息。要使这些统计信息在 pg_stat_statements 视图中可用,需要在服务器中执行以下语句

CREATE EXTENSION pg_stat_statements;

您可以在 官方文档 中阅读有关此模块可用选项的更多信息。

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

字段

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

这是一个此 metricset 生成的示例文档

{
    "@timestamp": "2017-10-12T08:05:34.853Z",
    "event": {
        "dataset": "postgresql.statement",
        "duration": 115000,
        "module": "postgresql"
    },
    "metricset": {
        "name": "statement",
        "period": 10000
    },
    "postgresql": {
        "statement": {
            "database": {
                "oid": 13395
            },
            "query": {
                "calls": 132,
                "id": -3489238739385425370,
                "memory": {
                    "local": {
                        "dirtied": 0,
                        "hit": 0,
                        "read": 0,
                        "written": 0
                    },
                    "shared": {
                        "dirtied": 0,
                        "hit": 924,
                        "read": 0,
                        "written": 0
                    },
                    "temp": {
                        "read": 0,
                        "written": 0
                    }
                },
                "rows": 396,
                "text": "SELECT d.datname as \"Name\",\n       pg_catalog.pg_get_userbyid(d.datdba) as \"Owner\",\n       pg_catalog.pg_encoding_to_char(d.encoding) as \"Encoding\",\n       d.datcollate as \"Collate\",\n       d.datctype as \"Ctype\",\n       pg_catalog.array_to_string(d.datacl, $1) AS \"Access privileges\"\nFROM pg_catalog.pg_database d\nORDER BY 1",
                "time": {
                    "max": {
                        "ms": 0.325369
                    },
                    "mean": {
                        "ms": 0.07867374242424244
                    },
                    "min": {
                        "ms": 0.053835
                    },
                    "stddev": {
                        "ms": 0.037920252272212004
                    },
                    "total": {
                        "ms": 10.384934000000003
                    }
                }
            },
            "user": {
                "id": 10
            }
        }
    },
    "service": {
        "address": "192.168.128.2:5432",
        "type": "postgresql"
    }
}