Grafana 部署与运维:配置 Provisioning 与用户权限管理
在生产环境中,手动通过 Web UI 配置 Grafana(如添加数据源、创建仪表盘)是不可持续的。为了实现可重复、可审计、可自动化的运维,必须采用 Infrastructure as Code (IaC) 的方式管理 Grafana 配置。
本文将深入详解两大核心运维主题:
- ✅ 配置 Provisioning(配置预置):使用 YAML 文件自动化管理数据源、仪表盘、告警规则
- ✅ 用户与权限管理:配置 OAuth 登录与精细化权限控制
一、配置 Provisioning:实现 Infrastructure as Code
Provisioning 是 Grafana 的配置即代码(Configuration as Code) 机制,允许你通过 YAML 文件 在启动时自动加载数据源、仪表盘和告警规则,无需手动操作 Web UI。
1.1 优势(为什么使用 Provisioning)
| 优势 | 说明 |
|---|---|
| ✅ 版本控制 | 所有配置纳入 Git,可追溯变更 |
| ✅ 环境一致性 | Dev/Stage/Prod 配置一致 |
| ✅ 自动化部署 | 与 Ansible、Terraform、K8s 集成 |
| ✅ 快速恢复 | 故障后一键重建 |
| ✅ 团队协作 | 多人协作,避免配置漂移 |
📌 Provisioning 是生产环境的必备实践。
1.2 Provisioning 配置目录结构
/etc/grafana/provisioning/
├── datasources/
│ └── prometheus.yaml
├── dashboards/
│ ├── dashboard-providers.yaml
│ └── dashboards/
│ └── node-exporter.json
├── alerting/
│ └── alerts.yaml
└── notifiers/
└── slack.yaml
✅ Grafana 启动时自动加载
/etc/grafana/provisioning下的配置。
1.3 1. 配置数据源(Datasources)
示例:provisioning/datasources/prometheus.yaml
apiVersion: 1
# 数据源列表
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
basicAuth: false
isDefault: true
version: 1
editable: false # 禁止在 UI 中编辑
- name: Loki
type: loki
access: proxy
url: http://loki:3100
version: 1
editable: false
✅
editable: false防止 UI 修改,确保配置一致性。
1.4 2. 配置仪表盘(Dashboards)
(1)定义 Dashboard Provider
provisioning/dashboards/dashboard-providers.yaml
apiVersion: 1
providers:
- name: 'default'
orgId: 1
folder: ''
type: file
disableDeletion: false
editable: true
options:
path: /var/lib/grafana/dashboards # 仪表盘 JSON 文件存放路径
(2)放置仪表盘 JSON 文件
# 创建目录
mkdir -p /var/lib/grafana/dashboards
# 复制仪表盘 JSON
cp node-exporter-full.json /var/lib/grafana/dashboards/
✅ 仪表盘 JSON 可从 Grafana UI 导出。
1.5 3. 配置告警规则(Alerting Rules)
provisioning/alerting/alerts.yaml
apiVersion: 1
alertRules:
- orgId: 1
folder: "Infrastructure"
ruleGroups:
- name: host-metrics.rules
interval: 60s
rules:
- alert: HighCpuUsage
expr: 1 - rate(node_cpu_seconds_total{mode="idle"}[5m]) > 0.8
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
description: "CPU usage is above 80% for more than 5 minutes."
✅ 告警规则将自动创建,无需手动配置。
1.6 4. 配置通知渠道(Notifiers)
provisioning/notifiers/slack.yaml
notifiers:
- name: slack-ops
type: slack
uid: slack-1
isDefault: true
settings:
recipient: '#alerts'
token: xoxb-XXXXXXXXXXXXXXXXXXXXXX
secureSettings:
token: >-
${SLACK_TOKEN} # 支持环境变量
✅ 敏感信息可通过环境变量注入。
1.7 与自动化工具集成
示例:Ansible Playbook
- name: Deploy Grafana provisioning
hosts: grafana-servers
vars:
grafana_provisioning_dir: /etc/grafana/provisioning
tasks:
- name: Copy datasources
copy:
src: files/datasources/
dest: "{{ grafana_provisioning_dir }}/datasources/"
- name: Copy dashboards
copy:
src: files/dashboards/
dest: /var/lib/grafana/dashboards/
- name: Restart Grafana
systemd:
name: grafana-server
state: restarted
示例:Kubernetes ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: grafana-provisioning
data:
prometheus.yaml: |
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
url: http://prometheus:9090
dashboard-provider.yaml: |
apiVersion: 1
providers:
- name: 'default'
orgId: 1
type: file
options:
path: /var/lib/grafana/dashboards
✅ 实现 GitOps 流程:Git → CI → Kubernetes。
二、用户与权限管理
2.1 用户管理方式
| 方式 | 说明 |
|---|---|
| Local Users | 内置用户(默认) |
| LDAP | 企业 AD 集成 |
| OAuth2 | GitHub, Google, GitLab, Azure AD |
| SAML | 企业单点登录 |
2.2 配置 OAuth2 登录(以 GitHub 为例)
(1)在 GitHub 创建 OAuth App
- 进入 GitHub → Settings → Developer settings → OAuth Apps
- New OAuth App
- Application name:
Grafana Login - Homepage URL:
http://grafana:3000 - Authorization callback URL:
http://grafana:3000/login/github
- Application name:
- 记录
Client ID和Client Secret
(2)配置 Grafana
/etc/grafana/grafana.ini
[auth.github]
enabled = true
allow_sign_up = true
client_id = YOUR_CLIENT_ID
client_secret = YOUR_CLIENT_SECRET
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
✅ 重启 Grafana 后,登录页面将出现 “Sign in with GitHub” 按钮。
2.3 精细化权限控制
Grafana 支持基于组织(Organization)、文件夹(Folder)、仪表盘的权限管理。
2.3.1 组织(Organization)
- 支持多租户
- 每个用户属于一个 Org
- 不同 Org 间资源隔离
2.3.2 文件夹权限
- 创建文件夹:
Infrastructure,Applications,Business - 为文件夹设置权限:
- Team A:Editor 权限 →
Applications - Team B:Viewer 权限 →
Infrastructure
- Team A:Editor 权限 →
2.3.3 仪表盘权限
- 可为单个仪表盘设置:
- Viewer
- Editor
- Admin
2.3.4 团队(Team)管理
- 创建团队:
ops-team,dev-team - 批量分配权限
- 支持 LDAP/SSO 同步团队
2.4 权限模型总结
| 资源 | 支持的权限 |
|---|---|
| Organization | Admin |
| Folder | Viewer, Editor, Admin |
| Dashboard | Viewer, Editor, Admin |
| Data Source | Admin(全局) |
| Alert Rule | 依赖文件夹权限 |
✅ 推荐:通过文件夹组织资源,按团队分配权限。
三、最佳实践总结
✅ Provisioning 最佳实践
| 实践 | 说明 |
|---|---|
| ✅ 所有配置纳入 Git | 使用 Git 管理 provisioning/ 目录 |
✅ 使用 editable: false | 防止 UI 修改 |
| ✅ 敏感信息用环境变量 | 如 secureSettings |
| ✅ 定期备份仪表盘 JSON | 防止丢失 |
| ✅ 使用 CI/CD 自动部署 | 实现 GitOps |
✅ 用户权限最佳实践
| 实践 | 说明 |
|---|---|
| ✅ 启用 OAuth 登录 | 减少密码管理 |
| ✅ 按团队组织文件夹 | 如 team-a/, team-b/ |
| ✅ 最小权限原则 | 只给 Viewer 权限,除非必要 |
| ✅ 定期审查权限 | 移除离职人员访问 |
| ✅ 使用 LDAP/SAML | 企业级身份管理 |
四、总结
通过 Provisioning + 权限管理,你可以构建一个可维护、可扩展、安全的 Grafana 运维体系:
| 主题 | 核心价值 |
|---|---|
| Provisioning | 实现配置即代码,支持自动化与版本控制 |
| OAuth 登录 | 提升用户体验,集成企业身份系统 |
| 精细化权限 | 按团队、文件夹控制访问,保障安全 |
“好的运维,不是救火,而是防火。”
6619

被折叠的 条评论
为什么被折叠?



