用 Prometheus 和 Grafana 可视化 PostgreSQL 的复制延迟

首先

我平时在运营PostgreSQL的过程中,不仅关注操作系统和服务器层面,还想更加专注于收集和监控PostgreSQL特定的指标。于是我进行了一些调查,发现了通过prometheus扩展可以使用postgres_exporter进行监控,我在本地进行了搭建,参考了前辈们的经验。
这次我尝试解决了复制延迟情况的可视化问题,如果能帮到有同样困扰的人就好了。

本地环境构建

我使用docker-compose创建了一个本地环境来运行容器。
因为内容较多,我已经将其上传到GitHub上。(如果有什么问题,请指出m(_ _)m)
我在PostgreSQL 14上创建了一个由两个副本组成的流复制配置。
下面是容器(主机)的名称。

postgres14-primary
└ postgres14-replica1
└ postgres14-replica2

以下,我将列举一些在设置中遇到困难的部分。

postgres_exporter的参数

如果要在一个postgres_exporter实例中监控多个PostgreSQL数据库,可以通过在环境变量”DATA_SOURCE_NAME”中用逗号分隔连接标识符的方式实现。(较长)
另外,似乎必须使用从master分支的最新代码构建的docker容器镜像。
由于目前处于2022年12月,这似乎还是一个测试版,希望未来设置能更加简便一些。

    environment:
      DATA_SOURCE_NAME: "postgresql://postgres_exporter:postgres_exporter@postgres14-primary:5432/postgres?sslmode=disable,postgresql://postgres_exporter:postgres_exporter@postgres14-replica1:5432/postgres?sslmode=disable"
      PG_EXPORTER_AUTO_DISCOVER_DATABASES: "true"

请写出prometheus.yml文件的格式

我在 Prometheus 的文档中找到了关于如何配置 exporter 支持多个目标的方法,但阅读起来感到困难。

  - job_name: 'postgres-exporter'
    metrics_path: /metrics
    params:
      module: [postgres]
    static_configs:
      - targets:
        - postgres14-primary:5432
        - postgres14-replica1:5432
        - postgres14-replica2:5432
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: postgres-exporter:9187

监控设定

我們將進行 Grafana 的設置。
為了日後使用,請記下 Prometheus 的版本。

$ docker-compose exec prometheus sh
/prometheus $ /bin/prometheus --version
prometheus, version 2.40.6 (branch: HEAD, revision: e1506e7be89e4ce346851bf6bd2b024b70fb7cb1)
  build user:       root@f4224a878a14
  build date:       20221209-12:56:02
  go version:       go1.19.4
  platform:         linux/arm64

数据源的注册

image.png

可视化 (kě shì huà)

image.png
image.png

试着延迟一下。

因为仅仅这样结束太过于草率,所以我们将在实际的pgbench中施加负载,以观察延迟情况。首先进行初始化。

$ pgbench -h localhost -p 15432 -d test  -U root -i  -s 15 

进行大量事务处理到 primary 节点。

$ pgbench -h localhost -p 15432 -d test  -U root -c 2 -t 20000 

在此期间,向其中一方复制品施加使用选择模式下的大量负载。

$ pgbench -h localhost -p 35432 -d test  -U root -c 2 -t 20000 -S 
image.png

结束

暫時來說,我已經成功做到了想要完成的事情,這是好事。由於可能還有其他可以獲取的指標,因此PostgreSQL監視的範圍可能會擴大。

就運營而言,我期望postgres_exporter能夠更好地支持多個目標,同時為了負載平衡,可能需要考慮將postgres_exporter容器根據服務和應用程序進行劃分等想法。

广告
将在 10 秒后关闭
bannerAds