← 首页 · 边缘工程 边缘工程

变电站 / 电力边缘 AI 可观测性(日志 / 指标 / 追踪)手册

调研日期:约 2026-10-25(Asia/Shanghai)
定位:边缘盒上如何采指标、打结构化日志、发出运维告警事件;与 MQTT telemetry、D60/D90、授时、证据仓、多路 RTSP、VLAN 对齐;不进保护网。
衔接:edge-ai-mqtt-hardening-offline-buffer.md、edge-ai-time-sync-ntp-ptp.md、edge-ai-evidence-store-snapshot-retention.md、edge-ai-multistream-rtsp-scheduling.md、edge-ai-d60-d90-acceptance-checklist.md、edge-ai-vlan-network-isolation.md、edge-ai-substation-gateway-bom.md、edge-ai-event-schema-acceptance.md。
公开工具可引用:Prometheus、OpenTelemetry、Grafana、VictoriaMetrics、Loki、Promtail/Alloy;站端具体型号与既有 SIEM unknown。本文不编造未公开站规。


0. 一句话结论与红线

结论:边缘 AI 可观测性以 Metrics + 结构化 JSON 日志 为主、Traces 可选;指标经本机 scrape / MQTT telemetry 上报,运维事件走 events/ops;全部落在 AI / MQ / MGMT VLAN,禁止进入保护二层或过程层。

红线 ID 禁止项 说明
O1 日志禁含密钥 / 完整人脸原图 禁止写密码、证书 PEM、预签名长 URL、完整未脱敏人脸;证据路径只记 event_id / 相对 media_refs
O2 指标不上保护通道 Prometheus/OTel/MQTT telemetry 不得映射到保护 GOOSE、跳闸、软压板;104 只读镜像仅允许业务告警位,不含运维高基数序列
O3 高基数标签控制 禁止以 event_id、frame_id、完整 URL、bbox 坐标作 Prometheus label;cam/task/device_id 枚举有界
O4 可观测路径不断推理 scrape、写日志、发 telemetry 异步有界;满则丢 telemetry / debug 日志,不得阻塞解码/NPU(对齐 MQTT R2、D60-03)
O5 日志与证据分盘 /var/log/edgeai 与 /var/edgeai/evidence 分挂载或分配额;日志轮转不得吃光证据 SSD

1. 三大支柱(边缘简化)

支柱 边缘站建议 典型用途 默认
Metrics Prometheus 文本 /metrics + MQTT telemetry 周期快照 FPS、延迟、队列、温度、盘水位、clock_quality 必做
Logs 结构化 JSON → 本地文件(可选 Loki) 启停、模型加载、流断、授时告警、审计 必做
Traces OpenTelemetry 抽样 span(解码→推理→发布) 偶发延迟尖刺排查 可选(A 档可省略;B/C 档抽样 ≤1%)

原则:先能看水位与否决项,再谈分布式追踪。站内带宽与 SSD 有限时,优先 Metrics + INFO 以上结构化日志。

档位(对齐 BOM) Metrics JSON 日志 Traces 站内 TSDB
A 入门 1–2 路 /metrics + telemetry 本地 jsonl 关 可省略,靠 MQTT+文件
B 标准 4–8 路 同上 + node 基础 jsonl + 可选 Loki 抽样可选 单节点 VM/Prom
C 汇聚 16–32 路 分路 label 仍须有界 jsonl;DEBUG 默认关 排障时开 单节点 + 更短保留或远程写地市

2. 核心指标清单

命名建议:edgeai_* 前缀;单位用秒/字节/比值的 Prometheus 惯例;cam/task 仅作低基数 label。

