Skip to main content
[ PIER ]

Grafana with PostgreSQL

带真实数据库的 Grafana —— 用于多用户生产。

Service #monitoring#dashboards#analytics#postgresql

在一个 Pier 栈中将 Grafana 与专用 PostgreSQL 后端配对。PostgreSQL 支持的部署是 Grafana 为生产推荐的 —— 多用户、HA 友好,并避免在多个并发编辑器负载下困扰 Grafana 的 SQLite 写锁问题。

使用 Pier 部署

  1. 1 打开 Pier 控制台,点击 Add service。
  2. 2 从模板列表中选择 Grafana with PostgreSQL。
  3. 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
  4. 4 如需 HTTPS,请绑定域名。Traefik 会自动签发 Let's Encrypt 证书。

什么是 Grafana with PostgreSQL?

本模板发布 Grafana —— 事实上的可观测性仪表板平台 —— 连线到专用 PostgreSQL 后端用于其内部状态(用户、仪表板、组织、警报、注释)。Grafana 文档将 PostgreSQL(或 MySQL)作为任何多用户或生产部署的推荐后端;SQLite 仅对单一 管理员 homelab 使用还行。

两个服务一起在一个 Compose 栈中启动,env vars 已设置,以便 Grafana 在内部 Docker 网络上找到 Postgres。无需手动 GF_DATABASE_* 配置。你登录并像独立模板 一样使用 Grafana —— 数据库后端不可见。

Pier 如何部署它

Pier 使用官方 grafana/grafana 镜像和 postgres:17-alpine 用于后端。 Grafana 在端口 3000 内部,在 Traefik 后。PostgreSQL 保留在内部 Docker 网络 上(不公开)。每个服务都有自己的数据卷 —— /var/lib/grafana 用于 Grafana 插件和配置,/var/lib/postgresql/data 用于 Postgres 数据。

默认管理员用户是 admin,带 Pier 生成的密码(显示在服务页面上)。首次 登录时更改它。

对于 HTTPS,将自定义域名附加到 Pier 中的 Grafana 服务 —— Traefik 处理 TLS 终止并代理到端口 3000。

何时不要使用本模板

如果你是单一用户带 homelab 且不期望并发编辑,独立 grafana 模板更简单。 如果你已经有托管 PostgreSQL(Pier 或 RDS 或任何地方),使用独立 Grafana 模板并通过 env vars 将其指向现有 Postgres。对于无运维开销的 Grafana 即 服务,Grafana Cloud 的免费层值得考虑。本模板是”我想在我自己的 VPS 上的 生产 Grafana 且我不想手动连接两个服务”的正确答案。

核心功能

生产就绪持久化

Grafana 的用户数据库 —— 仪表板、组织、用户、会话、注释 —— 存在 PostgreSQL 而非 SQLite 中。干净地处理并发写入。

预连线 env

Pier 设置 GF_DATABASE_TYPE=postgres、主机/用户/密码 env vars 和连接设置 —— Grafana 直接启动到 Postgres 而无需手动配置。

相同的 Grafana UI

仪表板、面板、警报、插件 —— 与 SQLite Grafana 相同。只有支持存储不同。

所有 Grafana 插件

数据源(Prometheus、InfluxDB、ES、ClickHouse、MySQL、Postgres、Loki、Tempo、Mimir)、面板插件、应用插件 —— 都兼容。

通过 Postgres 备份/恢复

pg_dump 备份整个 Grafana 状态。恢复是新栈上的 pg_restore。比处理 Grafana SQLite + 配置文件容易得多。

多组织 / 团队规模

许多用户对许多仪表板的并发编辑无写锁争用工作。

应用场景

多用户分析团队

少数或几十名分析师并发编辑仪表板。PostgreSQL 避免在团队负载下出现的 SQLite 写锁错误。

HA / 灾难恢复场景

PG 备份 + 备用副本提供 SQLite 无法提供的时间点恢复和热备用选项。

大型仪表板 / 注释量

数千个仪表板和高写注释流(如 CI 警报、部署标记)—— Postgres 远远超过 SQLite 退化的范围。

集中式可观测性中心

一个 Grafana 实例为许多团队的 100 多名用户服务 —— 这正是 Grafana 推荐 Postgres 的部署。

代码示例

Postgres 数据源(相同 Grafana 模板的 Postgres 现在既作为后端又作为数据源) text
Configuration → Data sources → PostgreSQL
  Host: postgres:5432
  Database: grafana
  User: grafana
  Password: (来自 Pier env)
  TLS: 禁用(内部 Docker 网络)
添加外部 Prometheus 数据源 text
Configuration → Data sources → Prometheus
  URL: https://prometheus.example.com
  Auth: Bearer Token 或 Basic
将仪表板导出为 JSON bash
curl -H "Authorization: Bearer $API_KEY" \
  https://grafana.example.com/api/dashboards/uid/abc123 > dashboard.json
通过文件配置仪表板(无 UI 点击) yaml
# /etc/grafana/provisioning/dashboards/default.yaml
apiVersion: 1
providers:
  - name: default
    folder: ""
    type: file
    options:
      path: /var/lib/grafana/dashboards

对比

vs 带 SQLite 的 Grafana(默认独立) SQLite Grafana 更简单,对单一管理员或小 homelab 使用还行。多用户并发编辑或任何 HA 设置需要 Postgres 支持的 Grafana。
vs Grafana Cloud Grafana Cloud 是托管的,包括免费层,自动扩展。Pier 上的自托管对数据平面免费并给你控制。按团队预算和运维食欲选择。
vs Metabase / Superset Metabase 和 Superset 比 ops 仪表板更针对 BI 分析师。Grafana 是 ops/可观测性的默认;其他用于嵌入式分析。

常见问题

SQLite Grafana 有什么错?
单一管理员使用没有什么错。在多用户并发编辑下,Grafana 的 SQLite 后端可能抛出"数据库锁定"错误且仪表板损坏更难恢复。Postgres 避免两者。
我可以从 SQLite Grafana 迁移到 Postgres Grafana 吗?
是 —— Grafana 有迁移脚本,或者你可以将仪表板导出为 JSON、部署本模板并重新导入。后者通常对小实例更简单。
此 PostgreSQL 也作为我可以查询的数据源吗?
是 —— 将其作为 PostgreSQL 数据源添加,指向内部 postgres:5432 服务。如果你想通过 SQL 查询 Grafana 的元数据(仪表板、用户等),有用。
它能扩展多大?
在一个小型 Postgres 实例下并发仪表板编辑者舒适地达到数百。注释/事件量随 Postgres 性能扩展。
插件兼容性?
所有 Grafana 插件都与 Postgres 支持的 Grafana 一起工作 —— 数据库后端对插件不可见。
备份策略?
pg_dump grafana 数据库 —— 那是一切(仪表板、用户、警报、注释)。恢复是新实例上的 pg_restore。
我可以与其他服务共享 Postgres 吗?
在生产中不鼓励。Grafana 的数据库受益于被隔离;只有在磁盘空间是绑定约束时才共享 Postgres。

相关服务

在你的 VPS 上部署

在一个 Pier 栈中将 Grafana 与专用 PostgreSQL 后端配对。PostgreSQL 支持的部署是 Grafana 为生产推荐的 —— 多用户、HA 友好,并避免在多个并发编辑器负载下困扰 Grafana 的 SQLite 写锁问题。

部署此服务 →