完善中央与边缘部署、远程写入与监控文档

- 增加中央与边缘完整配置和部署脚本
- 引入 VictoriaMetrics 数据源与 remote_write 故障排查说明
- 新增 edge-agent 配置脚本、ONVIF 自建 exporter 与 ping 监控示例

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Super User
2026-02-25 04:24:40 -05:00
parent 9e37f79a36
commit 95a09fd9d8
52 changed files with 5978 additions and 0 deletions

214
doc/USER_MANAGEMENT.md Normal file
View File

@@ -0,0 +1,214 @@
# 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 的设计特性