# 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 的设计特性