指标名(建议) 类型 单位 / 说明 采集点 告警启发阈值
edgeai_decode_fps Gauge 解码有效 FPS / 路 解码线程滑动窗 5~10 s 低于档位基线 30% 持续 ≥2 min
edgeai_infer_latency_seconds Histogram 推理耗时(可分 decode/infer/post) 推理出口 P95 超 SLA(站内自定,unknown 合同值)
edgeai_queue_depth Gauge decode_q / infer_q / event_q / mqtt_q 各有界队列 mqtt_q 或 infer_q >80% 容量
edgeai_drop_frames_total Counter 过载丢帧累计 调度器 5 min 斜率异常升高
edgeai_npu_util Gauge 0~1 厂商工具 / sysfs(型号相关,unknown) 长期贴顶 + 延迟恶化
edgeai_cpu_util / edgeai_mem_used_bytes Gauge 系统资源 /proc 或 node_exporter 内存 >85% 或 OOM 前兆
edgeai_soc_temp_celsius Gauge SoC / NPU 温度 hwmon / 厂商 API 超厂商结温降频点(以 BOM 板卡为准)
edgeai_mqtt_publish_fail_total Counter 发布失败 MQTT 客户端 连续失败或积压
edgeai_evidence_disk_used_ratio Gauge 0~1 证据盘水位 statvfs 对证据挂载点 ≥0.80 / 0.90 水位
edgeai_clock_offset_seconds Gauge 相对参考源偏移 chrony/ptp 与授时手册阈值对齐
edgeai_clock_quality Gauge 枚举映射:0=unsync,1=sync,2=step_recent… 授时守护 unsync / step_recent → ops 事件
edgeai_stream_up Gauge 1/0 每路 RTSP watchdog 任一路 DOWN >60 s
edgeai_model_info Gauge(=1) label: name,ver,hash_short 模型加载成功时 加载失败发 ops,不用高基数 hash 全长

禁止:label{event_id=…}、label{uri=…}、每帧新建时间序列。Histogram bucket 站内钉死一版,避免看板爆炸。


3. 导出路径

3.1 本机 Prometheus 文本(推荐默认)

  • Agent 暴露 http://127.0.0.1:9108/metrics(端口示例;生产仅 MGMT / 本机 可达,防火墙默认 deny)。
  • 可选旁路 node_exporter(系统盘、网卡、温度);AI 业务指标由 Agent 自暴露,避免与业务进程争锁。
  • scrape 间隔建议 15~30 s(边缘);站内 VictoriaMetrics / Prometheus 单节点即可,保留 7~15 天(更长进地市,unknown 业主策略)。

3.2 OpenTelemetry(可选)

信号 建议 注意
Metrics OTLP → 本机 collector → Prometheus remote write / VM 与 /metrics 二选一主路径,避免双计
Logs 仍以本地 JSON 文件为主;OTel log 桥接可选 勿把证据 JPEG 当 log body
Traces 抽样;trace_id 可写入同条结构化日志 默认关;排障时临时开

3.3 MQTT telemetry 周期字段表

Topic:edgeai/{org}/{site}/{device_id}/telemetry,QoS0,周期 2~5 s(对齐多路手册);水位紧时最先丢。

字段 类型 说明
ts / ts_utc string RFC3339 UTC
device_id string 盒 ID
schema_ver string telemetry 子 schema
fps_in / fps_infer object 或 per-cam 入流 / 推理 FPS
latency_ms object e2e / infer / decode(滑动窗)
queue object decode/infer/event/mqtt 深度
drops object frame/telemetry 累计或增量
npu_util / cpu_util / mem_used_mb number 资源
temp_c / power_w number 热与功耗(有则报)
disk_evidence_pct number 证据盘使用率 %
clock_quality object source/state/offset_ms(授时手册)
streams array {cam, state, fps_in} 摘要
model object {name, ver} 当前加载
mqtt_q uint 发布队列深度

勿在 telemetry 中塞 bbox、人脸图、完整证据路径清单。

3.4 站内 Grafana / VictoriaMetrics 部署注意

项 建议
网络 看板与 TSDB 仅 MGMT / MQ 管理侧;禁止挂 PROT;公网默认关
账号 本地管理员 + 只读运维;禁匿名
磁盘 TSDB 与证据仓、日志 三分开 或硬配额
大盘 一页:路状态、FPS、队列、温度、证据水位、clock_quality、近 1 h ops 事件计数
Loki(可选) 只收 JSON 日志;保留短于证据仓热盘;禁索引高基数字段为 label

3.5 scrape 与告警路由(站内最小)

[边缘盒 Agent :9108/metrics]
        |  scrape 仅 MGMT 源 IP
        v
[VictoriaMetrics 或 Prometheus 单节点] ----> [Grafana 大盘]
        |
        +--> Alertmanager(可选)--> 站内短信/工单 webhook(unknown:业主通道)
        |
        + 并行:MQTT telemetry --> 地市/站控只读订阅(非保护)
