- 增加中央与边缘完整配置和部署脚本 - 引入 VictoriaMetrics 数据源与 remote_write 故障排查说明 - 新增 edge-agent 配置脚本、ONVIF 自建 exporter 与 ping 监控示例 Co-authored-by: Cursor <cursoragent@cursor.com>
215 lines
5.5 KiB
Markdown
215 lines
5.5 KiB
Markdown
# 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 的设计特性
|