转自:[https://www.modb.pro/db/377615](https://www.modb.pro/db/377615) pgwatch2是一款灵活的自包含PostgreSQL指标监控/仪表板的数据库监控软件。目前支持监控PG 9.0到13版本。 下面简单介绍Grafana+pgwatch2架构的PG数据库监控的安装方法。 **软件版本信息及下载地址** ``` 操作系统版本:Centos7.6 监控数据库版本:PG13.4 https://www.postgresql.org/ftp/source/ pgwatch2版本:1.8.5 https://github.com/cybertec-postgresql/pgwatch2/releases Grafana版本:8.4.3 https://grafana.com/grafana/download?pg=get&plcmt=selfmanaged-box1-cta1 ``` # 安装数据库 安装场景中需要如下用途数据库: * 存储pgwatch2监控数据的数据库。可以是postgreSQL,InfluxDB等等。这里使用postgreSQL数据库。 * 被监控的postgreSQL数据库。为了测试方便,这里将被监控的PG数据库和存储pgwatch2监控数据的数据库创建在相同数据库集簇下。 * 存储grafana配置信息的数据库。可以是postgreSQL,InfluxDB等等。这里使用默认的sqlite3。 ## 安装单机版PG13.4 安装单机版PG数据库(过程略)。 # 安装配置pgwatch2 ## RPM方式安装pgwatch2 安装pgwatch2方式有很多种,这里采用RPM方式安装: ``` # wget https://github.com/cybertec-postgresql/pgwatch2/releases/download/v1.8.5/pgwatch2_v1.8.5-SNAPSHOT-b39dfdf_linux_64-bit.rpm # rpm -ivh pgwatch2_v1.8.5-SNAPSHOT-b39dfdf_linux_64-bit.rpm ``` ## 配置pgwatch2数据存储数据库 这里我们使用PG数据库存储pgwatch2的监控数据。(也可以使用InfluxDB等) 由于是在虚机环境安装,为了方便测试,将监控数据存储数据库与需要监控的数据库创建在了同一个数据库集簇下。 ## 创建config DB ``` $ psql -c "create user pgwatch2 password 'XXXXXX'" $ psql -c "create database pgwatch2 owner pgwatch2" $ psql -f /etc/pgwatch2/sql/config_store/config_store.sql pgwatch2 $ psql -f /etc/pgwatch2/sql/config_store/metric_definitions.sql pgwatch2 ``` ## 创建metrics storage DB ``` $ psql -c "create database pgwatch2_metrics owner pgwatch2" $ cd /etc/pgwatch2/sql/metric_store $ psql -f roll_out_metric_time.psql pgwatch2_metrics ``` 修改数据库白名单,允许pgwatch2工具访问数据库: ``` $ vi pg_hba.conf host all all 0.0.0.0/0 md5 $ pg_ctl reload -D $PGDATA ``` ## 安装python3 ``` # yum install python3 python3-pip # su - postgres # wget https://bootstrap.pypa.io/pip/3.6/get-pip.py # python3 get-pip.py ``` ## 启动WebUI测试 这里使用pg数据库安装用户启动pgwatch2: ``` $ python3 web.py --datastore=postgres --pg-metric-store-conn-str="dbname=pgwatch2_metrics user=pgwatch2" ``` 看到下面的日志,就代表WebUI启动成功: ![image.png](../../../../../ff_internal_upload/img/2024/20220317-a0eb2bb5-c36c-47e4-9db7-01df7a7a2d24.png) ## 配置pgwatch2开机自启动 ``` # cd /usr/lib/systemd/system/ # cp /etc/pgwatch2/webpy/startup-scripts/pgwatch2-webui.service ./ ``` 按照实际配置,修改pgwatch2-webui.service文件中,红框中内容: ![image.png](../../../../../ff_internal_upload/img/2024/20220317-aab0d005-0364-47d6-99f0-5f947bccab83.png) ``` # systemctl daemon-reload # systemctl enable pgwatch2-webui # systemctl start pgwatch2-webui ``` ## 配置监控数据库 数据库中创建监控用户: ``` ##创建监控数据库使用的用户m_pgwatch2,监控数据库为db1: CREATE ROLE m_pgwatch2 WITH LOGIN PASSWORD 'secret@341'; ALTER ROLE m_pgwatch2 CONNECTION LIMIT 3; GRANT pg_monitor TO m_pgwatch2; GRANT CONNECT ON DATABASE db1 TO m_pgwatch2; GRANT USAGE ON SCHEMA public TO m_pgwatch2; GRANT EXECUTE ON FUNCTION pg_stat_file(text) to m_pgwatch2; ``` 数据库安装pg_stat_statements扩展: ``` 修改数据库参数:(postgres.conf文件) shared_preload_libraries = 'pg_stat_statements' 重启数据库后,为监控数据库创建pg_stat_statements扩展: CREATE EXTENSION pg_stat_statements; ``` 登录WebUI,向pgwatch中添加监控数据库信息: ``` WebUI地址:http://<安装pgwatch2主机IP>:WebUI端口号 ``` 默认端口号8080,可在启动webUI是设置,见webUI的开机自启动脚本 在WebUI中点击DBs,然后在下面的红框里新增监控数据库信息 ![image.png](../../../../../ff_internal_upload/img/2024/20220317-6e76d3fa-3811-430c-afea-95ba6346f311.png) 填写完成后点击New: ![image.png](../../../../../ff_internal_upload/img/2024/20220317-7a0d4a88-943e-478f-b61c-3264e01c5cc0.png) 添加db1数据库后的例子: ![image.png](../../../../../ff_internal_upload/img/2024/20220317-d36da5b8-5783-4026-8b79-47646d03f14f.png) ## 启动 pgwatch2 指标收集agent 测试agent是否能正常启动 ``` $ pgwatch2-daemon --host=localhost --user=pgwatch2 --dbname=pgwatch2 --datastore=postgres --pg-metric-store-conn-str=postgresql://pgwatch2@localhost:5432/pgwatch2_metrics --verbose=info ``` 设置agent进程开机自启动 ``` [root@mogdb1 ~]# cd /usr/lib/systemd/system/ # vi pgwatch2-daemon.service ``` 按实际情况设置红框中的内容: ![image.png](../../../../../ff_internal_upload/img/2024/20220317-4861b6f8-216e-4c5e-81dd-798ea76db140.png) ``` # systemctl daemon-reload # systemctl enable pgwatch2-daemon # systemctl start pgwatch2-daemon ``` # 安装配置grafana ## rpm方式安装grafana 配置yum源: ``` # cat /etc/yum.repos.d/grafana.repo [grafana] name=grafana baseurl=https://packages.grafana.com/enterprise/rpm repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packages.grafana.com/gpg.key sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt # yum clean all # yum makecache ``` 安装grafana 安装过程会在操作系统自动创建用户grafana ``` yum install grafana-enterprise ``` 可以通过修改/etc/grafana/grafana.ini文件来修改grfana端口号等配置,本次安装使用默认值。 设置grafana开机自启动 ``` # systemctl daemon-reload # systemctl enable grafana-server # systemctl start grafana-server # systemctl status grafana-server ``` 安装grafana的插件(可选) 目前,一个预配置的仪表板(最大关系树图)使用这个额外的插件 - 如果计划使用该仪表板,则安装下面插件: ``` # grafana-cli plugins install savantly-heatmap-panel ``` ## grafana添加数据库源 ``` grafana页面访问地址:http://<安装grafana的服务器IP>:grafana端口号 ``` 默认端口号:3000 页面登录的默认用户名和密码:admin/admin 登录后选择下面的data source ![image.png](../../../../../ff_internal_upload/img/2024/20220317-50d8e6ed-dc27-470c-9ee5-3d3170892862.png) 选择Add data source ![image.png](../../../../../ff_internal_upload/img/2024/20220317-0681a713-f9cb-4ee5-8bc8-322b123509ff.png) 点击PostgreSQL ![image.png](../../../../../ff_internal_upload/img/2024/20220317-df1077bb-733b-454c-86b1-5c94e902a175.png) 填写如下信息后点击保存: ![image.png](../../../../../ff_internal_upload/img/2024/20220317-79cf197e-e6f0-4219-9737-7d1dcad65935.png) ## grafana导入json文件 jason文件获取地址:https://github.com/cybertec-postgresql/pgwatch2/tree/master/grafana_dashboards/postgres/v8 ![image.png](../../../../../ff_internal_upload/img/2024/20220317-6532ceb8-7dce-476a-befa-b67104897587.png) 这个链接下有多个文件夹,每个文件夹中,都有一个对应的json文件,可以根据想监控的内容复制文件内容,然后粘贴到grafana中进行导入操作。这里选择db-overview文件夹。 ![image.png](../../../../../ff_internal_upload/img/2024/20220317-b019546d-e33f-4b81-82b2-f3a95702b77d.png) 复制json文件内容: ![image.png](../../../../../ff_internal_upload/img/2024/20220317-a956a460-90be-4bcd-94e9-907ab00b8a9d.png) 导入文件内容到grafana ![image.png](../../../../../ff_internal_upload/img/2024/20220317-ef066ce9-1e3b-481d-bea4-a7edc67cd368.png) 黏贴json文件内容到Import via panel json框中,点击load ![image.png](../../../../../ff_internal_upload/img/2024/20220317-66984717-d08e-448f-9132-1d10fa6e3b4a.png) 继续点击import ![image.png](../../../../../ff_internal_upload/img/2024/20220317-ffb1eb2d-967f-42a4-a071-a3bdfca1866f.png) 这里还可以继续按需导入其他json文件。 # 查看pgwatch2监控结果 在Search dashboards中可以找到刚才导入的仪表盘 ![image.png](../../../../../ff_internal_upload/img/2024/20220317-e232a99a-dabf-45fb-9da1-ea3883f8be5b.png) 点击DB overview仪表盘 ![image.png](../../../../../ff_internal_upload/img/2024/20220317-92ac9260-363e-4fdc-bd92-6a003576e823.png) 就可以看到对应数据库的监控结果了 ![image.png](../../../../../ff_internal_upload/img/2024/20220317-12999881-b13d-4c88-9b43-be3502c2a08c.png)