规则名(示意) 表达式启发 for 动作
EdgeAIStreamDown edgeai_stream_up == 0 1m 发/对齐 STREAM_DOWN
EdgeAIQueueHigh edgeai_queue_depth{q="infer"} / capacity > 0.8 2m QUEUE_HIGH
EdgeAIDiskWatermark edgeai_evidence_disk_used_ratio > 0.9 5m DISK_WATERMARK ERROR
EdgeAIClockUnsync edgeai_clock_quality == 0 1m CLOCK_UNSYNC;业务 quality=suspect

Prometheus 告警与 MQTT ops 可双轨:前者给站内值班看大盘,后者进事件总线与审计;二者 code 字段应对齐,避免两套话术。

3.6 采集侧伪代码要点(防堵推理)

# 热路径:decode -> infer -> event_q
# 旁路:metrics registry 无锁或分片;log/telemetry 写入有界 channel
on_tick_2s:
  snapshot = copy_gauges()          # 不持推理锁
  try_send_mqtt_telemetry(snapshot) # 满则 drop;永不 join 推理线程
  maybe_flush_json_log()            # 异步
scrape_handler:
  return registry.text()            # 只读;超时快速失败

硬门禁:人为断开 Broker 与故意打满 log 盘时,推理线程不得出现同步 fsync/网络 send。


4. 结构化日志

4.1 JSON 字段约定

每行一条 JSON(newline-delimited):

{
  "ts": "2026-10-25T01:05:00.123Z",
  "device_id": "box-rk3588-07",
  "site": "SS-220-01",
  "task": "ops",
  "event_id": null,
  "level": "WARN",
  "code": "STREAM_DOWN",
  "cam": "bay3-camA",
  "msg": "rtsp reconnect exhausted",
  "ctx": { "fail_count": 5, "last_error": "timeout" }
}
字段 必填 说明
ts Y UTC RFC3339;与 Schema ts_utc 同风格
device_id Y 盒唯一 ID
task Y 业务任务或 ops / ota / mqtt
event_id 条件 关联告警/证据时填(= msg_id 推荐);纯运维可为 null
level Y DEBUG/INFO/WARN/ERROR/FATAL
code 建议 稳定事件码(见 §5)
cam / model_ver 可选 低基数上下文
msg / ctx Y / 可选 人类可读 + 结构化细节;禁止密钥与原图

4.2 轮转、保留与分盘

项 建议
路径 /var/log/edgeai/agent.jsonl(示例)
轮转 logrotate:单文件 100~200 MB 或按日;保留 7~14 天
权限 0640,用户 edgeai,组运维只读
分盘 日志挂载 ≠ 证据 SSD;证据水位告警不要靠删日志续命
级别 生产默认 INFO;DEBUG 仅临时候命且限速

5. 运维告警事件码(ops)

走 MQTT:edgeai/{org}/{site}/{device_id}/events/ops,QoS1;event.code 用下表;禁止映射为保护动作。

code 级别建议 触发条件(启发) 关联指标 / 动作
CLOCK_UNSYNC WARN/ERROR clock_quality.state ∈ {unsync, step_recent} 超阈 事件 quality=suspect;禁进金标准
QUEUE_HIGH WARN 任队列深度 >80% 持续 N 秒 检查丢帧策略;勿扩无界队列
DISK_WATERMARK WARN→ERROR 证据盘 ≥80% / ≥90% 触发保留策略;ERROR 时拒写非必要 clip
MODEL_LOAD_FAIL ERROR 签名校验失败或加载异常 对齐 OTA;保持上一版本或安全空载(站策 unknown)
STREAM_DOWN WARN 某路 RTSP DOWN >60 s watchdog 重连;他路 FPS 保护
MQTT_BACKPRESSURE WARN mqtt_q 高或连续 publish 失败 丢 telemetry;保 events;不断推理
THERMAL_THROTTLE WARN 温度触发降频或 FPS 雪崩 砍次要路;查风道
AGENT_RESTART INFO/WARN 进程崩溃拉起 记 model.ver 与 uptime
CONFIG_RELOAD_FAIL ERROR 配置/阈值热加载失败 保持旧配置
EVIDENCE_WRITE_FAIL ERROR 证据落盘失败 查只读挂载/inode;告警运维

