@microi.net/cli 5.8.5 → 5.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/LICENSE +21 -21
- package/README.md +71 -71
- package/assets/build-meta.json +7 -7
- package/assets/feature-matrix.json +138 -138
- package/assets/logo.svg +4 -4
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-codex-stdio-adapter.js +0 -0
- package/scripts/mcp-server.js +1 -1
- package/scripts/microi-cli.js +66 -65
- package/scripts/microi-codex-broker.js +450 -450
- package/scripts/microi-codex-router.js +618 -618
- package/scripts/microi-skills.meta.json +384 -384
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +21 -21
- package/skills/README.md +287 -287
- package/skills/ai-engine/SKILL.md +269 -265
- package/skills/ai-engine/agents/openai.yaml +4 -4
- package/skills/ai-engine/references/ai-employees.md +48 -48
- package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
- package/skills/ai-platform-governance/SKILL.md +177 -177
- package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
- package/skills/app-store/SKILL.md +525 -525
- package/skills/app-store/agents/openai.yaml +4 -4
- package/skills/business-blueprint/SKILL.md +193 -193
- package/skills/datasource-engine/SKILL.md +93 -93
- package/skills/datasource-engine/agents/openai.yaml +4 -4
- package/skills/dos-orm/SKILL.md +97 -95
- package/skills/dos-orm/references/api-reference.md +229 -229
- package/skills/email-engine/SKILL.md +81 -81
- package/skills/email-engine/references/v8-email.md +34 -34
- package/skills/job-engine/SKILL.md +176 -176
- package/skills/job-engine/agents/openai.yaml +4 -4
- package/skills/message-notification/SKILL.md +156 -156
- package/skills/message-notification/agents/openai.yaml +5 -5
- package/skills/message-notification/references/contracts.md +102 -102
- package/skills/microi/SKILL.md +14 -14
- package/skills/microi-ai-app-auth.js +652 -652
- package/skills/microi-ai-application/SKILL.md +115 -115
- package/skills/microi-ai-application/agents/openai.yaml +4 -4
- package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
- package/skills/microi-client-frontend/SKILL.md +246 -244
- package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +144 -144
- package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +196 -196
- package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +167 -167
- package/skills/microi-codex/SKILL.md +102 -100
- package/skills/microi-codex-installer/SKILL.md +231 -231
- package/skills/microi-codex-installer/agents/openai.yaml +7 -7
- package/skills/microi-datasource-mapping/SKILL.md +122 -122
- package/skills/microi-db-schema/SKILL.md +175 -175
- package/skills/microi-db-schema/agents/openai.yaml +4 -4
- package/skills/microi-db-schema/references/core-tables.md +695 -695
- package/skills/microi-db-schema/references/form-component-options.md +256 -256
- package/skills/microi-db-schema/references/schema-overview.md +202 -202
- package/skills/microi-db-schema/references/schema.md +646 -646
- package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
- package/skills/microi-deployment/SKILL.md +222 -220
- package/skills/microi-deployment/references/deployment-matrix.md +109 -109
- package/skills/microi-docs-coverage/SKILL.md +133 -133
- package/skills/microi-docs-coverage/references/capability-map.md +91 -91
- package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
- package/skills/microi-form-engine/SKILL.md +333 -333
- package/skills/microi-form-engine/references/component-catalog.md +218 -218
- package/skills/microi-form-engine/references/data-source-events.md +124 -124
- package/skills/microi-form-layout/SKILL.md +205 -205
- package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +235 -235
- package/skills/microi-frontend-sdk/SKILL.md +194 -194
- package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +176 -176
- package/skills/microi-left-right-layout/SKILL.md +141 -141
- package/skills/microi-microservice/SKILL.md +328 -326
- package/skills/microi-microservice/references/runtime-delivery.md +278 -278
- package/skills/microi-mobile-app-quality/SKILL.md +185 -185
- package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +213 -213
- package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +128 -128
- package/skills/microi-solution-quotation/SKILL.md +78 -78
- package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
- package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
- package/skills/microi-sso/SKILL.md +96 -90
- package/skills/microi-sso/references/acceptance.md +49 -49
- package/skills/microi-sso/references/configuration-and-security.md +53 -53
- package/skills/microi-sso/references/inbound.md +53 -53
- package/skills/microi-sso/references/outbound.md +39 -39
- package/skills/microi-system-delivery/SKILL.md +137 -137
- package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +193 -193
- package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +217 -217
- package/skills/microi-ui/SKILL.md +192 -192
- package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +183 -183
- package/skills/microi-uniapp-frontend/SKILL.md +193 -193
- package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +225 -225
- package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +154 -154
- package/skills/microi.v8.js +1921 -1921
- package/skills/module-engine/SKILL.md +255 -255
- package/skills/module-engine/references/module-config.md +204 -204
- package/skills/ocr-engine/SKILL.md +113 -113
- package/skills/ocr-engine/agents/openai.yaml +4 -4
- package/skills/page-engine/SKILL.md +206 -206
- package/skills/page-engine/examples/compact-dashboard.json +1444 -1444
- package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +234 -234
- package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +60 -60
- package/skills/performance-testing/SKILL.md +221 -221
- package/skills/playwright-e2e/SKILL.md +196 -196
- package/skills/playwright-e2e/references/progressive-01-/345/205/250/350/207/252/345/212/250/347/231/273/345/275/225-/345/205/215/351/252/214/350/257/201/347/240/201-/344/275/206/344/270/215/345/205/215/345/257/206/347/240/201-/345/277/205/350/257/273.md +173 -173
- package/skills/playwright-e2e/references/progressive-02-/346/226/207/345/255/227/345/257/271/346/257/224/345/272/246/344/270/216/345/217/257/350/257/273/346/200/247/350/207/252/345/212/250/345/214/226/346/243/200/346/237/245-/345/277/205/345/201/232.md +183 -183
- package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
- package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
- package/skills/print-engine/SKILL.md +259 -259
- package/skills/production-readonly-audit/SKILL.md +41 -41
- package/skills/report-engine/SKILL.md +71 -71
- package/skills/report-engine/agents/openai.yaml +4 -4
- package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
- package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
- package/skills/scripts/sync-embedded-skills.mjs +46 -46
- package/skills/scripts/validate-progressive-disclosure.mjs +57 -57
- package/skills/search-engine/SKILL.md +75 -75
- package/skills/search-engine/agents/openai.yaml +4 -4
- package/skills/spider-engine/SKILL.md +190 -190
- package/skills/system-observability/SKILL.md +249 -246
- package/skills/system-observability/references/memory-incident-triage.md +77 -77
- package/skills/translate-engine/SKILL.md +140 -140
- package/skills/translate-engine/agents/openai.yaml +4 -4
- package/skills/ui-design/SKILL.md +223 -223
- package/skills/ui-design/assets/pattern-showcase/app.js +54 -54
- package/skills/ui-design/assets/pattern-showcase/index.html +163 -163
- package/skills/ui-design/assets/pattern-showcase/styles.css +311 -311
- package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
- package/skills/ui-design/references/design-pattern-library.md +184 -184
- package/skills/ui-design/references/mci-design-contract.md +163 -163
- package/skills/ui-design/references/motion-and-media.md +78 -78
- package/skills/ui-design/references/product-flow-recipes.md +94 -94
- package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +218 -218
- package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +164 -164
- package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +235 -235
- package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +152 -152
- package/skills/ui-design/references/progressive-05-/347/247/273/345/212/250/347/253/257/344/270/223/347/224/250/350/247/204/350/214/203.md +238 -238
- package/skills/ui-design/references/progressive-06-/344/270/273/351/242/230/345/210/207/346/215/242/345/256/236/347/216/260.md +194 -194
- package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +207 -207
- package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +142 -142
- package/skills/uniapp-mall-assets/SKILL.md +176 -176
- package/skills/unity-integration/SKILL.md +171 -171
- package/skills/unity-integration/agents/openai.yaml +4 -4
- package/skills/unity-integration/references/ai-app-delivery.md +119 -119
- package/skills/unity-integration/references/sdk-api.md +82 -82
- package/skills/unity-integration/references/toolbox-migration.md +66 -66
- package/skills/unity-integration/references/webgl-hosting.md +57 -57
- package/skills/v8-api-config/SKILL.md +388 -388
- package/skills/v8-cache-pattern/SKILL.md +312 -312
- package/skills/v8-crud-api/SKILL.md +178 -178
- package/skills/v8-crud-api/references/progressive-01-/346/237/245/350/257/242/345/210/227/350/241/250-/345/210/206/351/241/265.md +226 -226
- package/skills/v8-crud-api/references/progressive-02-where-/346/235/241/344/273/266/350/257/255/346/263/225/351/200/237/346/237/245.md +49 -49
- package/skills/v8-debugging/SKILL.md +284 -284
- package/skills/v8-explorer-tree/SKILL.md +228 -228
- package/skills/v8-export-import/SKILL.md +219 -219
- package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +211 -211
- package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
- package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +42 -42
- package/skills/v8-file-upload/SKILL.md +284 -284
- package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +263 -263
- package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +161 -161
- package/skills/v8-formengine-http/SKILL.md +238 -238
- package/skills/v8-frontend-events/SKILL.md +180 -180
- package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
- package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
- package/skills/v8-http-integration/SKILL.md +182 -182
- package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
- package/skills/v8-http-integration/references/progressive-02-/351/224/231/350/257/257/345/244/204/347/220/206/346/250/241/345/274/217.md +44 -44
- package/skills/v8-image-processing/SKILL.md +190 -190
- package/skills/v8-image-processing/agents/openai.yaml +4 -4
- package/skills/v8-image-processing/references/api-reference.md +623 -623
- package/skills/v8-menu-buttons/SKILL.md +186 -186
- package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +222 -222
- package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +228 -228
- package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +104 -104
- package/skills/v8-mongodb/SKILL.md +200 -200
- package/skills/v8-mq-mqtt/SKILL.md +176 -176
- package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
- package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
- package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
- package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
- package/skills/v8-security/SKILL.md +210 -210
- package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +200 -200
- package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +160 -160
- package/skills/v8-sql-query/SKILL.md +302 -302
- package/skills/v8-table-event/SKILL.md +176 -176
- package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +216 -216
- package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +46 -46
- package/skills/v8-tcp-integration/SKILL.md +147 -147
- package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
- package/skills/v8-template-engine/SKILL.md +167 -167
- package/skills/v8-utilities/SKILL.md +104 -104
- package/skills/v8-utilities/references/client-api-index.md +143 -143
- package/skills/v8-utilities/references/platform-http-routes.md +83 -83
- package/skills/v8-utilities/references/server-api-index.md +188 -188
- package/skills/v8-workflow/SKILL.md +252 -252
- package/skills/v8-workflow/references/progressive-01-/350/212/202/347/202/271/345/274/200/345/247/213-v8-/344/272/213/344/273/266.md +180 -180
- package/skills/v8-workflow/references/workflow-configuration.md +49 -49
- package/skills/vision-engine/SKILL.md +160 -160
- package/skills/vision-engine/agents/openai.yaml +4 -4
- package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
- package/skills/workspace-conventions/SKILL.md +273 -273
- package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +209 -209
- package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +217 -217
- package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +27 -27
|
@@ -1,248 +1,251 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: system-observability
|
|
3
|
-
description: Microi 系统日志/监控查询、诊断与治理规范。用于分析系统日志、Trace、热点接口、CPU/内存吃满、OOM、异常分配、接口引擎/V8 事件归因、重启事故恢复、网络流量、安全事件和监控性能成本。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
> **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
|
|
7
|
-
|
|
8
|
-
# Microi 系统日志/监控
|
|
9
|
-
|
|
10
|
-
本 Skill 用于读取、解释、扩展和验收 Microi 的统一【系统日志/监控】能力。它不授权查看其它租户、绕过菜单/平台管理员权限,或把当前节点样本扩写成全局结论。
|
|
11
|
-
|
|
12
|
-
## 大权限对象与 SQL 参数处理回归
|
|
13
|
-
- 浏览器 Pinia 持久化应按已选字段独立深度监听,缓存序列化片段;非持久化的时钟/加载状态不得触发完整权限遍历,主题变化不得重新序列化用户。权限嵌套修改、登录退出、显式保存、恢复钩子、失败恢复和 dispose 必须回归,嵌入 WebOS 窗口保持只读存储边界。前端镜像验收与后端分开记录。
|
|
14
|
-
待办的多项只读计数由内部 `IFormEngineReadOnlyCountRuntime` 在一个批次中拥有一份独立身份;业务参数不能提供非空 `_CurrentUser`,每项仍经过原表单查询与租户/角色/数据范围检查,事务内顺序执行。抄送分页及可能执行行 V8 的 CRUD 保留独立身份。私有文件 HTTP 原子可接收本次 DiyToken 验证后独占的身份,后台可信上下文仍复制;资源引用、权限、审计和 `Limit=true` 不变。上述优化需要更新后端镜像,不能靠修改 V8 参数来启用或跳过鉴权。
|
|
15
|
-
|
|
16
|
-
- `FromSection.formatSql` 是 ORM 结果缓存键处理,独立于页面 SQL 展示。大型 IN 权限快照需测试这条真实路径的分配量、参数前缀、字面量、替换值含参数文本、空值和缓存键稳定性;禁止用逐参数 `String.Replace`。单对象 HTTP 表单仅可转交本次 DiyToken 验证后独立身份,批量行与已有 JSON 持有者必须保留副本,不能推广为共享可变身份缓存。
|
|
17
|
-
|
|
18
|
-
- 保持用户需要的 `PrintSqlToPage` 开启。参数准备、页面可执行 SQL 与慢日志不得逐参数扫描和复制整条 SQL;使用单次扫描,并测试字符串、注释、参数名前缀、替换值含参数文本及完整页面输出。
|
|
19
|
-
- 动态 FormEngine 参数不得把 `_CurrentUser` 复制进业务行数据;一轮转换只拥有一份独立身份树,不能为性能共享可变用户缓存或修改调用方对象。用接近实际规模的权限树测量分配,并验证租户、访问密钥、角色和可变子对象隔离。
|
|
20
|
-
- 接口引擎正常、异常与慢日志使用 `ApiEngineLogParameters.Serialize`,在序列化前排除顶层内部 `_CurrentUser`,用户仍由独立 UserId/UserName 字段记录;业务嵌套同名字段、类型和空值保留,不修改原参数。不允许先深复制/序列化权限树再截断。托管文件 URL、后台任务和菜单接口向可信原子只投影业务参数,后端仍独立验证身份、租户和资源权限。
|
|
21
|
-
|
|
22
|
-
登录身份权限异常膨胀时,先比对 sys_rolelimit 的有效行与 IsDeleted=1 历史行。原生权限快照与菜单授权编辑只加载有效权限,IsDeleted 为 NULL 的存量记录仍有效;没有该列的旧表保持兼容,新增列后立即采用过滤,元数据或查询异常不回退为全量授权。该修复需要更新后端镜像;已有登录缓存通过正常重新登录或 RefreshToken 刷新,不删除权限历史,不改变 DiyToken、角色/数据范围或 PrintSqlToPage。用真实数据库回归旧表、新列、撤销权限、无权限角色、注入参数和查询失败,不能仅凭身份体积下降宣称请求耗时已经恢复。
|
|
23
|
-
|
|
24
|
-
接口引擎构造脚本参数时,顶层 `_CurrentUser` 属于宿主保留身份,不再复制到 `V8.Param`;脚本读取已认证身份应使用 `V8.CurrentUser`。权限树仍保留完整内容,身份验证、令牌撤销、访问密钥范围、跨租户检查和独立脚本快照保持执行;嵌套业务对象中同名字段仍保留。实时通知检测只读取成功结果的 Code 与 DataAppend,避免为了检查不存在的事件而序列化整份用户/列表/文件 Data;事件字段白名单、大小限制、提交后发送和订阅权限不变。两项优化都需要更新后端镜像。
|
|
25
|
-
- 公共鉴权的角色基础权限读取只检查 `_Roles`,不得复制整份用户的表/菜单权限树;显式 Bearer 请求在同一过滤器中只加载一次有效会话。优化必须保留签名、过期、安全版本、租户一致性、Redis 活动令牌、历史敏感字段清理及访问密钥撤销/范围检查;不得用跨请求身份缓存或共享可变 V8 用户对象换取速度。
|
|
26
|
-
- 分层归因同时核对 `FormAuthorization` 与其内部 `AuthorizationVersion`;原生 Redis 授权版本读取不经过通用 `RedisRead`,不能只用后者排除缓存等待。
|
|
27
|
-
- HTTP Controller 到首个接口引擎可单次交接已经实时验证的身份;交接必须绑定原始参数对象和同一 HttpContext,不能放入 JSON/可复制注解。参数克隆、租户或身份投影变化、重复消费、后续请求及嵌套调用均回到原验证路径。脱敏须继续覆盖全部嵌套字段,优化临时分配不能跳过大权限树。
|
|
28
|
-
- V8 AI 代理在创建时固定不可变身份,首次调用 AI 才构造可变 JSON;普通 V8 不应为未使用的 AI 复制完整权限树。必须测试脚本修改后的身份隔离、全部权限保留、JSON 类型/注解和二进制值隔离,不能延迟读取仍由脚本持有的身份对象。
|
|
29
|
-
- 原生统计失败时不自动重跑全部兼容查询。兼容回退只处理能力确实缺失的旧后端,避免故障放大。
|
|
30
|
-
- 用相同测试记录修复前失败、修复后通过;实际请求需区分冷启动、稳定调用、页面并发、数据库执行与 HTTP 总耗时。镜像、应用包和线上节点分别验收。
|
|
31
|
-
|
|
32
|
-
## 请求等待分层归因
|
|
33
|
-
|
|
34
|
-
- 用唯一 TraceId 对齐浏览器计时与 `RecentRequests[].Latency`,分别解释发出前排队、首字节等待、响应接收和服务端顺序阶段;不能将总耗时减 TTFB 当作下载时间。
|
|
35
|
-
- `Latency.Parts` 是含子调用、可能并行的累计墙钟时间,不可相加或等同 CPU。连接打开/连接池等待与 SQL 命令分开;Reader 后续读行不计入 DatabaseCommand。
|
|
36
|
-
- `RuntimeIntervals` 是当前节点最近 30 个约 1 秒同窗样本。分别核对 CPU 执行、I/O wait、steal、GC 暂停、线程池积压、采样唤醒延迟和 cgroup 节流;缺值按不可用处理。旧 Linux CPU 百分比包含 I/O wait,不能直接判定计算饱和。
|
|
37
|
-
- `Memory.HelperProcesses.Collector/RecoveryAnalyzer` 是当前 API 管理的诊断采集/恢复子进程。两次查询间的 CPU 结合 PID、启动时间和 RSS 判断监控成本;首次、重建、不可用时 CPU 为 null。它不是 NAS 全部进程清单,不能将剩余主机负载直接归给某个服务。
|
|
38
|
-
- `Snapshot(includeHost:true)` 的 `Host.Processes`(`process-resources/v1`)每 5 秒持续采样,CPU/RSS/Swap/I/O 前 10 名及最近 12 次样本;核对 Fresh、Scope、HostProcessesVisible、不可读/缺项计数。CPU 100% 是一核;首次、PID 重用、计数重置为 null,RSS 不能累加作独占内存。不采命令行/环境变量。Linux 无固定只读 `/proc:/host/proc:ro` 挂载时只声明当前 PID 命名空间,不能声称看到了全部宿主进程;镜像更新不能新增挂载,不能为诊断开放 Docker socket 或特权容器。
|
|
39
|
-
- `Host.DiskIO.Devices` 包含 SATA/NVMe/RAID/映射设备的速率、IOPS、BusyPercent、AwaitMs 和 InFlight;分区按 sysfs 标记识别,名称以数字结尾不能排除。汇总只累加物理整盘,避免与 RAID/dm 双计;独立时间窗,首次/重置速率为 null。Docker 不可访问不等于宿主没有 Docker。
|
|
40
|
-
- 宿主进程排名的 CPU/IO 速率分别使用每个进程计数器的实际读取时间窗 `CpuWindowSeconds / IoWindowSeconds`,顶层 `WindowSeconds` 只是扫描周期。GC 或调度暂停导致扫描耗时变长时,不能继续用扫描开始时间作为计数分母;单次计数读取超过 250 ms 则该次时间无效,速率为 null。旧后端长扫描的 CPU 尖峰不能直接用来证明宿主饱和。
|
|
41
|
-
- `Trace.RuntimeRequests` 只从当前租户、当前节点最近 500 个请求中返回最多 20 个匹配记录;淘汰和重启导致缺证,不代表快。协议为 `request-latency/v1`,现有 MCP 查询参数不变;本次底层指标没有新增商城声明式资源,后端升级即可读取。
|
|
42
|
-
|
|
43
|
-
- 批量角标/计数变慢时核对 Identity 次数是否随项数增长。只读 `GetTableDataCountBatch` 允许批内复用一份脱离缓存的可信身份;保留逐项表权限/数据范围、跨批次实时校验及普通 CRUD 的可变身份隔离,不能把该优化扩展为跨请求缓存权限或共享脚本可修改身份。
|
|
44
|
-
- `RoutingMs` 包含在 `BeforeActionMs` 中;路由阶段也可能访问缓存和数据库,不可只看 Controller/表单内部计时。
|
|
45
|
-
|
|
46
|
-
## 先选入口
|
|
47
|
-
|
|
48
|
-
| 目标 | 推荐入口 |
|
|
49
|
-
|---|---|
|
|
50
|
-
| 人工排查、看趋势、打开日志详情 | 平台菜单【系统日志/监控】 |
|
|
51
|
-
| AI 查询、自动诊断、验收 | MCP `microi_query_system_observability` |
|
|
52
|
-
| AI 封禁或解封 IP | MCP `microi_manage_system_observability` |
|
|
53
|
-
| 连接池耗尽时在线诊断/恢复 | 查询 `DatabasePools / DatabasePoolRecovery`,治理 `ResetDatabasePools` |
|
|
54
|
-
| 应用页面读取 | Managed 接口引擎 `mci-system-observability-query` |
|
|
55
|
-
| 应用页面治理 | Managed 接口引擎 `mci-system-observability-action` |
|
|
56
|
-
| 扩展宿主、进程、Mongo 或安全底层原子能力 | `V8.Method.GetSystemObservability` / `V8.Method.ManageSystemObservability` |
|
|
57
|
-
|
|
58
|
-
AI 第一次使用时先查询 `action=Capabilities`,再按返回的动作、权限和边界选择查询。优先使用专用工具,它已经限制动作、参数、分页、确认和审计。旧进程缺少新 Memory 动作时,仅允许通过标准 `microi_run_engine` 临时只读执行固定查询引擎;完整版本排查与降级边界见 [内存事故排查手册](references/memory-incident-triage.md)。不得创建临时维护引擎或绕过后端权限。
|
|
59
|
-
|
|
60
|
-
## 查询动作
|
|
61
|
-
|
|
62
|
-
### 连接池故障应急入口
|
|
63
|
-
|
|
64
|
-
- 收到 `obtaining a connection from the pool` 时,直接用 `microi_query_system_observability(action=DatabasePools,poolTarget=Both)`;故障池可能阻塞普通 `Capabilities` 或 Managed 引擎,此动作走固定 `/api/Diagnostics/database-pools` 应急协议。要求后端支持 `database-pools/v1`,只更新 MCP 不能安装后端。
|
|
65
|
-
- `microi_manage_system_observability(action=ResetDatabasePools,poolTarget=Both)` 无确认值时只预览。执行必须带同一预览的 `operationId`、`poolIds`、`poolTarget` 和 `confirmExecution=ResetDatabasePools:<operationId>`。预览票据 2 分钟有效;执行前仍复核配置摘要。
|
|
66
|
-
- 请求超时或响应未知,使用查询动作 `DatabasePoolRecovery` 与原 `operationId` 回读,禁止换编号重试。每租户 60 秒冷却;命令期限 90 秒;回执保留 10 分钟,过期编号不能重新执行。
|
|
67
|
-
- 回执逐节点区分 `Pending / Incomplete / PartialFailure / CompletedForRegisteredNodes`。只有最后一项证明已注册节点完成;未升级节点不在覆盖范围,最后还需验证原故障只读接口。不得把当前节点探测成功说成全站恢复。
|
|
1
|
+
---
|
|
2
|
+
name: system-observability
|
|
3
|
+
description: Microi 系统日志/监控查询、诊断与治理规范。用于分析系统日志、Trace、热点接口、CPU/内存吃满、OOM、异常分配、接口引擎/V8 事件归因、重启事故恢复、网络流量、安全事件和监控性能成本。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
|
|
7
|
+
|
|
8
|
+
# Microi 系统日志/监控
|
|
9
|
+
|
|
10
|
+
本 Skill 用于读取、解释、扩展和验收 Microi 的统一【系统日志/监控】能力。它不授权查看其它租户、绕过菜单/平台管理员权限,或把当前节点样本扩写成全局结论。
|
|
11
|
+
|
|
12
|
+
## 大权限对象与 SQL 参数处理回归
|
|
13
|
+
- 浏览器 Pinia 持久化应按已选字段独立深度监听,缓存序列化片段;非持久化的时钟/加载状态不得触发完整权限遍历,主题变化不得重新序列化用户。权限嵌套修改、登录退出、显式保存、恢复钩子、失败恢复和 dispose 必须回归,嵌入 WebOS 窗口保持只读存储边界。前端镜像验收与后端分开记录。
|
|
14
|
+
待办的多项只读计数由内部 `IFormEngineReadOnlyCountRuntime` 在一个批次中拥有一份独立身份;业务参数不能提供非空 `_CurrentUser`,每项仍经过原表单查询与租户/角色/数据范围检查,事务内顺序执行。抄送分页及可能执行行 V8 的 CRUD 保留独立身份。私有文件 HTTP 原子可接收本次 DiyToken 验证后独占的身份,后台可信上下文仍复制;资源引用、权限、审计和 `Limit=true` 不变。上述优化需要更新后端镜像,不能靠修改 V8 参数来启用或跳过鉴权。
|
|
15
|
+
|
|
16
|
+
- `FromSection.formatSql` 是 ORM 结果缓存键处理,独立于页面 SQL 展示。大型 IN 权限快照需测试这条真实路径的分配量、参数前缀、字面量、替换值含参数文本、空值和缓存键稳定性;禁止用逐参数 `String.Replace`。单对象 HTTP 表单仅可转交本次 DiyToken 验证后独立身份,批量行与已有 JSON 持有者必须保留副本,不能推广为共享可变身份缓存。
|
|
17
|
+
|
|
18
|
+
- 保持用户需要的 `PrintSqlToPage` 开启。参数准备、页面可执行 SQL 与慢日志不得逐参数扫描和复制整条 SQL;使用单次扫描,并测试字符串、注释、参数名前缀、替换值含参数文本及完整页面输出。
|
|
19
|
+
- 动态 FormEngine 参数不得把 `_CurrentUser` 复制进业务行数据;一轮转换只拥有一份独立身份树,不能为性能共享可变用户缓存或修改调用方对象。用接近实际规模的权限树测量分配,并验证租户、访问密钥、角色和可变子对象隔离。
|
|
20
|
+
- 接口引擎正常、异常与慢日志使用 `ApiEngineLogParameters.Serialize`,在序列化前排除顶层内部 `_CurrentUser`,用户仍由独立 UserId/UserName 字段记录;业务嵌套同名字段、类型和空值保留,不修改原参数。不允许先深复制/序列化权限树再截断。托管文件 URL、后台任务和菜单接口向可信原子只投影业务参数,后端仍独立验证身份、租户和资源权限。
|
|
21
|
+
|
|
22
|
+
登录身份权限异常膨胀时,先比对 sys_rolelimit 的有效行与 IsDeleted=1 历史行。原生权限快照与菜单授权编辑只加载有效权限,IsDeleted 为 NULL 的存量记录仍有效;没有该列的旧表保持兼容,新增列后立即采用过滤,元数据或查询异常不回退为全量授权。该修复需要更新后端镜像;已有登录缓存通过正常重新登录或 RefreshToken 刷新,不删除权限历史,不改变 DiyToken、角色/数据范围或 PrintSqlToPage。用真实数据库回归旧表、新列、撤销权限、无权限角色、注入参数和查询失败,不能仅凭身份体积下降宣称请求耗时已经恢复。
|
|
23
|
+
|
|
24
|
+
接口引擎构造脚本参数时,顶层 `_CurrentUser` 属于宿主保留身份,不再复制到 `V8.Param`;脚本读取已认证身份应使用 `V8.CurrentUser`。权限树仍保留完整内容,身份验证、令牌撤销、访问密钥范围、跨租户检查和独立脚本快照保持执行;嵌套业务对象中同名字段仍保留。实时通知检测只读取成功结果的 Code 与 DataAppend,避免为了检查不存在的事件而序列化整份用户/列表/文件 Data;事件字段白名单、大小限制、提交后发送和订阅权限不变。两项优化都需要更新后端镜像。
|
|
25
|
+
- 公共鉴权的角色基础权限读取只检查 `_Roles`,不得复制整份用户的表/菜单权限树;显式 Bearer 请求在同一过滤器中只加载一次有效会话。优化必须保留签名、过期、安全版本、租户一致性、Redis 活动令牌、历史敏感字段清理及访问密钥撤销/范围检查;不得用跨请求身份缓存或共享可变 V8 用户对象换取速度。
|
|
26
|
+
- 分层归因同时核对 `FormAuthorization` 与其内部 `AuthorizationVersion`;原生 Redis 授权版本读取不经过通用 `RedisRead`,不能只用后者排除缓存等待。
|
|
27
|
+
- HTTP Controller 到首个接口引擎可单次交接已经实时验证的身份;交接必须绑定原始参数对象和同一 HttpContext,不能放入 JSON/可复制注解。参数克隆、租户或身份投影变化、重复消费、后续请求及嵌套调用均回到原验证路径。脱敏须继续覆盖全部嵌套字段,优化临时分配不能跳过大权限树。
|
|
28
|
+
- V8 AI 代理在创建时固定不可变身份,首次调用 AI 才构造可变 JSON;普通 V8 不应为未使用的 AI 复制完整权限树。必须测试脚本修改后的身份隔离、全部权限保留、JSON 类型/注解和二进制值隔离,不能延迟读取仍由脚本持有的身份对象。
|
|
29
|
+
- 原生统计失败时不自动重跑全部兼容查询。兼容回退只处理能力确实缺失的旧后端,避免故障放大。
|
|
30
|
+
- 用相同测试记录修复前失败、修复后通过;实际请求需区分冷启动、稳定调用、页面并发、数据库执行与 HTTP 总耗时。镜像、应用包和线上节点分别验收。
|
|
31
|
+
|
|
32
|
+
## 请求等待分层归因
|
|
33
|
+
|
|
34
|
+
- 用唯一 TraceId 对齐浏览器计时与 `RecentRequests[].Latency`,分别解释发出前排队、首字节等待、响应接收和服务端顺序阶段;不能将总耗时减 TTFB 当作下载时间。
|
|
35
|
+
- `Latency.Parts` 是含子调用、可能并行的累计墙钟时间,不可相加或等同 CPU。连接打开/连接池等待与 SQL 命令分开;Reader 后续读行不计入 DatabaseCommand。
|
|
36
|
+
- `RuntimeIntervals` 是当前节点最近 30 个约 1 秒同窗样本。分别核对 CPU 执行、I/O wait、steal、GC 暂停、线程池积压、采样唤醒延迟和 cgroup 节流;缺值按不可用处理。旧 Linux CPU 百分比包含 I/O wait,不能直接判定计算饱和。
|
|
37
|
+
- `Memory.HelperProcesses.Collector/RecoveryAnalyzer` 是当前 API 管理的诊断采集/恢复子进程。两次查询间的 CPU 结合 PID、启动时间和 RSS 判断监控成本;首次、重建、不可用时 CPU 为 null。它不是 NAS 全部进程清单,不能将剩余主机负载直接归给某个服务。
|
|
38
|
+
- `Snapshot(includeHost:true)` 的 `Host.Processes`(`process-resources/v1`)每 5 秒持续采样,CPU/RSS/Swap/I/O 前 10 名及最近 12 次样本;核对 Fresh、Scope、HostProcessesVisible、不可读/缺项计数。CPU 100% 是一核;首次、PID 重用、计数重置为 null,RSS 不能累加作独占内存。不采命令行/环境变量。Linux 无固定只读 `/proc:/host/proc:ro` 挂载时只声明当前 PID 命名空间,不能声称看到了全部宿主进程;镜像更新不能新增挂载,不能为诊断开放 Docker socket 或特权容器。
|
|
39
|
+
- `Host.DiskIO.Devices` 包含 SATA/NVMe/RAID/映射设备的速率、IOPS、BusyPercent、AwaitMs 和 InFlight;分区按 sysfs 标记识别,名称以数字结尾不能排除。汇总只累加物理整盘,避免与 RAID/dm 双计;独立时间窗,首次/重置速率为 null。Docker 不可访问不等于宿主没有 Docker。
|
|
40
|
+
- 宿主进程排名的 CPU/IO 速率分别使用每个进程计数器的实际读取时间窗 `CpuWindowSeconds / IoWindowSeconds`,顶层 `WindowSeconds` 只是扫描周期。GC 或调度暂停导致扫描耗时变长时,不能继续用扫描开始时间作为计数分母;单次计数读取超过 250 ms 则该次时间无效,速率为 null。旧后端长扫描的 CPU 尖峰不能直接用来证明宿主饱和。
|
|
41
|
+
- `Trace.RuntimeRequests` 只从当前租户、当前节点最近 500 个请求中返回最多 20 个匹配记录;淘汰和重启导致缺证,不代表快。协议为 `request-latency/v1`,现有 MCP 查询参数不变;本次底层指标没有新增商城声明式资源,后端升级即可读取。
|
|
42
|
+
|
|
43
|
+
- 批量角标/计数变慢时核对 Identity 次数是否随项数增长。只读 `GetTableDataCountBatch` 允许批内复用一份脱离缓存的可信身份;保留逐项表权限/数据范围、跨批次实时校验及普通 CRUD 的可变身份隔离,不能把该优化扩展为跨请求缓存权限或共享脚本可修改身份。
|
|
44
|
+
- `RoutingMs` 包含在 `BeforeActionMs` 中;路由阶段也可能访问缓存和数据库,不可只看 Controller/表单内部计时。
|
|
45
|
+
|
|
46
|
+
## 先选入口
|
|
47
|
+
|
|
48
|
+
| 目标 | 推荐入口 |
|
|
49
|
+
|---|---|
|
|
50
|
+
| 人工排查、看趋势、打开日志详情 | 平台菜单【系统日志/监控】 |
|
|
51
|
+
| AI 查询、自动诊断、验收 | MCP `microi_query_system_observability` |
|
|
52
|
+
| AI 封禁或解封 IP | MCP `microi_manage_system_observability` |
|
|
53
|
+
| 连接池耗尽时在线诊断/恢复 | 查询 `DatabasePools / DatabasePoolRecovery`,治理 `ResetDatabasePools` |
|
|
54
|
+
| 应用页面读取 | Managed 接口引擎 `mci-system-observability-query` |
|
|
55
|
+
| 应用页面治理 | Managed 接口引擎 `mci-system-observability-action` |
|
|
56
|
+
| 扩展宿主、进程、Mongo 或安全底层原子能力 | `V8.Method.GetSystemObservability` / `V8.Method.ManageSystemObservability` |
|
|
57
|
+
|
|
58
|
+
AI 第一次使用时先查询 `action=Capabilities`,再按返回的动作、权限和边界选择查询。优先使用专用工具,它已经限制动作、参数、分页、确认和审计。旧进程缺少新 Memory 动作时,仅允许通过标准 `microi_run_engine` 临时只读执行固定查询引擎;完整版本排查与降级边界见 [内存事故排查手册](references/memory-incident-triage.md)。不得创建临时维护引擎或绕过后端权限。
|
|
59
|
+
|
|
60
|
+
## 查询动作
|
|
61
|
+
|
|
62
|
+
### 连接池故障应急入口
|
|
63
|
+
|
|
64
|
+
- 收到 `obtaining a connection from the pool` 时,直接用 `microi_query_system_observability(action=DatabasePools,poolTarget=Both)`;故障池可能阻塞普通 `Capabilities` 或 Managed 引擎,此动作走固定 `/api/Diagnostics/database-pools` 应急协议。要求后端支持 `database-pools/v1`,只更新 MCP 不能安装后端。
|
|
65
|
+
- `microi_manage_system_observability(action=ResetDatabasePools,poolTarget=Both)` 无确认值时只预览。执行必须带同一预览的 `operationId`、`poolIds`、`poolTarget` 和 `confirmExecution=ResetDatabasePools:<operationId>`。预览票据 2 分钟有效;执行前仍复核配置摘要。
|
|
66
|
+
- 请求超时或响应未知,使用查询动作 `DatabasePoolRecovery` 与原 `operationId` 回读,禁止换编号重试。每租户 60 秒冷却;命令期限 90 秒;回执保留 10 分钟,过期编号不能重新执行。
|
|
67
|
+
- 回执逐节点区分 `Pending / Incomplete / PartialFailure / CompletedForRegisteredNodes`。只有最后一项证明已注册节点完成;未升级节点不在覆盖范围,最后还需验证原故障只读接口。不得把当前节点探测成功说成全站恢复。
|
|
68
68
|
- 支持当前租户 MySQL/SQL Server 主、读池;`Both / Write / Read`,相同池去重。已加载的其它租户共享池时拒绝;扩展库和其它驱动明确不支持。池上限、驱动版本、退避和失败码可读,`Opening` 不等于驱动借出数。
|
|
69
|
-
-
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
|
78
|
-
|
|
79
|
-
| `
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
82
|
-
|
|
83
|
-
| `
|
|
84
|
-
|
|
85
|
-
| `
|
|
86
|
-
| `
|
|
87
|
-
| `
|
|
88
|
-
| `
|
|
89
|
-
| `
|
|
90
|
-
| `
|
|
91
|
-
| `
|
|
92
|
-
| `
|
|
93
|
-
| `
|
|
94
|
-
| `
|
|
95
|
-
|
|
96
|
-
`
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
"
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
"
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
- `
|
|
148
|
-
-
|
|
149
|
-
- `
|
|
150
|
-
-
|
|
151
|
-
-
|
|
152
|
-
-
|
|
153
|
-
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
-
|
|
160
|
-
|
|
161
|
-
-
|
|
162
|
-
-
|
|
163
|
-
-
|
|
164
|
-
-
|
|
165
|
-
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
-
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
69
|
+
- `Pools[].MinimumPoolSize/ConnectionLifetimeSeconds` 回读保留策略;`CapacityBudget` 合计当前节点所选去重主/读池的配置最大/最小值,`Scope=CurrentNodeSelectedPools`。未知驱动合计为 null,无池连接单列;不包含其它节点、Quartz、扩展库或外部客户端,不用注册节点数虚构全局总量。多节点池预算须低于实例 max_connections 并保留管理/备份余量。
|
|
70
|
+
- 大量 `Sleep` 不证明泄漏;先比对两个窗口的拒绝增量、历史峰值、活跃事务和连接来源。MySQL 未显式配置的业务池默认 100、最小 0,显式值优先;安装器内存足够推荐 500、低内存降级,但现有数据库不会自动扩容。连接 Lifetime 是归还时淘汰过龄连接,不能当空闲回收期限。
|
|
71
|
+
- 服务继续验证 DiyToken、Redis 有效会话和主库管理员;访问密钥需要 `mcp:admin`。仅鉴权使用有界无池连接,每节点应急请求最多 2 个、连接和命令超时各 5 秒;修复后的探测使用原业务池。不得创建匿名维护引擎或另设万能密码。
|
|
72
|
+
- 不杀事务、不全局清池、不重放 SQL、不自动放大池上限,不以重启数据库/API 作为默认恢复。无有效会话、Redis/主库不可用或内存保护触发时不能绕过防护。持续泄漏、慢 SQL、容量与网络故障仍需定位根因。
|
|
73
|
+
- 此功能属框架运行时应急协议,不新增表/菜单/引擎,不需要发布商城资源;责任同步为 Core/Dos.ORM、MCP、本文档与内嵌知识。验收必须覆盖真实池耗尽、HTTP 撤权/失效会话、两个独立进程、幂等重试、配置漂移与事务存活。
|
|
74
|
+
|
|
75
|
+
`microi_query_system_observability` 支持:
|
|
76
|
+
|
|
77
|
+
| action | 用途 | 关键参数 |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| `Capabilities` | 能力目录与真实边界 | 无 |
|
|
80
|
+
| `Snapshot` | 请求、进程、主机、Docker、队列、诊断和实时网络 | `windowMinutes=1..15`、`top`、`includeHost`、`includeDocker` |
|
|
81
|
+
| `Memory` | 当前节点内存压力、线程池及共享请求槽占用/等待、执行分配、对象类型和采集质量 | 无;必须先核对采集器心跳与存储错误 |
|
|
82
|
+
| `MemoryIncidents` | 当前租户共享事故与本机持久记录摘要;持续线程池积压也会触发留证 | 最近最多 50 条 |
|
|
83
|
+
| `MemoryIncident` | 执行链、代码哈希、CLR 分配栈和退出证据 | 32 位小写十六进制 `incidentId` |
|
|
84
|
+
|
|
85
|
+
| `Logs` | 日志列表和完整详情数据 | `keyword/type/category/source/level/searchMonth/pageIndex/pageSize` |
|
|
86
|
+
| `LogTypes` | 日志类型与数量 | `keyword/searchMonth` |
|
|
87
|
+
| `LogStats` | 总数、错误、警告、慢 SQL、慢执行、异常 | `keyword/searchMonth` |
|
|
88
|
+
| `Signal` | 时间窗内的诊断信号 | `windowSeconds=60..86400` 与日志过滤项 |
|
|
89
|
+
| `Trace` | W3C Trace 时间线 | 32 位十六进制 `traceId` |
|
|
90
|
+
| `ApiRank` | 热点接口、耗时占比、平均/P95、异常率 | `top/apiEngineKey/name` |
|
|
91
|
+
| `AppLogs` | 当前 API 进程日志尾部 | `lines=20..1000` |
|
|
92
|
+
| `PlatformStats` | 表、菜单、接口引擎、租户、用户和排行 | 无 |
|
|
93
|
+
| `SecurityData` | 访问、攻击或封锁记录 | `kind=Access|Attack|Block`、分页 |
|
|
94
|
+
| `TrafficHistory` | MySQL 固定时间桶流量趋势 | `rangeKey`;可选 `dimensionType` |
|
|
95
|
+
| `HistoricalDashboard` | 同一时间范围内的热点接口、IP、帐号、租户、内容类型与请求/流量总览 | `rangeKey=live5|today|yesterday|3d|7d|15d|30d|3m|6m|1y`、`top` |
|
|
96
|
+
| `TrafficDetails` | 跨月大文件、上传下载和可疑传输 MongoDB 明细 | `rangeKey`、`pageIndex/pageSize`;可选 `keyword/transferAction/ip/userId/endpoint` |
|
|
97
|
+
|
|
98
|
+
`Memory` 和事故帧中的 `PressureGlobal*`、`PressureV8Global*` 给出共享槽占用与排队;持续满额排队触发 `SustainedRequestGateWait` 留证。它说明当前节点共享闸门拥堵,需结合租户执行链定位长请求,不能只凭片段数归责某租户。
|
|
99
|
+
请求先取单接口/单租户槽,再取共享 V8/全局槽,避免故障租户在自身槽前排队时占住其它租户的共享容量。不得把 V8.Http 全局默认 600 秒改短来处理单个上游故障;业务需要时按接口明确配置超时。
|
|
100
|
+
|
|
101
|
+
示例:
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"action": "HistoricalDashboard",
|
|
106
|
+
"rangeKey": "30d",
|
|
107
|
+
"top": 15
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"action": "TrafficDetails",
|
|
114
|
+
"rangeKey": "7d",
|
|
115
|
+
"transferAction": "Upload",
|
|
116
|
+
"pageIndex": 1,
|
|
117
|
+
"pageSize": 15
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
所有列表默认按 15 条开始;扩大分页前先增加过滤条件。日志和安全数据每页最多 200 条,Trace 最多 500 条。历史总览由固定聚合桶一次返回有界 TOP,不得循环拉取无时间边界的全量日志。
|
|
122
|
+
|
|
123
|
+
## 安全治理动作
|
|
124
|
+
|
|
125
|
+
`microi_manage_system_observability` 只允许 `BlockIp` 和 `UnblockIp`。第一次不带确认调用只返回 dry-run,不产生写入;确认值必须精确为:
|
|
126
|
+
|
|
127
|
+
```text
|
|
128
|
+
BlockIp:<ip>
|
|
129
|
+
UnblockIp:<ip>
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
封禁前必须核对反向代理、容器网桥、健康检查、办公出口和 NAT。可信后端会再次验证平台管理员身份、IP 格式、本机/未指定/组播限制、租户范围,并写审计日志。不能通过参数指定其它租户,也不能把批量 IP、CIDR、任意表写入或旧菜单删除塞进这个工具。
|
|
133
|
+
|
|
134
|
+
## 数据解释边界
|
|
135
|
+
|
|
136
|
+
1. `Snapshot`、活动请求、最近请求、进程与应用日志是当前 API 节点视角。多节点结论需要逐节点或接入统一遥测平台。
|
|
137
|
+
2. 热点接口的“耗时占比”是窗口总请求耗时贡献,用于定位相关性;它不是逐请求 CPU 核采样,也不等于该接口独占同等 CPU。
|
|
138
|
+
3. HTTP 可归因流量只统计经过 API 中间件的请求体和响应体。网卡、容器 NetIO 还包含 TLS/HTTP 头、重传、数据库、Redis、MongoDB、MQ、对象存储、外部 HTTP、健康检查和同机其它进程。
|
|
139
|
+
4. “未归因流量”只能作为排查线索,不能强行归属给某个帐号、IP 或接口。
|
|
140
|
+
5. IP 必须注明是可信代理解析后的客户端地址还是直接连接地址;代理链未配置正确前不要据此处罚用户。
|
|
141
|
+
6. 进程 CPU“多核原始值”可超过 100%;247.7% 表示约占用 2.48 个逻辑核心。判断整机压力应使用主机归一值并结合持续时间、请求率与热点排行。
|
|
142
|
+
7. 执行累计分配和 EventPipe 抽样不是存活堆或 RSS;父执行包含子调用,不能相加或把最高分配者直接宣布为唯一根因。CLR 栈关联脚本哈希和资源身份,不保证 JavaScript 行号。
|
|
143
|
+
8. MongoDB 驻留内存、WiredTiger 缓存和日志库存储空间分开解释;磁盘大小不能当作进程 RAM。未正常退出只说明检查点未完成正常关闭,不单独证明 OOM。
|
|
144
|
+
|
|
145
|
+
## 关键事故 MySQL 持久化与等待归因
|
|
146
|
+
|
|
147
|
+
- 包含 `critical-incidents/mysql-v1` 的后端将关键事故异步直写当前租户主库 `mci_runtime_incident`,不依赖本地写文件或 Mongo 成功。表和索引必须由【系统日志/监控】官方应用安装;不新增启动 DDL 或环境开关。
|
|
148
|
+
- 持久目录中的事故由独立写库线程每 10 秒分批补写 MySQL,重启后继续;MySQL 版本确认文件与 Mongo 的 `.ack` 独立。核对 `SpoolReplayError`,未挂持久卷且尚未写库的内存队列不在重启恢复保证内。
|
|
149
|
+
- `Memory.RequestWaits` 包含按接口/阶段/目标的 Groups、活动 Samples 和 Recent。HTTP 目标只有主机/端口与路径哈希,不采路径明文、参数或凭据;TraceId 关联执行。Admission 与 Http 是不同计数,不能相加成工作线程数。
|
|
150
|
+
- 事故 `WaitEvidence` 保留分组并发峰值、最长请求样本及最差线程池帧,恢复后的空快照不覆盖现场。各分组 `ObservedAtUtc` 可能不同,不能相加为同一时刻并发量;DiscardedGroups/DiscardedSamples 和 EvidenceTruncated 表示有界取证缺口。
|
|
151
|
+
- `Gate:V8Tenant` 表示租户闸门等待;`AwaitingHttpCompletion` 包含连接/远端处理/接收,不虚构 DNS/TCP 分段。等待超过 10 秒只留证,不改 600 秒默认与显式长超时。
|
|
152
|
+
- 核对 `Evidence.CriticalStorage` 的 AcknowledgedWrites、LastAcknowledgedAtUtc、Pending、DroppedSnapshots、Error;Scope=CurrentNodeAllLoadedTenants 表示这些是节点全部已加载租户的合计,不能据此断言当前租户已写库,必须回读该租户的 MySQL 事故。只有已确认写入才能宣称可跨容器重建读取。MySqlError:1146 提示先核对应用表升级。关系库后备当前仅支持 MySQL,其他驱动明确降级,不能说全部数据库已验收。
|
|
153
|
+
- MySQL 详情标记 `StorageKind=MySqlCriticalEvidence`、RawStacksStoredHere=false;EvidenceTruncated 和 RequestWaits 省略/溢出计数必须报告。MemoryIncidents/MemoryIncident 分别报告 RelationalStorage 与 SharedStorage,Mongo 失败不能掩盖 SQL 成功。
|
|
154
|
+
- 采样与写库使用独立线程。最多 2 个无池连接,连接/命令各 2 秒;失败按租户退避 10 秒。全局最多 64 个合并待写快照,每租户最多 8 个;全局满时从占用最多的租户释放旧快照,新租户仍可进入。核对 MaximumTenantPending、RetryingTenants 与 DroppedSnapshots;容量替换不等于写库确认,旧 spool 不得挤出较新现场。每条 256 KiB、每租户 14 天或最新 512 条,旧快照不能覆盖新证据。
|
|
155
|
+
- 必测:目录不可写 + Mongo 不可用时仍写 MySQL、业务连接池耗尽、单个或多个故障租户填满队列时健康租户仍可写入、跨节点与租户隔离、旧快照重放、线程池饥饿、容器删除后新节点查询。原始栈仍需持久卷;数据库同时故障与尚未确认的强杀窗口不承诺零丢失。
|
|
156
|
+
|
|
157
|
+
## 内存事故留证规范
|
|
158
|
+
|
|
159
|
+
处理内存吃满、OOM、异常分配、长循环或重启丢日志时,必须继续读取 [内存事故排查手册](references/memory-incident-triage.md),按字段与证据质量完成归因,不得仅返回一个热点排行。
|
|
160
|
+
|
|
161
|
+
- 诊断始终独立于 V8 内存/语句保护;不能为了留证默认开启 `V8Limit`,也不能把正常复杂业务报错当成问题已解决。
|
|
162
|
+
- 先核对包含独立采集器的 API 二进制、可写持久 `logs` 卷和本机 .NET 诊断通道;仅升级商城微服务不代表底层已经上线。
|
|
163
|
+
- 每 2 秒检查点与周期分配样本覆盖尚未返回的执行;API 被强杀后由独立采集器保存末段证据,再由重启节点恢复。极快崩溃、线程调度停顿、磁盘满/丢失仍有缺口,不承诺零丢失。
|
|
164
|
+
- 优化版使用执行边界计量与单独后台线程约 200 ms 身份刷新,不挂载诊断专用的 Jint 逐语句 Constraint,也不依赖可能耗尽的业务线程池定时回调。后台事件必须携带原始 OS 线程 Id 和递增版本;运行中长循环的实时分配看 EventPipe 样本,不能把边界累计值的暂时不变或身份刷新误判成业务没有分配/已经取得进展。
|
|
165
|
+
- `Memory` 动作兼容不变;核对 `Executions.ObservationMode/IdentityRegistryOverflowCount/NativeThreadIdentityUnavailableCount/IdentityRefreshFailureCount` 和 `Collector.ObservedIdentityProtocolVersion/BackgroundIdentityRefreshes/RejectedStaleIdentityMarkers`。字段缺失按旧版/未知处理,不按零故障处理。性能数据与完整边界见下方内存诊断参考文件。
|
|
166
|
+
- 共享 Mongo 事故保留 14 天,本机历史预算 256 MiB。原始片段单段上限 64 MiB,保留最近两段,加上正在写入的一段最多 192 MiB;采集主体到 16 MiB 时提前收尾,为 rundown 留出空间,EventPipe 缓冲固定 64 MiB。完整 API 的收尾实测约 35 MiB,不能用小测试进程的片段大小代替平台验收;仍须检查截断、丢事件和离线方法栈。事件 Id 全局唯一,重放幂等且更新版本只前进;不得回退为无界日志/完整对象序列化。
|
|
167
|
+
- 共享存储断开时先保留本机证据,恢复后补传。多节点共享卷的恢复和清理必须尊重仍存活节点及采集器的租约。
|
|
168
|
+
- 查询先报告 `Fresh/LastCaptureError/LostEvents/OverflowSamples`、本机存储错误和待补传状态;指标缺失应显示不可用,不得按零值宣布健康。
|
|
169
|
+
- 整个容器退出后,重启解析器尝试最后两个原始片段。尾段缺方法栈时保留执行身份与对象类型,并补充前段;必须同时报告 `MissingStackSamples`、`Truncated` 与 `Evidence.StackQuality`,不得把部分恢复称为完整栈。
|
|
170
|
+
- 高 RSS 但没有分配热点时,继续区分长期保留、非托管和数据库进程;受控堆分析属于后续证据,不能伪称分配采样已经给出存活对象根因。
|
|
171
|
+
|
|
172
|
+
## 隐私与权限
|
|
173
|
+
|
|
174
|
+
- 只允许平台可观测性管理员读取敏感运行数据或治理 IP;通常要求 `Level >= 9999`,最终以可信后端判定为准。
|
|
175
|
+
- 不采集或持久化请求正文、响应正文、QueryString、Cookie、Authorization、Token、密码、Secret 或 API Key。
|
|
176
|
+
- 文件流量只记录清洗后的文件名/扩展名/数量/字节,不记录文件内容。
|
|
177
|
+
- 日志详情由可信后端递归脱敏;AI 回答仍要避免复述连接串、内部路径、个人信息或可用于登录的材料。
|
|
178
|
+
- 对外分享截图前检查帐号、IP、Trace、内部域名、物理路径和业务数据;需要时使用测试数据重新截图。
|
|
179
|
+
|
|
180
|
+
## 高性能存储规范
|
|
181
|
+
|
|
182
|
+
- 请求热路径只做原子计数和有硬上限的分钟桶聚合;端点、IP、帐号、租户、内容类型限制基数并保留 TOP N。
|
|
183
|
+
- 普通高频明细只保留短窗口内存;错误、慢请求、大文件和可疑传输进入有界队列,异步批量写 MongoDB。
|
|
182
184
|
- 长期趋势使用 MySQL 固定时间桶和确定性幂等键批量 upsert;5 分钟桶保留 48 小时、小时桶保留 45 天、天桶保留 400 天。页面不能每次扫描 Mongo 明细重新聚合总览。
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
-
|
|
190
|
-
-
|
|
191
|
-
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
-
|
|
201
|
-
-
|
|
202
|
-
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
-
|
|
220
|
-
-
|
|
221
|
-
- Aliyun
|
|
222
|
-
-
|
|
223
|
-
-
|
|
224
|
-
-
|
|
225
|
-
-
|
|
226
|
-
-
|
|
227
|
-
-
|
|
228
|
-
-
|
|
229
|
-
-
|
|
230
|
-
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
-
|
|
234
|
-
-
|
|
235
|
-
-
|
|
236
|
-
-
|
|
237
|
-
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
-
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
-
|
|
246
|
-
-
|
|
247
|
-
-
|
|
248
|
-
-
|
|
185
|
+
- 流量桶的 `BucketStartUtc` / `LastSeenAtUtc` 是官方 `varchar(25)` UTC 文本,固定以 `yyyy-MM-dd HH:mm:ss` 19 字符参数写入;禁止直接传含微秒的 `DateTime`,驱动可能生成 26 字符而拒绝整桶。失败回滚、待桶重试和限速告警保持;已捕获的写入警告不能直接归因 `StopHost`,先核对退出码/宿主事件。不通过扩大字段或写生产数据库掩盖序列化根因。
|
|
186
|
+
- 队列必须有硬容量、故障 spool/WAL、停机排空和幂等重放;禁止无界 `ConcurrentQueue` 或逐请求同步写 Mongo/MySQL。
|
|
187
|
+
- Redis 适合短时热点结果、租约和限流;缓存 Key 包含租户、动作和过滤摘要,写入或治理后主动失效,并保留短 TTL 防止永久陈旧。
|
|
188
|
+
|
|
189
|
+
## 接口引擎归因规范
|
|
190
|
+
|
|
191
|
+
- PC、UniApp、内置微服务、MCP 和应用包中的固定接口必须调用 `/apiengine/{ApiEngineKey}` 或该引擎唯一 `ApiAddress`;新增代码禁止调用 `/api/ApiEngine/Run`。
|
|
192
|
+
- SDK 的普通 `ApiEngine.Run` 必须自动生成真实引擎路径;旧通用入口只能封装在显式 `RunLegacy` 中,供不能立即升级的历史客户端使用。
|
|
193
|
+
- 监控中保留通用入口的兼容识别,但不能依赖读取请求正文才能知道 Key;真实路由、访问日志、限流和流量排行应直接显示接口引擎 Key。
|
|
194
|
+
- 代码审计要区分运行调用与文档/兼容测试;发布门至少扫描 Microi.Client、UniApp、微服务源码、MCP 与应用包,确保没有新增固定业务依赖。
|
|
195
|
+
|
|
196
|
+
需要压测或修改热路径时同时读取 `../performance-testing/SKILL.md`;排查 V8/日志写法时读取 `../v8-debugging/SKILL.md`。
|
|
197
|
+
|
|
198
|
+
## AI 诊断顺序
|
|
199
|
+
|
|
200
|
+
### 宿主数据库进程高 CPU
|
|
201
|
+
|
|
202
|
+
- `Host.Processes` 确认 `mysqld` 高 CPU 后,继续用 `microi_query_external_database` 对已授权实例只读查询实际 `performance_schema`/`information_schema`。先核对数据库版本与可用列;使用规范化 `DIGEST_TEXT`,不回传连接串或含业务值的 SQL 正文。
|
|
203
|
+
- 至少间隔一个业务周期采集两次 `events_statements_summary_by_digest`,计算 `COUNT_STAR/SUM_TIMER_WAIT/SUM_ROWS_EXAMINED/SUM_SELECT_SCAN` 差值;累计总耗时与并发墙钟时间不等于 CPU。当前页面 SQL 很快不能排除后台任务在同库扫描。
|
|
204
|
+
- 核对实际索引与锁/事务状态。典型例子是 `mic_data_version` 缺少 `(TableId,TableRowId,CreateTime)`,定时任务运行时间刷新又不断生成版本,形成越来越重的历史扫描。索引由所属应用声明,新旧库都应交付;在线修复后必须回读并观察后续 digest 和同窗宿主进程。
|
|
205
|
+
- 原生建索引工具若不能表达生产所需的在线算法、锁等待上限,应通过受控管理员数据库工具预览固定语句,再按已有明确修复授权执行并回读;不得因响应超时重复建索引,不做表重建或删除历史来掩盖问题。
|
|
206
|
+
|
|
207
|
+
1. 先查 `Capabilities`,确认当前版本和边界。
|
|
208
|
+
2. 查 `Snapshot`,记录节点、窗口、请求率、活动请求、CPU/内存、队列、HTTP 流量与未归因残差。
|
|
209
|
+
内存问题同时查 `Memory`、`MemoryIncidents`、`MemoryIncident`,先确定采集健康,再关联接口/V8 事件、表/工作流节点、代码哈希和 Trace。
|
|
210
|
+
3. 查 `ApiRank` 和 `TrafficHistory` 的 Endpoint/IP/User/Tenant/ContentType 维度,区分“计算慢”与“传输大”;再用 `TrafficDetails` 定位具体帐号/匿名、IP、接口、文件元数据和 TraceId。
|
|
211
|
+
4. 按异常接口或 TraceId 查 `Logs`、`Signal`、`Trace`;先处理时间线中的首个根因。
|
|
212
|
+
5. 对慢 SQL 核对执行计划、索引、返回字段、分页、排序/Join 和锁等待;不要先盲目加 Redis。
|
|
213
|
+
6. 对高频只读结果评估短 TTL Redis,并明确更新/删除时的失效路径;对写接口先批量化 I/O、缩小事务和消除逐行远程调用。
|
|
214
|
+
7. 对匿名上传、大响应、重复轮询或攻击信号先核对业务合法性,再限流、对象存储直传/CDN、Range、压缩或封禁。
|
|
215
|
+
8. 优化后用相同窗口与负载复测 P50/P95/P99、RPS、错误率、CPU、内存、分配率和网络字节,不能只凭单次页面刷新下结论。
|
|
216
|
+
|
|
217
|
+
## 扩展与商城交付
|
|
218
|
+
|
|
219
|
+
### CDN 模块
|
|
220
|
+
|
|
221
|
+
- 现有 `microi-platform-service` 的系统日志页增加 CDN Tab;不另建同名应用。固定管理员入口为 `mci-cdn-manager`,内部 `mci-cdn-core / mci-cdn-aliyun / mci-cdn-worker` 均 `StopHttp=1`,四个引擎归 `app.microi.sys-log` 的 Managed 资源。
|
|
222
|
+
- 通过当前租户 MCP 的 `microi_run_engine` 先查 `Capabilities`,再使用 `Domains / Trend / ReportList / Reports / Sls / Configs / Config / Rules / Operations`。现有执行、源码、元数据及发布工具已覆盖此模块,不为 CDN 新增旁路鉴权或通用 HTTP 代理。
|
|
223
|
+
- 凭据优先级为当前租户 `Integration.Cdn.Aliyun.*` 完整私密组 → `Integration.Dns.Aliyun.*` 私密组 → 当前租户 SaaS 的兼容 DNS 字段。半组配置必须失败,不能混组或回退主租户。新增密钥写 `mci_system_setting` Secret,由可信后端解密到后端 `ServerPrivateSettings`;不返回原文。
|
|
224
|
+
- Aliyun 运营报表 ID:1/3 URL 请求/流量、5/7 Referer 请求/流量、9/11 回源 URL 请求/流量、13/15 IP 请求/流量、17 域名、19 PV/UV、21 地区、23 运营商。未订阅不能伪造成零流量,也不能将历史 TOP 当作分钟级规则数据;未知流量单位保持原始值。
|
|
225
|
+
- 报表参数按类型分开:只有 13/15 传非空 Area,1/3/9/11 传非空 HttpCode,21/23 传 IsOverseas;17 不传 DomainName。不得统一附加无关或空筛选项,否则阿里云返回 InvalidParameter。内嵌调用的 V8.Param 可能是 CLR JObject,不向它写入配置对象,创建独立 JS 请求并从服务端读取接入配置。
|
|
226
|
+
- SLS 只用固定查询模板与已校验域名/项目/地域/Logstore;自动判断基于 `remote_ip`、`response_size` 字节以及完整窗口、采集延迟、连续命中、白名单、冷却与限额。私网/环回/链路本地/组播和与保护 CIDR 重叠的地址不封禁。动态阈值须满足历史样本数,默认观察。
|
|
227
|
+
- 云端变更先 `Preview` 再 `Submit`,请求号幂等、配置快照比较、独立持久化状态和租约不可省略。超时/崩溃记 Unknown 并 `Reconcile`,不能自动重发不确定写入。到期只删除本应用新增条目,重叠封禁延后回收。
|
|
228
|
+
- CMS 历史公有媒体的专用动作是 `RefreshCmsMedia/CmsRefreshStatus`;先验证 Capabilities 的 `CmsMediaRefresh/CmsRefreshTaskReadback`。管理员只能提交 `RendId/CmsTaskId`;服务端必须从当前租户已 Offline 的衍生、同站/同版本/同 InputHash 的原源删除检查点、可信 FileServer 与 `/当前租户/mci-cms-public/` 路径计算唯一旧 URL。拒绝任意 URL/目录/正则/客户端任务 Id/云密钥;普通 CMS 角色不能进入管理员入口,内部调用仍须重查权威撤销记录。
|
|
229
|
+
- 云刷新前独立提交操作请求键、租约、原任务快照和 `CloudWriteStarted`;未知只读回原任务,不重复云写入。缺失 TaskId 仅可依据原 URL、执行时间与前快照恢复唯一新任务,歧义保持 Unknown。任务全部 Complete/100%、原 URL 严格 HTTP404 后,CMS 还必须重查源对象不存在和当前发布权限,并在站点锁内消费当前租户权威 outbox。客户端 CacheVerified 标记、隐藏前台、源404、刷新受理或加随机参数404均不能作撤权成功。用户保存/下载副本不可召回。
|
|
230
|
+
- 精确文件刷新通常约5~6分钟;单 URL 入口保留默认每日10,000文件刷新额度、50QPS写入与5QPS任务读取边界,任务历史仅3天且同秒同 URL 任务可能合并,不假定请求与 TaskId 一一对应。刷新本身无独立费用,回源对象存储请求/流量仍可能计费。以阿里云 [RefreshObjectCaches](https://www.alibabacloud.com/help/en/cdn/developer-reference/api-cdn-2018-05-10-refreshobjectcaches)、[DescribeRefreshTasks](https://www.alibabacloud.com/help/en/cdn/developer-reference/api-cdn-2018-05-10-describerefreshtasks)及[刷新预热说明](https://help.aliyun.com/zh/cdn/user-guide/refresh-and-prefetch/)核对实际额度。验收先 warm 自有测试旧 URL 至真实缓存命中,再原请求撤回,保留源删除后旧 URL 仍200的红证、云任务与原 URL404绿证;Node模型通过不能替代真实云端。
|
|
231
|
+
- 单域名 IP 黑名单与全账号海量封禁必须分开;后者需阿里云开通,须明确 `ALL_CDN_DOMAINS`,不在验收时自动开通付费服务。`limit_rate` 是至少 100 KB/s 的下载速率,不是 QPS;日志规则也不等于实时边缘 WAF。
|
|
232
|
+
- `mci-cdn-security-tick` 回收到期封禁;每条启用规则通过 `V8.Method.SaveScheduleJob` 创建错峰任务并使用独立数据库租约。安装包包含基础调度及三张表的结构,不带云密钥、规则实例、白名单或任何测试 IP。
|
|
233
|
+
- 验收分开记录 Node 行为测试、真实管理员/云端只读、文档保留 IP 的受控封禁/到期恢复、真实宿主页面、包正文 SHA 与安装。日志未投递或海量服务未开通时,如实标为待配置,不伪造云端通过。
|
|
234
|
+
|
|
235
|
+
- 普通查询和汇总优先在 `mci-system-observability-query` 接口引擎编排。
|
|
236
|
+
- 历史日志兼容入口为 `POST/GET /api/SysLog/AddSysLog`;它只接受当前 DiyToken 用户和租户上下文,返回进入异步持久化流程不等于日志已经落库,必须以后续记录回读作为验收事实。
|
|
237
|
+
- 只有接口引擎缺少宿主进程、Docker、Mongo 聚合、安全运行态等可复用底层能力时,才扩展最小 V8 原子方法;Controller 不承载业务编排。
|
|
238
|
+
- 官方引擎声明 `ResourcePolicies.ApiEngines=Managed`,由本次已校验包正文覆盖其拥有的资源;客户扩展使用独立 Key 或 `CreateIfMissing`,既有扩展不被覆盖。不得把 Managed 的旧本地改动当作拒绝应用升级的理由,也不得扩大到无关资源。
|
|
239
|
+
- 按应用发布契约交付表、字段、索引/DDL、接口引擎、菜单、版本日志和微服务运行产物;私有源码由源码同步链交付。`DatabaseOnly/SourceNotIncluded` 必须如实标识,不能声称商城包包含全部源码。安装后回读固定版本快照并在真实页面验收。
|
|
240
|
+
- 后端框架和商城应用是两条升级链:只升级其中一条不能证明功能完整。目标端应先升级兼容框架,再安装/更新最新【系统日志/监控】应用。
|
|
241
|
+
|
|
242
|
+
## 最低验收
|
|
243
|
+
|
|
244
|
+
- 系统日志位于首个 Tab;统计、筛选、15 条默认分页、搜索、详情、Trace 时间线均可用。
|
|
245
|
+
- 日志详情使用平台级 `Teleport to="body"` 遮罩整个系统框架;标题/副标题最多两行,异常标红并提供原因与解决方案。
|
|
246
|
+
- 八个 Tab 均跟随主题;动画只使用 transform/opacity 等低成本属性,页面隐藏或 `prefers-reduced-motion` 时暂停。
|
|
247
|
+
- MCP 能发现两个专用工具;`Capabilities`、日志/流量分页、Trace 缺参拦截、IP dry-run、错误确认和成功审计均有自动测试。
|
|
248
|
+
- 通过实际打包后的 MCP 执行 `initialize`、`tools/list`、`describe_tool` 和 Memory 查询,确认三个动作及 `incidentId` 校验;源码测试通过不能代替发行包验收。旧后端失败保留原始 Code/Msg,不能伪造为空结果或自动开启 V8 限制。
|
|
249
|
+
- 对请求热路径做开关前后压测,确认观测开启后 P95/P99、CPU、内存和分配率没有不可接受回退;故障 Mongo 不得阻塞业务请求。
|
|
250
|
+
- 多节点、网卡重置/回绕、服务重启、匿名/登录、大上传/下载、敏感字段脱敏、时间桶幂等和缓存失效均有验证证据。
|
|
251
|
+
- 内存专项至少覆盖:V8 限制关闭的复杂执行、真实 Kestrel TraceId、500 个活动请求、异步嵌套归属、独立采集栈、Mongo 故障、执行中强杀、改名重启、跨节点补传、旧快照重放和租户隔离。
|