Files
Distributed-Prometheus/doc/USER_MANAGEMENT.md
Super User 95a09fd9d8 完善中央与边缘部署、远程写入与监控文档
- 增加中央与边缘完整配置和部署脚本
- 引入 VictoriaMetrics 数据源与 remote_write 故障排查说明
- 新增 edge-agent 配置脚本、ONVIF 自建 exporter 与 ping 监控示例

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-25 04:24:40 -05:00

215 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Grafana 多用户管理方案
## 概述
Grafana 支持多用户管理,可以通过以下方式实现不同用户查看不同设备监控:
1. **组织Organizations**:创建多个组织,每个组织有独立的用户和数据源
2. **数据源权限**:通过 Prometheus/VictoriaMetrics 的标签过滤实现数据隔离
3. **仪表板权限**:为不同用户/组织分配不同的仪表板访问权限
## 实现方案
### 方案一:使用组织隔离(推荐)
每个用户组创建一个独立的 Grafana 组织,通过数据源标签过滤实现数据隔离。
**优点**
- 完全隔离,安全性高
- 每个组织有独立的数据源和仪表板
- 易于管理
**配置步骤**
1. **在 Grafana Web 界面创建组织**
- 登录 Grafana (admin/admin123)
- 点击左侧菜单 → Administration → Organizations
- 创建新组织用户组A、用户组B
2. **为每个组织创建用户**
- 在对应组织中创建用户
- 设置用户角色Viewer/Editor/Admin
3. **配置数据源标签过滤**
- 为每个组织创建独立的数据源
- 使用 Prometheus 标签过滤,例如:
```promql
# 用户组A只能看到 region="region_a" 的设备
up{region="region_a"}
```
### 方案二:使用 Prometheus 标签过滤
在 Prometheus 查询中使用标签过滤,通过 Grafana 变量实现动态过滤。
**配置示例**
1. **在 Prometheus 中为设备添加标签**
```yaml
# prometheus.yml
external_labels:
cluster: 'central-monitoring'
# 边缘节点推送数据时添加用户组标签
```
2. **在 Grafana 仪表板中使用变量**
- 创建变量:`$user_group`(从用户属性获取)
- 查询时使用标签过滤:
```promql
up{user_group="$user_group"}
```
### 方案三:使用 Grafana 权限控制
为不同用户分配不同的仪表板访问权限。
**配置步骤**
1. **创建用户**
- Administration → Users → New User
- 设置用户名、邮箱、密码
2. **设置仪表板权限**
- 打开仪表板 → Settings → Permissions
- 为不同用户/团队设置权限View/Edit/Admin
3. **使用文件夹组织仪表板**
- 创建文件夹用户组A设备、用户组B设备
- 为文件夹设置权限
## 推荐配置流程
### 1. 通过 API 批量创建用户和组织
可以使用 Grafana API 或配置脚本批量创建。
### 2. 数据源配置
为每个组织创建独立的数据源,使用标签过滤:
```yaml
# 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 中配置权限:
```json
{
"dashboard": {
"title": "用户组A设备监控",
"tags": ["user-group-a"],
...
},
"meta": {
"permissions": [
{
"role": "Viewer",
"permission": 1
}
]
}
}
```
## 使用脚本自动化配置
可以使用 `setup-users.sh` 脚本批量创建用户和组织。
## 管理员权限说明
### 服务器管理员Server Admin
**默认管理员账户**`admin` / `admin123`
**权限范围**
- ✅ **可以访问所有组织**:管理员可以在不同组织间切换
- ✅ **可以查看所有数据**:通过切换组织或使用无标签过滤的查询
- ✅ **可以管理所有用户和组织**
- ✅ **可以创建和编辑所有数据源和仪表板**
### 如何让管理员查看所有数据
#### 方法一:切换组织查看(推荐)
1. 登录管理员账户
2. 点击右上角用户图标 → **Switch Organization**
3. 选择要查看的组织
4. 每个组织的数据源和仪表板都会显示
#### 方法二:创建全局数据源
为管理员创建一个不受标签限制的数据源:
```yaml
# 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"}
```
#### 方法三:创建管理员专用仪表板
创建管理员仪表板,使用无标签过滤的查询:
```promql
# 查看所有设备(不限制用户组)
up
# 按用户组分组查看
up{user_group=~".+"}
# 查看所有标签的设备
up{job=~".+"}
```
### 组织管理员Org Admin
组织管理员只能:
- ❌ 管理自己组织内的用户
- ❌ 查看自己组织的数据源和仪表板
- ✅ 在组织内创建和编辑仪表板
### 权限层级
```
服务器管理员 (Server Admin)
├── 可以访问所有组织
├── 可以查看所有数据
└── 可以管理所有用户和组织
组织管理员 (Org Admin)
├── 只能管理自己组织
└── 只能查看自己组织的数据
普通用户 (Viewer/Editor)
├── 只能查看/编辑分配的仪表板
└── 受数据源标签过滤限制
```
## 注意事项
1. **数据安全**:确保 Prometheus 查询权限正确配置
2. **性能**:大量用户时考虑使用 Grafana Enterprise 版本
3. **标签管理**:确保边缘节点推送数据时包含正确的用户组标签
4. **管理员权限**:服务器管理员默认可以访问所有数据,这是 Grafana 的设计特性