业务告警码(如 PPE_NO_HELMET)仍走 events/{task},与 ops 分 topic,看板分面板。


6. 两周落地清单

日 动作 产出
D1 确认日志盘 / 证据盘 / 系统盘三分或配额;VLAN 上仅开 MGMT scrape 挂载表
D2 Agent 暴露 /metrics 最小集:FPS、队列、温度、stream_up curl 本机样例
D3 结构化 JSON 日志落地 + logrotate;扫一遍禁密钥/原图 样例 20 行
D4 MQTT telemetry 2~5 s 上报;断 Broker 5 min 验证不断推理 D60-03 记录
D5 实现 ops 码:STREAM_DOWN、QUEUE_HIGH、CLOCK_UNSYNC 人工注入测试
D6 DISK_WATERMARK + MODEL_LOAD_FAIL;证据仓水位联调 截图
D7 站内 VictoriaMetrics 或 Prometheus 单节点 + Grafana 一页大盘 URL(仅内网)
D8 高基数审查:无 event_id label;Histogram bucket 钉版 checklist 签字
D9 与授时、clock_quality 字段对齐;unsync 时日志+ops 授时联调单
D10 多路满载 30 min:指标与丢帧计数进报告(对齐 D90-01) 性能附录草稿
D11 (可选)OTel 抽样 Trace 或 Loki;默认关 开关文档
D12–14 验收门禁勾选;修缺口;不把 Zoo FPS 写进合同 见 §7

7. 可勾选验收门禁

ID 门禁 证据 □
OB-01 /metrics 含 FPS、队列、温度、证据水位、stream_up、model 信息 curl 输出 + 大盘截图 □
OB-02 telemetry QoS0 周期上报;断 Broker ≥5 min 推理 FPS 跌落 ≤5% 实验记录(对齐 D60-03) □
OB-03 日志为 JSON 行;抽样无密钥、无完整人脸原图、无长预签名 URL 审计抽样表 □
OB-04 日志与证据分盘或分配额;水位告警可触发 df + 告警截图 □
OB-05 ops 至少覆盖:CLOCK_UNSYNC、QUEUE_HIGH、DISK_WATERMARK、MODEL_LOAD_FAIL、STREAM_DOWN 注入/实测事件 JSON □
OB-06 Prometheus label 无 event_id/frame_id/URL;cam/task 枚举有界 指标清单评审 □
OB-07 scrape/看板/TSDB 不在保护 VLAN;ACL 默认 deny VLAN/防火墙对照(对齐 N1) □
OB-08 满载报告引用本机指标而非 Zoo FPS D90-01 附录 □

8. 衔接索引

手册 本手册如何对齐
MQTT 加固 telemetry QoS0 可丢;ops/events QoS1;断线不堵推理
授时 clock_quality 进指标与 telemetry;CLOCK_UNSYNC → suspect
证据仓 盘水位指标;写失败 ops;日志与证据分盘;MQTT 只引 media_refs
多路 RTSP decode_fps/drop_frames/stream_up;过载丢帧保推理
D60/D90 OB 门禁支撑 D60-03、D90-01;禁止跨保同 D60-09
VLAN Metrics/Logs 出口仅 AI/MQ/MGMT;禁 PROT
BOM 温度/电源传感器与网口规划影响采集可行性
Schema device_id/ts_utc/model.ver/health 字段同源

9. unknown / 边界声明

  • 业主现网 SIEM、syslog 服务器地址与保留年限:unknown(对接时补)。
  • 具体 NPU 利用率 sysfs/API 路径随芯片而异:unknown,以板卡 BSP 为准。
  • 合同级 P95 延迟与温度阈:unknown,须试点实测写入 SOW,禁止抄 Zoo。
  • 电力二次安防细则、等保测评条款:不由本文替代;分区与出口须安监终审。
  • OpenTelemetry / Grafana / Loki 等 SPDX 与商用插件许可以官网为准,嵌入发行前过许可台账。

文末:可观测性是「能报、能断线、能追责」的运维面——看得到 FPS 与水位,叫得应 ops 事件,且永远不进保护网。

← 变电站 / 电力站内边缘 AI 网络分区与 VLAN 隔离手册 首页 变电站边缘 AI 盒:备份与灾备恢复手册(可执行) →