使用Postgres存储Grafana后端数据
使用 PostgreSQL 而不是 SQLite 作为 Grafana 后端使用的远程存储数据库,获取更好的性能与可用性。
您可以使用 postgres 作为Grafana后端使用的数据库。
这是了解Pigsty部署系统使用方式的好机会,完成此教程,您会了解:
- 如何创建新数据库集群
- 如何在已有数据库集群中创建新业务用户
- 如何在已有数据库集群中创建新业务数据库
- 如何访问Pigsty所创建的数据库
- 如何管理Grafana中的监控面板
- 如何管理Grafana中的PostgreSQL数据源
- 如何一步到位完成Grafana数据库升级
太长不看
1. vi pigsty.yml # 取消注释DB/User定义:dbuser_grafana grafana
2. bin/createuser pg-meta dbuser_grafana
3. bin/createdb pg-meta grafana
5. psql postgres://dbuser_grafana:DBUser.Grafana@meta:5436/grafana -c \
6. 'CREATE TABLE t(); DROP TABLE t;' # 检查连接串可用性
8. vi /etc/grafana/grafana.ini # 修改 [database] type url
9. systemctl restart grafana-server
创建数据库集群
我们可以在pg-meta上定义一个新的数据库grafana, 也可以在新的机器节点上创建一个专用于Grafana的数据库集群:pg-grafana
定义集群
如果需要创建新的专用数据库集群pg-grafana,部署在10.10.10.11,10.10.10.12两台机器上,可以使用以下配置文件:
1. pg-grafana:
2. hosts:
3. 10.10.10.11: {pg_seq: 1, pg_role: primary}
4. 10.10.10.12: {pg_seq: 2, pg_role: replica}
5. vars:
6. pg_cluster: pg-grafana
7. pg_databases:
8. - name: grafana
9. owner: dbuser_grafana
10. revokeconn: true
11. comment: grafana primary database
12. pg_users:
13. - name: dbuser_grafana
14. password: DBUser.Grafana
15. pgbouncer: true
16. roles: [dbrole_admin]
17. comment: admin user for grafana database
创建集群
使用以下命令完成数据库集群pg-grafana的创建:pgsql.yml。
1. bin/createpg pg-grafana # 初始化pg-grafana集群
该命令实际上调用了Ansible Playbook pgsql.yml 创建数据库集群。
1. ./pgsql.yml -l pg-grafana # 实际执行的等效Ansible剧本命令
定义在 pg_users 与 pg_databases 中的业务用户与业务数据库会在集群初始化时自动创建,因此使用该配置时,集群创建完毕后,(在没有DNS支持的情况下)您可以使用以下连接串访问数据库(任一即可):
1. postgres://dbuser_grafana:DBUser.Grafana@10.10.10.11:5432/grafana # 主库直连
2. postgres://dbuser_grafana:DBUser.Grafana@10.10.10.11:5436/grafana # 直连default服务
3. postgres://dbuser_grafana:DBUser.Grafana@10.10.10.11:5433/grafana # 连接串读写服务
5. postgres://dbuser_grafana:DBUser.Grafana@10.10.10.12:5432/grafana # 主库直连
6. postgres://dbuser_grafana:DBUser.Grafana@10.10.10.12:5436/grafana # 直连default服务
7. postgres://dbuser_grafana:DBUser.Grafana@10.10.10.12:5433/grafana # 连接串读写服务
因为默认情况下Pigsty安装在单个元节点上,接下来的步骤我们会在已有的pg-meta数据库集群上创建Grafana所需的用户与数据库,而并非使用这里创建的pg-grafana集群。
创建Grafana业务用户
通常业务对象管理的惯例是:先创建用户,再创建数据库。 因为如果为数据库配置了owner,数据库对相应的用户存在依赖。
定义用户
要在pg-meta集群上创建用户dbuser_grafana,首先将以下用户定义添加至pg-meta的集群定义中:
添加位置:all.children.pg-meta.vars.pg_users
1. - name: dbuser_grafana
2. password: DBUser.Grafana
3. comment: admin user for grafana database
4. pgbouncer: true
5. roles: [ dbrole_admin ]
如果您在这里定义了不同的密码,请在后续步骤中将相应参数替换为新密码
创建用户
使用以下命令完成dbuser_grafana用户的创建(任一均可)。
1. bin/createuser pg-meta dbuser_grafana # 在pg-meta集群上创建`dbuser_grafana`用户
实际上调用了Ansible Playbook pgsql-createuser.yml 创建用户
1. ./pgsql-createuser.yml -l pg-meta -e pg_user=dbuser_grafana # Ansible
dbrole_admin 角色具有在数据库中执行DDL变更的权限,这正是Grafana所需要的。
创建Grafana业务数据库
定义数据库
创建业务数据库的方式与业务用户一致,首先在pg-meta的集群定义中添加新数据库grafana的定义。
添加位置:all.children.pg-meta.vars.pg_databases
1. - { name: grafana, owner: dbuser_grafana, revokeconn: true }
创建数据库
使用以下命令完成grafana数据库的创建(任一均可)。
1. bin/createdb pg-meta grafana # 在`pg-meta`集群上创建`grafana`数据库
实际上调用了Ansible Playbook pgsql-createdb.yml 创建数据库
1. ./pgsql-createdb.yml -l pg-meta -e pg_database=grafana # 实际执行的Ansible剧本
使用Grafana业务数据库
检查连接串可达性
1. postgres://dbuser_grafana:DBUser.Grafana@meta:5432/grafana # 直连
2. postgres://dbuser_grafana:DBUser.Grafana@meta:5436/grafana # default服务
3. postgres://dbuser_grafana:DBUser.Grafana@meta:5433/grafana # primary服务
这里,我们将使用通过负载均衡器直接访问主库的default服务访问数据库。
首先检查连接串是否可达,以及是否有权限执行DDL命令。
1. psql postgres://dbuser_grafana:DBUser.Grafana@meta:5436/grafana -c \
2. 'CREATE TABLE t(); DROP TABLE t;'
直接修改Grafana配置
为了让Grafana使用 Postgres 数据源,您需要编辑 /etc/grafana/grafana.ini,并修改配置项:
1. [database]
2. ;type = sqlite3
3. ;host = 127.0.0.1:3306
4. ;name = grafana
5. ;user = root
6. # If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
7. ;password =
8. ;url =
将默认的配置项修改为:
1. [database]
2. type = postgres
3. url = postgres://dbuser_grafana:DBUser.Grafana@meta/grafana
随后重启Grafana即可:
1. systemctl restart grafana-server
从监控系统中看到新增的 grafana 数据库已经开始有活动,则说明Grafana已经开始使用Postgres作为首要后端数据库了。但一个新的问题是,Grafana中原有的Dashboards与Datasources都消失了!这里需要重新导入监控面板与Postgres数据源
管理Grafana监控面板
您可以使用管理用户前往 Pigsty 目录下的files/ui目录,执行grafana.py init重新加载Pigsty监控面板。
1. cd ~/pigsty/files/ui
2. ./grafana.py init # 使用当前目录下的Dashboards初始化Grafana监控面板
执行结果:
1. vagrant@meta:~/pigsty/files/ui
2. $ ./grafana.py init
3. Grafana API: admin:pigsty @ http://10.10.10.10:3000
4. init dashboard : home.json
5. init folder pgcat
6. init dashboard: pgcat / pgcat-table.json
7. init dashboard: pgcat / pgcat-bloat.json
8. init dashboard: pgcat / pgcat-query.json
9. init folder pgsql
10. init dashboard: pgsql / pgsql-replication.json
11. init dashboard: pgsql / pgsql-table.json
12. init dashboard: pgsql / pgsql-activity.json
13. init dashboard: pgsql / pgsql-cluster.json
14. init dashboard: pgsql / pgsql-node.json
15. init dashboard: pgsql / pgsql-database.json
16. init dashboard: pgsql / pgsql-xacts.json
17. init dashboard: pgsql / pgsql-overview.json
18. init dashboard: pgsql / pgsql-session.json
19. init dashboard: pgsql / pgsql-tables.json
20. init dashboard: pgsql / pgsql-instance.json
21. init dashboard: pgsql / pgsql-queries.json
22. init dashboard: pgsql / pgsql-alert.json
23. init dashboard: pgsql / pgsql-service.json
24. init dashboard: pgsql / pgsql-persist.json
25. init dashboard: pgsql / pgsql-proxy.json
26. init dashboard: pgsql / pgsql-query.json
27. init folder pglog
28. init dashboard: pglog / pglog-instance.json
29. init dashboard: pglog / pglog-analysis.json
30. init dashboard: pglog / pglog-session.json
该脚本会侦测当前的环境(安装时定义于~/pigsty),获取Grafana的访问信息,并将监控面板中的URL连接占位符域名(*.pigsty)替换为真实使用的域名。
1. export GRAFANA_ENDPOINT=http://10.10.10.10:3000
2. export GRAFANA_USERNAME=admin
3. export GRAFANA_PASSWORD=pigsty
5. export NGINX_UPSTREAM_YUMREPO=yum.pigsty
6. export NGINX_UPSTREAM_CONSUL=c.pigsty
7. export NGINX_UPSTREAM_PROMETHEUS=p.pigsty
8. export NGINX_UPSTREAM_ALERTMANAGER=a.pigsty
9. export NGINX_UPSTREAM_GRAFANA=g.pigsty
10. export NGINX_UPSTREAM_HAPROXY=h.pigsty
题外话,使用grafana.py clean会清空目标监控面板,使用grafana.py load会加载当前目录下所有监控面板,当Pigsty的监控面板发生变更,可以使用这两个命令升级所有的监控面板。
管理Postgres数据源
当使用 pgsql.yml 创建新PostgreSQL集群,或使用pgsql-createdb.yml创建新业务数据库时,Pigsty会在Grafana中注册新的PostgreSQL数据源,您可以使用默认的监控用户通过Grafana直接访问目标数据库实例。应用pgcat的绝大部分功能有赖于此。
要注册Postgres数据库,可以使用pgsql.yml中的register_grafana任务:
1. ./pgsql.yml -t register_grafana # 重新注册当前环境中所有Postgres数据源
2. ./pgsql.yml -t register_grafana -l pg-test # 重新注册 pg-test 集群中所有的数据库
一步到位更新Grafana
您可以直接通过修改Pigsty配置文件,更改Grafana使用的后端数据源,一步到位的完成切换Grafana后端数据库的工作。编辑pigsty.yml中grafana_database与grafana_pgurl参数,将其修改为:
1. grafana_database: postgres
2. grafana_pgurl: postgres://dbuser_grafana:DBUser.Grafana@meta:5436/grafana
然后重新执行 infral.yml中的grafana任务,即可完成Grafana升级
1. ./infra.yml -t grafana
最后修改 2022-06-03: add scaffold for en docs (6a6eded)
