希望从Zabbix中查看pg_statsinfo的内容!

这篇文章是 PostgreSQL Advent Calendar 2023 的第8天的文章。

pg_statsinfo是什么

在2023年的PostgreSQL会议上,Assist株式会社的保田先生介绍了pg_statsinfo。

定期的に収集・蓄積され、レポートを生成する拡張機能を使用することで、PostgreSQLサーバの利用統計情報を取得できます。これは、DB設計やPostgreSQLの運用に役立ちます。具体的には、日々の処理傾向の把握や性能劣化の兆候、問題発生時の原因の把握などに役立ちます。詳細は公式のドキュメントを参照してください。

此外,通过引入另一个名为pg_stats_reporter的扩展,可以在浏览器中查看收集到的信息。

统计报告生成器

这个扩展功能是用于在浏览器中查看由pg_statsinfo收集的信息。一旦安装,您就可以在下面这样的界面上查看信息。对于PostgreSQL的运维和监控非常方便呢。

スクリーンショット 2023-12-03 114923.png

有什么问题?

pg_stasinfo和pg_stats_reporter是非常方便的工具,用于收集和显示管理PostgreSQL所需的信息。但是,它们并不会显示与PostgreSQL无关的内容。

然而,在我的经验中,实际的运维管理中通常使用统一的监控工具来监视整个系统。很难要求运维团队仅在数据库方面使用不同的工具,如果有人这样要求我,我也会觉得很麻烦并表示不愿意。

我想要在Zabbix中显示pg_statsinfo的内容!

因此,我认为如果能够在常用的监视工具Zabbix中显示pg_statsinfo的内容,那么运维监控工具就可以实现一体化!

Zabbix是什么?

这是由Zabbix社开发的开源集成监控工具。
它可以通过标准协议监控服务器和服务的运行状态,也可以通过安装专用代理程序来收集操作系统和硬件信息,同时可以在服务器上查看这些信息。
这是一个非常方便的监控工具,几乎可以实现任何功能。

验证环境

    • 監視対象のPostgreSQLサーバ

OS : Rocky Linux 8.9
PostgreSQL 15.5
pg_statsinfo 15.2
Zabbix Agent 6.0

本文撰写时,受监视的PostgreSQL并不是最新版本的16,原因是截至本文撰写时,pg_statsinfo仅支持到15版本。

    • 運用監視サーバ

OS : Rocky Linux 8.9
PostgreSQL 15.5
Zabbix Server 6.0
Nginx 1.25.3
PHP 8.0
pg_stats_reporter 15.1

Zabbix在作为数据库时使用MySQL或者PostgreSQL。选择使用PostgreSQL是因为它是一种我个人爱好的同时也可以作为pg_statsinfo信息存储的仓库数据库。

使用Nginx作为Zabbix的HTTP服务器完全是出于兴趣。使用Apache也没有问题,而且安装pg_stats_reporter时,默认也会安装Apache。
没办法,只能将Nginx用作反向代理,以防止直接从外部访问Apache。

因此,我想在以下环境中将pg_statsinfo收集的内容显示在Zabbix中。

検証環境.png

获取pg_statsinfo的命令

除了可以通过pg_stats_reporter查看信息外,pg_statsinfo还可以通过命令以文本形式输出报告。

$ pg_statsinfo -r REPORTID [-i INSTANCEID] [-b SNAPID] [-e SNAPID] [-B DATE] [-E DATE] [-o FILENAME] [connection-options]

与其检查Zabbix Server和pg_statsinfo的存储库数据库以修改Zabbix Server,不如修改这份报告并发送出去,这样应该会有效。

报告ID可以指定许多不同的ID。如果指定为“全部(ALL)”,将输出所有信息作为报告,但由于信息很多,所以这次我们将指定为“概要(Summary)”。由于pg_statsinfo正在监视的数据库和存储信息的仓库数据库位于不同的服务器上,因此在报告输出时需要指定存在仓库数据库的运维监视服务器。

$ pg_statsinfo -r Summary -h <運用監視サーバ>

应该会显示如下结果。

---------------------------------------------
STATSINFO Report (host: hosts, port: 5432)
---------------------------------------------

----------------------------------------
/* Summary */
----------------------------------------
Database System ID   : 7307271813869373234
Host                 : hosts
Port                 : 5432
PostgreSQL Version   : 15.5
Snapshot Begin       : 2023-12-02 23:00:00
Snapshot End         : 2023-12-03 13:00:00
Snapshot Duration    : 14:00:00
Total Database Size  : 9117 KiB
Total Commits        : 4927447
Total Rollbacks      : 0

创建监控脚本

我会随意创建一个目录。

# mkdir -p /var/lib/zabbix/bin

我会用类似这样的脚本来创建。

#!/bin/sh

cd `dirname $0`

REPOSITORY=リポジトリDBのIPアドレス
DBUSER=postgres
DATABASE=postgres

export PATH=/usr/pgsql-15/bin:${PATH}

pg_statsinfo -r Summary -h ${REPOSITORY} -d ${DATABASE} -U ${DBUSER}

为了可以无需密码连接,请提前为zabbix用户准备好.pgpass文件。

# vi /var/lib/zabbix/.pgpass

当您准备好文件夹和文件后,您可以更改所有者和权限。

# chmod 600 /var/lib/zabbix/.pgpass
# chmod 755 /var/lib/zabbix/bin/pg_statsinfo_summary.sh
# chown -R zabbix:zabbix /var/lib/zabbix

让Zabbix代理程序执行监视脚本

编辑Zabbix Agent的配置文件。

# vi /etc/zabbix/zabbix_agentd.conf

新增以下项目。

AllowKey=system.run[*]
UserParameter=pg_statsinfo.summary,HOME=/var/lib/zabbix /var/lib/zabbix/bin/pg_statsinfo_summary.sh

等准备好后,重新启动Zabbix代理程序。

# systemctl restart zabbix-agent

尝试在Zabbix服务器上进行展示

在浏览器中打开Zabbix的管理界面,点击[设置]→[主机]→监视目标主机的项目链接,然后点击右上角的”创建项目”将项目添加到主机中。

スクリーンショット 2023-12-04 221832.png

只要名字不与其他项目重复,可以是任何名字。关键是要确保在用户参数中指定的是正确的。数据类型最好是文本,考虑到pg_statsinfo的结果。

如果可以添加项目,我会试着在仪表板上添加项目。

スクリーンショット 2023-12-04 222436.png

我看见了一些东西。我尝试点击一下。

スクリーンショット 2023-12-04 222809.png

成功显示了pg_statsinfo命令的结果!

总结

这次只是为了确认能否显示出来,所以尝试展示了pg_statsinfo的摘要。
在运营时,通常情况下我们会仅监视Zabbix以便及时发现异常,并在Zabbix上显示相关信息,一旦检测到异常就可以使用pg_stats_reporter查看详细信息。这样一来,我们也可以进行此类运营操作。

广告
将在 10 秒后关闭
bannerAds