故障解决报告¶
故障一:Grafana"使用说明与阶梯电价规则"面板显示默认内容(2026-08-27)¶
故障时间¶
- 发现:2026-08-27(用户查看大盘时发现)
- 修复完成:2026-08-27 15:40 左右
故障现象¶
- 大盘中"使用说明与阶梯电价规则"折叠行下的文本面板,始终显示 Grafana 新建面板的默认内容
(
# Title / For markdown syntax help: commonmark.org/help), 而非配置的阶梯电价规则说明。 - 用户在 Windows 上通过本地 hosts 将
grafana.rainchen.top解析到 k8s 高可用 VIP (haproxy+keepalived,VIP=192.168.0.8,落在 master01=192.168.0.2), 经 traefik → IngressRoute → 集群 Grafana 访问,多轮刷新/无痕窗口均复现。
故障影响¶
- 仅影响该说明类文本面板的显示,不影响用电数据指标、告警与采集链路。
根本原因¶
- 大盘 JSON 中文本面板(id=18)的内容写在顶层
content字段(Grafana 6.x 旧格式), 而 Grafana 8.5.3 的 React TextPanel 前端只读取options.content;options.content缺失时前端回退渲染默认# Title模板。 - 因此无论修改 ConfigMap 中的顶层
content多少次、如何强刷浏览器,页面永远显示默认模板。 - 排查中曾误判为"浏览器缓存/另一套 Grafana 实例/数据源陈旧",最终通过 TRAE 内置浏览器 按用户同款链路实测复现,并经 d-solo 单面板视图对比 API 数据与渲染结果后定位真凶。
解决方案(已执行)¶
- 修改 ConfigMap
electric-power-dashboard(monitoring 命名空间): - panel 18
options.content写入完整阶梯电价规则(三档价格表+计费示例,511 字符) options.mode=markdown,顶层content同步保留(双格式兼容)- sidecar 自动热加载,大盘版本升至 v56
- 同步修复本地
grafana_dashboard.json(补options.content),防止再次导入复现。 - 清理排查过程中 rollout restart 遗留的 Pending Pod,Deployment 已收敛回原始单 Pod 状态。
验证结果¶
- TRAE 内置浏览器经内网 VIP 链路(hosts→192.168.0.8→traefik)实测, d-solo 单面板视图渲染出完整阶梯电价规则,与 API 数据一致。
避免再次出现的建议¶
- 以后修改 Grafana 8.x 文本面板内容,必须同时写
options.content(或经 UI 编辑自动生成正确结构)。 - 本地大盘 JSON 模板已修复双格式,后续导入即正确。
- 变更大盘配置后,用"页面实际渲染结果"(而非仅 API 返回)做最终验收。
回滚方案¶
kubectl apply -f backups/grafana_panel_fix_20260827/cm_backup_20260827.yaml
相关存档¶
backups/grafana_panel_fix_20260827/cm_backup_20260827.yaml(修复前原始版)backups/grafana_panel_fix_20260827/cm_fixed_20260827.yaml(第一次修复版)backups/grafana_panel_fix_20260827/cm_fixed_v56_final.yaml(最终生效版 v56)
附:同日其他操作记录¶
- 面板内容升级:文本面板内容由简单说明升级为"使用说明+三档阶梯价格表+3000度计费示例"。
- 顺带排查结论(非故障):
- 内网 Grafana 访问链路:Windows hosts → VIP 192.168.0.8(haproxy+keepalived) → traefik → 集群 prometheus-grafana;
- 公网链路
grafana.rainchen.top(129.226.138.204 堡垒机 nginx → frps:3000 → frpc) 与内网链路最终指向同一台集群 Grafana; - master01 上无独立 Grafana 实例(此前怀疑的 8.5.3 即集群 Grafana 自身版本)。
故障二:kube-prometheus-stack 跨版本升级后用电大盘丢失(2026-09-03)¶
故障时间¶
- 2026-09-03 21:26 helm 升级(revision 22:chart 87.21.0 / Grafana 8.5.3→13.1.1 / Prometheus v0.92.1),升级后发现大盘丢失。
故障现象¶
- Grafana 中"家庭日用电量监控大盘"消失;
- MySQL-Electric 数据源消失(仅剩 Alertmanager/Prometheus)。
影响范围¶
- 仅大盘可视化与数据源配置丢失;用电数据在 MySQL(server 命名空间 mysql-0,11h 未重启)完好无损,采集链路(每日20:00任务)不受影响。
根本原因¶
- 大盘 ConfigMap
electric-power-dashboard当初是裸 apply 创建,未纳入任何持久管理; kube-prometheus-stack 跨版本升级过程中该 ConfigMap 被清理,sidecar 无源可加载,大盘随之消失。 - 数据源因存在 Grafana 数据库(旧实例数据未迁移/重建),升级后同样丢失。
解决方案(已执行,全部验证通过)¶
- 校验 8-27 存档
backups/grafana_panel_fix_20260827/cm_fixed_v56_final.yaml(18面板、options.content 511字符完整), 清理 runtime 字段后重新kubectl apply→ sidecar 自动写入并通过 Grafana 13 新版 provisioning API reload 导入成功。 - 按大盘面板实际引用的数据源 uid
mysql-electric(非7-29旧备份的 aY8YGFEvz)重建 MySQL 数据源, 密码来自 .env,health 检查Database Connection OK。 - 恢复文件纳入项目管理:
k8s/grafana-dashboard-cm.yaml(以后升级后可一键重恢复)。
注意事项(版本变化)¶
- Grafana service 更名:
prometheus-grafana→kube-prometheus-stack-grafana(端口 3000→80),port-forward/监控集成需同步修改。 - Grafana admin 密码已随升级更新为 secret
kube-prometheus-stack-grafana中的Grafana@2026。 - Grafana 13 使用新版 provisioning 体系(provisioning.grafana.app),
/api/search列表返回可能滞后,以/api/dashboards/uid/<uid>直查为准。
避免再次出现的建议¶
- 大盘 ConfigMap 已存档于
k8s/grafana-dashboard-cm.yaml并纳入 git 管理,今后升级后执行kubectl apply -f k8s/grafana-dashboard-cm.yaml即可一键恢复; - 数据源若也用 ConfigMap(label
grafana_datasource: "1")provisioning,可彻底避免升级丢失(后续可选优化)。
回滚/恢复命令¶
# 大盘恢复(本报告执行过)
kubectl apply -f k8s/grafana-dashboard-cm.yaml
# 数据源重建:见 Grafana API POST /api/datasources(uid=mysql-electric,密码在.env)
来源:
/home/rain/Documents/electricity_monitoring/故障解决报告.md| 最后更新:2026-09-03 22:05(由build/sync.py同步,请勿在站点侧修改)