docs: 补充策略门控机制源码级验证结论(§5.2)

- 新增 5.2 策略门控机制:注入链(后台 JSON → parseMonitorStrategy → EventStrategyBean → configMap → DataMonitorModule)、两级门控(插件级可绕过,指标级不可绕过——插件强制开启仍必须后台下发策略)、isOpen 语义(status==1 且抽样通过)、聚合上传触发(aggre_count/aggre_time)、重启生效机制(幂等标记无条件置 true,策略下发后需重启)
- 基于 @kernel/app_monitor_event 与 app_monitor_lib 源码核实(~/Work/apm)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
clz
2026-08-07 14:16:31 +08:00
parent 8060805c84
commit ec8cf06c66
@@ -104,6 +104,16 @@ time + icon_input_time + start_type + process_name
**判定生效**:后台下发后重启应用,冷启动日志中应消失 `Monitor.Event cold_start_time eventId has not created!`、出现 `Cold start bucket metric recorded: <ms>` 与 SDK 聚合 push 日志,看板出现 `launch` 模块 `cold_start_time` 桶分布。
### 5.2 策略门控机制(源码级验证,2026-08-07`@kernel/app_monitor_event`/`app_monitor_lib` 源码)
策略门控发生在 **SDK 指标层**,插件无法绕过:
- **注入链**:后台策略 JSON → `HXEventMonitorPlugin.parseMonitorStrategy()``EventStrategyBean.fromJson()``EventMonitorStrategy.addStrategy(module, bean)`(全局 `configMap`)→ `DataMonitorModule` 构造时 `getStrategy('launch')` 取策略。
- **两级门控**:插件级(`AbstractHXBasePlugin.isSupport()`,默认"有策略且开启",`HXLaunchMonitorPlugin` override 为 `true` 强制通过)仅控制插件生命周期;**指标级**(`DataMonitorModule.create/getEventMonitor` 检查 `_strategy?.isOpen()`)独立生效——`launch` 无策略 bean 时 `_strategy=null``create`/`getEventMonitor` 返回 `NullDataMonitorImp``record` 空转打印 `eventId has not created!`。**插件强制开启绕不过指标级门控,必须后台下发策略。**
- **`isOpen()` 语义**`status == 1STATUS_OPEN` 且抽样通过(`isOpenByRandom`,对应 `sampling_rate`)。
- **聚合上传触发**`onRecord → isNeedUpload`——累计条数 ≥ `aggregatorSizeThreshold``aggre_count`)或距上次上传 ≥ `aggregatorTimeThreshold``aggre_time`)即触发 `push`
- **重启生效机制**`LaunchMonitor.ensureColdStartMetric()` 的幂等标记在 `create` 被策略拒绝(返回空实现)时仍置 `true`——本进程内策略下发后不会重试创建,**必须重启应用**(与上节"判定生效"一致);策略未下发时链路 A(Elk 追溯)不受影响、正常上传。
随后为该模块补充 ELK 索引模板,在 Grafana 建立看板面板(建议形态):
```json