- 增加中央与边缘完整配置和部署脚本 - 引入 VictoriaMetrics 数据源与 remote_write 故障排查说明 - 新增 edge-agent 配置脚本、ONVIF 自建 exporter 与 ping 监控示例 Co-authored-by: Cursor <cursoragent@cursor.com>
5.5 KiB
5.5 KiB
Grafana 多用户管理方案
概述
Grafana 支持多用户管理,可以通过以下方式实现不同用户查看不同设备监控:
- 组织(Organizations):创建多个组织,每个组织有独立的用户和数据源
- 数据源权限:通过 Prometheus/VictoriaMetrics 的标签过滤实现数据隔离
- 仪表板权限:为不同用户/组织分配不同的仪表板访问权限
实现方案
方案一:使用组织隔离(推荐)
每个用户组创建一个独立的 Grafana 组织,通过数据源标签过滤实现数据隔离。
优点:
- 完全隔离,安全性高
- 每个组织有独立的数据源和仪表板
- 易于管理
配置步骤:
-
在 Grafana Web 界面创建组织:
- 登录 Grafana (admin/admin123)
- 点击左侧菜单 → Administration → Organizations
- 创建新组织(如:用户组A、用户组B)
-
为每个组织创建用户:
- 在对应组织中创建用户
- 设置用户角色(Viewer/Editor/Admin)
-
配置数据源标签过滤:
- 为每个组织创建独立的数据源
- 使用 Prometheus 标签过滤,例如:
# 用户组A只能看到 region="region_a" 的设备 up{region="region_a"}
方案二:使用 Prometheus 标签过滤
在 Prometheus 查询中使用标签过滤,通过 Grafana 变量实现动态过滤。
配置示例:
-
在 Prometheus 中为设备添加标签:
# prometheus.yml external_labels: cluster: 'central-monitoring' # 边缘节点推送数据时添加用户组标签 -
在 Grafana 仪表板中使用变量:
- 创建变量:
$user_group(从用户属性获取) - 查询时使用标签过滤:
up{user_group="$user_group"}
- 创建变量:
方案三:使用 Grafana 权限控制
为不同用户分配不同的仪表板访问权限。
配置步骤:
-
创建用户:
- Administration → Users → New User
- 设置用户名、邮箱、密码
-
设置仪表板权限:
- 打开仪表板 → Settings → Permissions
- 为不同用户/团队设置权限(View/Edit/Admin)
-
使用文件夹组织仪表板:
- 创建文件夹(如:用户组A设备、用户组B设备)
- 为文件夹设置权限
推荐配置流程
1. 通过 API 批量创建用户和组织
可以使用 Grafana API 或配置脚本批量创建。
2. 数据源配置
为每个组织创建独立的数据源,使用标签过滤:
# grafana/provisioning/datasources/prometheus-user-group-a.yml
datasources:
- name: Prometheus-UserGroupA
type: prometheus
access: proxy
url: http://prometheus-central:9090
jsonData:
# 使用标签过滤
exemplarTraceIdDestinations:
- name: traceID
datasourceUid: tempo
3. 仪表板权限
在仪表板 JSON 中配置权限:
{
"dashboard": {
"title": "用户组A设备监控",
"tags": ["user-group-a"],
...
},
"meta": {
"permissions": [
{
"role": "Viewer",
"permission": 1
}
]
}
}
使用脚本自动化配置
可以使用 setup-users.sh 脚本批量创建用户和组织。
管理员权限说明
服务器管理员(Server Admin)
默认管理员账户:admin / admin123
权限范围:
- ✅ 可以访问所有组织:管理员可以在不同组织间切换
- ✅ 可以查看所有数据:通过切换组织或使用无标签过滤的查询
- ✅ 可以管理所有用户和组织
- ✅ 可以创建和编辑所有数据源和仪表板
如何让管理员查看所有数据
方法一:切换组织查看(推荐)
- 登录管理员账户
- 点击右上角用户图标 → Switch Organization
- 选择要查看的组织
- 每个组织的数据源和仪表板都会显示
方法二:创建全局数据源
为管理员创建一个不受标签限制的数据源:
# grafana/provisioning/datasources/prometheus-admin.yml
apiVersion: 1
datasources:
- name: Prometheus-All-Data
type: prometheus
access: proxy
url: http://prometheus-central:9090
isDefault: true
editable: false
# 管理员可以使用无标签过滤的查询查看所有数据
# 例如: up 而不是 up{user_group="xxx"}
方法三:创建管理员专用仪表板
创建管理员仪表板,使用无标签过滤的查询:
# 查看所有设备(不限制用户组)
up
# 按用户组分组查看
up{user_group=~".+"}
# 查看所有标签的设备
up{job=~".+"}
组织管理员(Org Admin)
组织管理员只能:
- ❌ 管理自己组织内的用户
- ❌ 查看自己组织的数据源和仪表板
- ✅ 在组织内创建和编辑仪表板
权限层级
服务器管理员 (Server Admin)
├── 可以访问所有组织
├── 可以查看所有数据
└── 可以管理所有用户和组织
组织管理员 (Org Admin)
├── 只能管理自己组织
└── 只能查看自己组织的数据
普通用户 (Viewer/Editor)
├── 只能查看/编辑分配的仪表板
└── 受数据源标签过滤限制
注意事项
- 数据安全:确保 Prometheus 查询权限正确配置
- 性能:大量用户时考虑使用 Grafana Enterprise 版本
- 标签管理:确保边缘节点推送数据时包含正确的用户组标签
- 管理员权限:服务器管理员默认可以访问所有数据,这是 Grafana 的设计特性