如何使用夜莺监控 PostgreSQL 数据库

说明如何用 Categraf 的 PostgreSQL 插件采集数据库指标,并在夜莺中测试插件输出、导入 PostgreSQL 仪表盘、导入告警规则和扩展自定义 SQL 采集。

作者 秦晓辉@快猫星云

其实我个人对 PostgreSQL 不熟,对 PostgreSQL 熟悉的同事都在忙,也不好意思问,我就自己摸索了一下,写了这篇文章,希望对大家有帮助。

本文记录的是一条最短路径:用 Categraf 采集 PostgreSQL 指标,用夜莺导入 PostgreSQL 大盘和告警规则,再按需要补充自定义 SQL 指标。

核心要点

  • Categraf 默认带 PostgreSQL 插件,配置文件位于 conf/input.postgresql/postgresql.toml
  • address 用于配置 PostgreSQL 连接信息,outputaddress 可以给监控对象设置更容易识别的别名。
  • 使用 ./categraf --test --inputs postgresql 可以先验证插件输出,再接入正式采集链路。
  • 夜莺内置 PostgreSQL 仪表盘和告警规则,可以克隆到自己的业务组后按实际情况调整。
  • 如果内置指标不够,可以通过 [[instances.metrics]] 配置自定义 SQL 采集更多指标。

配置 Categraf

Categraf 默认带了 PostgreSQL 数据库监控插件,配置文件在:conf/input.postgresql/postgresql.toml。我的简化版本的配置如下:

[[instances]]
address = "host=localhost user=postgres password=1234 sslmode=disable"
outputaddress = "db001"

上面的配置,除了配置数据库连接地址,还额外配置了 outputaddress,相当于给数据库起了一个别名,更容易记忆,你可以按照自己的习惯来命名 outputaddress,一般都是 IP 地址或者业务名。

详细配置参考这里:https://github.com/flashcatcloud/categraf/blob/main/conf/input.postgresql/postgresql.toml

配置时要注意两点:第一,连接串里可能包含账号密码,不要把敏感信息暴露到截图、日志或指标标签里;第二,outputaddress 会影响后续仪表盘和告警里看到的对象名称,建议使用团队能识别的稳定名称。

测试 Categraf

通过下面的命令可以测试 postgresql 的插件输出。尤其是 server 那个标签,就是 outputaddress 指定的值,可以按照您的喜好调整,千万不要在这个字段暴露敏感认证信息。

./categraf --test --inputs postgresql

我的输出如下:

...
15:32:14 postgresql_up agent_hostname=ubuntu-linux-22-04-desktop server=db001 1
15:32:14 postgresql_session_time agent_hostname=ubuntu-linux-22-04-desktop db=postgres_global server=db001 0
15:32:14 postgresql_blks_read agent_hostname=ubuntu-linux-22-04-desktop db=postgres_global server=db001 22
15:32:14 postgresql_tup_deleted agent_hostname=ubuntu-linux-22-04-desktop db=postgres_global server=db001 0
15:32:14 postgresql_xact_commit agent_hostname=ubuntu-linux-22-04-desktop db=postgres_global server=db001 0
...

测试输出里至少要确认三件事:postgresql_up 是否为 1,server 标签是否符合预期,核心指标是否能正常返回。如果测试阶段就没有数据,先不要急着导入告警规则,应先排查连接、权限和插件配置。

导入大盘

去内置大盘里找到 PostgreSQL 的大盘,克隆自己的业务组就可以使用了:

如何使用夜莺监控 PostgreSQL 数据库-内置仪表盘

最终大盘效果:

如何使用夜莺监控 PostgreSQL 数据库-大盘效果

大家如果觉得大盘有设置不合理的地方,可以自行修改。也欢迎提 PR 给我们。

导入大盘后,建议先检查变量、数据源、server 标签和时间范围是否正确。如果一个面板没有数据,优先确认指标是否存在,再确认标签是否匹配。

导入规则

PostgreSQL 也有内置的告警规则:

如何使用夜莺监控 PostgreSQL 数据库-内置告警规则

可以克隆到自己的业务组下调整使用。大家如果觉得这些规则有设置不合理的地方,可以自行调整,也欢迎提 PR 给我们。

内置规则适合作为起点,不建议直接无修改用于所有生产库。不同业务库的连接数、事务量、慢查询、复制状态和容量增长差异很大,阈值要结合业务基线和维护窗口调整。

自定义采集

仔细查看 conf/input.postgresql/postgresql.toml 配置,可以看到 [[instances.metrics]] 部分,这是自定义 SQL 的地方,如果觉得内置的指标不够用,可以自定义 SQL 语句,采集更多的指标。

各个配置项解释如下:

  • mesurement 指标名。指标名称最终为 postgresql_${mesurement}_${metric_fields}[x] , ${metric_fields}[x]表示metric_fields的元素。
  • request 指定查询监控数据的 sql 语句
  • metrics_fields 返回的列中,指定哪些列作为监控数据的 value 上报
  • label_fields 返回的列中,指定哪些列作为监控数据的 label 上报
  • field_to_append 表示这个列附加到 metric_name 后面,作为 metric_name 的一部分
  • timeout 超时时间

自定义 SQL 采集适合补充业务特定指标或 PostgreSQL 插件未覆盖的状态信息。写自定义 SQL 时要控制查询成本,避免监控查询反过来影响数据库。

使用流程总结

步骤 动作 验收点
1 配置 conf/input.postgresql/postgresql.toml 连接串和 outputaddress 正确
2 执行 ./categraf --test --inputs postgresql 能看到 postgresql_up 和核心指标
3 启动正式采集 夜莺或后端时序库能收到 PostgreSQL 指标
4 克隆 PostgreSQL 大盘 面板变量、数据源和标签匹配
5 克隆告警规则 阈值、通知组和业务组按实际调整
6 按需添加自定义 SQL 查询成本可控,指标名和标签清晰

扩展阅读:

FAQ

Q1:PostgreSQL 监控最短路径是什么? A:配置 Categraf PostgreSQL 插件,先用 --test 验证输出,再在夜莺导入内置大盘和告警规则,最后按业务情况调整阈值。

Q2:outputaddress 有什么用? A:它相当于给数据库起一个监控别名,测试输出里的 server 标签就是这个值。建议用稳定、可识别且不包含敏感信息的名称。

Q3:什么时候需要自定义 SQL 采集? A:当内置指标不能覆盖你的监控需求时,可以通过 [[instances.metrics]] 增加自定义 SQL。但要控制 SQL 成本,避免监控查询影响数据库。

联系我们交流

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云