@fx-data/ai-diagnostics 0.1.20261026070913 → 0.1.20261107142011

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.
Files changed (254) hide show
  1. package/AGENT_SETUP.md +9 -6
  2. package/README.md +5 -5
  3. package/bin/core-ai.mjs +241 -25
  4. package/content/AGENTS.md +37 -57
  5. package/content/README.md +10 -41
  6. package/content/docs/architecture.md +45 -74
  7. package/content/docs/diagnostic-feedback.md +20 -38
  8. package/content/docs/diagnostic-report.md +19 -46
  9. package/content/docs/index.md +40 -128
  10. package/content/docs/scenario-guide.md +34 -52
  11. package/content/knowledge/README.md +49 -0
  12. package/content/knowledge/cases/README.md +60 -0
  13. package/content/knowledge/cases/dashboard-parameter-deep-binding.md +32 -0
  14. package/content/knowledge/common/README.md +31 -0
  15. package/content/knowledge/common/concepts.md +49 -0
  16. package/content/knowledge/common/{knowledge-applicability.md → conclusions.md} +10 -6
  17. package/content/knowledge/common/queries.md +98 -0
  18. package/content/knowledge/common/signals.md +58 -0
  19. package/content/knowledge/common/topics/baseline-comparison.md +23 -0
  20. package/content/knowledge/common/topics/large-results.md +12 -0
  21. package/content/knowledge/common/topics/linked-traces.md +11 -0
  22. package/content/knowledge/common/topics/query-budget.md +18 -0
  23. package/content/knowledge/common/topics/query-example.md +69 -0
  24. package/content/knowledge/common/topics/setup-signoz-mcp.md +102 -0
  25. package/content/knowledge/common/topics/start-and-anchors.md +19 -0
  26. package/content/knowledge/common/workflow.md +22 -0
  27. package/content/knowledge/component/README.md +26 -0
  28. package/content/knowledge/component/concepts.md +22 -0
  29. package/content/knowledge/component/conclusions.md +11 -0
  30. package/content/knowledge/component/queries.md +7 -0
  31. package/content/knowledge/component/signals.md +75 -0
  32. package/content/knowledge/component/workflow.md +23 -0
  33. package/content/knowledge/dashboard/README.md +31 -0
  34. package/content/knowledge/dashboard/concepts.md +26 -0
  35. package/content/knowledge/dashboard/conclusions.md +21 -0
  36. package/content/knowledge/dashboard/queries.md +69 -0
  37. package/content/knowledge/dashboard/signals.md +76 -0
  38. package/content/knowledge/dashboard/topics/component-comparison.md +9 -0
  39. package/content/knowledge/dashboard/topics/dynamic-fields.md +21 -0
  40. package/content/knowledge/dashboard/topics/filter-tree.md +35 -0
  41. package/content/knowledge/dashboard/topics/name-binding.md +9 -0
  42. package/content/knowledge/dashboard/workflow.md +35 -0
  43. package/content/knowledge/dataset/README.md +27 -0
  44. package/content/knowledge/dataset/concepts.md +30 -0
  45. package/content/knowledge/dataset/conclusions.md +11 -0
  46. package/content/knowledge/dataset/queries.md +7 -0
  47. package/content/knowledge/dataset/signals.md +61 -0
  48. package/content/knowledge/dataset/topics/steps.md +59 -0
  49. package/content/knowledge/dataset/workflow.md +27 -0
  50. package/content/knowledge/engine/README.md +27 -0
  51. package/content/knowledge/engine/concepts.md +80 -0
  52. package/content/knowledge/engine/conclusions.md +49 -0
  53. package/content/knowledge/engine/queries.md +117 -0
  54. package/content/knowledge/engine/signals.md +73 -0
  55. package/content/knowledge/engine/topics/metric-fields.md +104 -0
  56. package/content/knowledge/engine/topics/patterns.md +50 -0
  57. package/content/knowledge/engine/workflow.md +20 -0
  58. package/content/knowledge/signal-index.md +117 -0
  59. package/content/knowledge/update/README.md +39 -0
  60. package/content/knowledge/update/concepts.md +93 -0
  61. package/content/knowledge/update/conclusions.md +59 -0
  62. package/content/knowledge/update/queries.md +103 -0
  63. package/content/knowledge/update/signals.md +57 -0
  64. package/content/knowledge/update/topics/correlations.md +63 -0
  65. package/content/knowledge/update/topics/discover-executions.md +31 -0
  66. package/content/knowledge/update/topics/events-execution.md +136 -0
  67. package/content/knowledge/update/topics/events-intake.md +102 -0
  68. package/content/knowledge/update/topics/events-outcome.md +163 -0
  69. package/content/knowledge/update/topics/lifecycle.md +58 -0
  70. package/content/knowledge/update/topics/scene-producers.md +258 -0
  71. package/content/knowledge/update/workflow.md +29 -0
  72. package/content-manifest.json +73 -192
  73. package/package.json +2 -2
  74. package/content/.agents/skills/analyze-analysis-table-update-runtime/SKILL.md +0 -35
  75. package/content/.agents/skills/analyze-analysis-table-update-runtime/agents/openai.yaml +0 -7
  76. package/content/.agents/skills/analyze-analysis-table-update-runtime/references/discover-update-executions.md +0 -34
  77. package/content/.agents/skills/analyze-analysis-table-update-runtime/references/update-diagnostic-contract.md +0 -101
  78. package/content/.agents/skills/analyze-engine-metric/SKILL.md +0 -76
  79. package/content/.agents/skills/analyze-engine-metric/agents/openai.yaml +0 -13
  80. package/content/.agents/skills/analyze-engine-metric/scripts/analyze_engine_metric.py +0 -270
  81. package/content/.agents/skills/analyze-engine-metric/scripts/engine_metric_analysis/__init__.py +0 -11
  82. package/content/.agents/skills/analyze-engine-metric/scripts/engine_metric_analysis/metric_analyzer.py +0 -791
  83. package/content/.agents/skills/analyze-engine-metric/scripts/engine_metric_analysis/signoz_extract.py +0 -278
  84. package/content/.agents/skills/diagnose-component-performance/SKILL.md +0 -52
  85. package/content/.agents/skills/diagnose-component-performance/agents/openai.yaml +0 -7
  86. package/content/.agents/skills/diagnose-component-performance/references/experience.md +0 -34
  87. package/content/.agents/skills/diagnose-dashboard-performance/SKILL.md +0 -92
  88. package/content/.agents/skills/diagnose-dashboard-performance/agents/openai.yaml +0 -7
  89. package/content/.agents/skills/diagnose-dashboard-performance/references/experience.md +0 -63
  90. package/content/.agents/skills/diagnose-dataset-performance/SKILL.md +0 -52
  91. package/content/.agents/skills/diagnose-dataset-performance/agents/openai.yaml +0 -7
  92. package/content/.agents/skills/diagnose-dataset-performance/references/experience.md +0 -33
  93. package/content/.agents/skills/diagnose-performance/SKILL.md +0 -77
  94. package/content/.agents/skills/diagnose-performance/agents/openai.yaml +0 -7
  95. package/content/.agents/skills/diagnose-update-performance/SKILL.md +0 -55
  96. package/content/.agents/skills/diagnose-update-performance/agents/openai.yaml +0 -7
  97. package/content/.agents/skills/diagnose-update-performance/references/experience.md +0 -47
  98. package/content/.agents/skills/setup-signoz-mcp/SKILL.md +0 -30
  99. package/content/.agents/skills/setup-signoz-mcp/agents/openai.yaml +0 -7
  100. package/content/.agents/skills/setup-signoz-mcp/references/installation.md +0 -75
  101. package/content/.agents/skills/setup-signoz-mcp/references/windows-artifact.md +0 -14
  102. package/content/docs/npm-cli.md +0 -202
  103. package/content/docs/roadmap.md +0 -44
  104. package/content/docs/skill-writing-guide.md +0 -65
  105. package/content/knowledge/common/signoz-environments.json +0 -52
  106. package/content/knowledge/common/signoz-environments.md +0 -55
  107. package/content/knowledge/common/signoz-query-example.md +0 -41
  108. package/content/knowledge/common/signoz-query-policy.md +0 -145
  109. package/content/knowledge/common/trace-routing.md +0 -63
  110. package/content/knowledge/component/observability.md +0 -60
  111. package/content/knowledge/dashboard/observability.md +0 -168
  112. package/content/knowledge/dashboard/query-examples.md +0 -63
  113. package/content/knowledge/dataset/observability.md +0 -68
  114. package/content/knowledge/engine/metric-artifacts.md +0 -25
  115. package/content/knowledge/engine/metric-retrieval.md +0 -107
  116. package/content/knowledge/engine/metric-semantics.md +0 -172
  117. package/content/knowledge/engine/performance-patterns.md +0 -86
  118. package/content/knowledge/update/diagnostic/manifest.json +0 -209
  119. package/content/knowledge/update/diagnostic/observability/edges/edge-attempt-to-capacity-deferral.json +0 -17
  120. package/content/knowledge/update/diagnostic/observability/edges/edge-attempt-to-lock-requeue.json +0 -18
  121. package/content/knowledge/update/diagnostic/observability/edges/edge-attempt-to-merge.json +0 -17
  122. package/content/knowledge/update/diagnostic/observability/edges/edge-candidate-to-effective-root.json +0 -16
  123. package/content/knowledge/update/diagnostic/observability/edges/edge-capacity-deferral-to-attempt.json +0 -16
  124. package/content/knowledge/update/diagnostic/observability/edges/edge-chain-node-to-execution-detail.json +0 -18
  125. package/content/knowledge/update/diagnostic/observability/edges/edge-dlx-recovery-to-attempt.json +0 -16
  126. package/content/knowledge/update/diagnostic/observability/edges/edge-effective-execution-to-listener-before.json +0 -21
  127. package/content/knowledge/update/diagnostic/observability/edges/edge-effective-root-to-chain.json +0 -17
  128. package/content/knowledge/update/diagnostic/observability/edges/edge-engine-task-to-primary-result.json +0 -17
  129. package/content/knowledge/update/diagnostic/observability/edges/edge-execution-detail-to-publication.json +0 -16
  130. package/content/knowledge/update/diagnostic/observability/edges/edge-init-recovery-to-publication.json +0 -16
  131. package/content/knowledge/update/diagnostic/observability/edges/edge-listener-complete-to-child-release.json +0 -21
  132. package/content/knowledge/update/diagnostic/observability/edges/edge-listener-to-derived-chain.json +0 -21
  133. package/content/knowledge/update/diagnostic/observability/edges/edge-load-decision-to-load-operation.json +0 -16
  134. package/content/knowledge/update/diagnostic/observability/edges/edge-load-operation-to-engine-task.json +0 -17
  135. package/content/knowledge/update/diagnostic/observability/edges/edge-lock-requeue-to-attempt.json +0 -16
  136. package/content/knowledge/update/diagnostic/observability/edges/edge-logical-parent-to-child.json +0 -18
  137. package/content/knowledge/update/diagnostic/observability/edges/edge-merge-member-to-effective-execution.json +0 -18
  138. package/content/knowledge/update/diagnostic/observability/edges/edge-merge-to-load-decision.json +0 -17
  139. package/content/knowledge/update/diagnostic/observability/edges/edge-no-load-to-primary-result.json +0 -16
  140. package/content/knowledge/update/diagnostic/observability/edges/edge-primary-result-to-child-frontier.json +0 -18
  141. package/content/knowledge/update/diagnostic/observability/edges/edge-primary-result-to-listener.json +0 -23
  142. package/content/knowledge/update/diagnostic/observability/edges/edge-publication-to-attempt.json +0 -16
  143. package/content/knowledge/update/diagnostic/observability/edges/edge-ready-recovery-to-publication.json +0 -16
  144. package/content/knowledge/update/diagnostic/observability/edges/edge-request-to-candidate-root.json +0 -16
  145. package/content/knowledge/update/diagnostic/observability/identity-units/candidate-root.json +0 -13
  146. package/content/knowledge/update/diagnostic/observability/identity-units/dag-node.json +0 -14
  147. package/content/knowledge/update/diagnostic/observability/identity-units/effective-root.json +0 -14
  148. package/content/knowledge/update/diagnostic/observability/identity-units/engine-task.json +0 -13
  149. package/content/knowledge/update/diagnostic/observability/identity-units/execution-attempt.json +0 -12
  150. package/content/knowledge/update/diagnostic/observability/identity-units/execution-detail.json +0 -13
  151. package/content/knowledge/update/diagnostic/observability/identity-units/listener-invocation.json +0 -11
  152. package/content/knowledge/update/diagnostic/observability/identity-units/load-decision.json +0 -12
  153. package/content/knowledge/update/diagnostic/observability/identity-units/load-operation.json +0 -11
  154. package/content/knowledge/update/diagnostic/observability/identity-units/logical-dag-edge.json +0 -11
  155. package/content/knowledge/update/diagnostic/observability/identity-units/merge-decision.json +0 -12
  156. package/content/knowledge/update/diagnostic/observability/identity-units/node-primary-result.json +0 -12
  157. package/content/knowledge/update/diagnostic/observability/identity-units/queue-publication.json +0 -11
  158. package/content/knowledge/update/diagnostic/observability/identity-units/requeue.json +0 -11
  159. package/content/knowledge/update/diagnostic/observability/identity-units/update-chain.json +0 -13
  160. package/content/knowledge/update/diagnostic/observability/identity-units/update-request.json +0 -12
  161. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-after-commit-delivery.json +0 -131
  162. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-attempt-consumed.json +0 -175
  163. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-candidate-root-filter.json +0 -119
  164. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-capacity-deferred.json +0 -121
  165. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-child-release.json +0 -146
  166. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-dlx-recovery.json +0 -100
  167. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-effective-root-selection.json +0 -111
  168. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-engine-handoff.json +0 -171
  169. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-execution-frontier-persisted.json +0 -115
  170. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-init-recovery.json +0 -93
  171. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-intent-accepted.json +0 -151
  172. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-listener-derived-chain.json +0 -112
  173. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-listener-invocation.json +0 -154
  174. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-load-decision.json +0 -155
  175. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-load-operation.json +0 -108
  176. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-lock-requeued.json +0 -108
  177. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-logical-dependency-expansion.json +0 -129
  178. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-merge-decision.json +0 -174
  179. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-primary-node-result.json +0 -318
  180. package/content/knowledge/update/diagnostic/observability/lookups/analysis-update-ready-recovery.json +0 -92
  181. package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-business-attempt.json +0 -33
  182. package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-capacity-cycle.json +0 -31
  183. package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-child-release.json +0 -32
  184. package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-commit-publication.json +0 -29
  185. package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-control-planning.json +0 -30
  186. package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-engine-task.json +0 -27
  187. package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-listener-callback.json +0 -27
  188. package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-load-operation.json +0 -27
  189. package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-lock-cycle.json +0 -31
  190. package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-main-queue-wait.json +0 -32
  191. package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-merge-evaluation.json +0 -29
  192. package/content/knowledge/update/diagnostic/observability/performance-segments/analysis-update-segment-parent-dependency-wait.json +0 -31
  193. package/content/knowledge/update/diagnostic/observability-index.json +0 -558
  194. package/content/knowledge/update/diagnostic/recipe-index.json +0 -85
  195. package/content/knowledge/update/diagnostic/recipes/dag-chain.json +0 -676
  196. package/content/knowledge/update/diagnostic/recipes/performance-window.json +0 -1128
  197. package/content/knowledge/update/diagnostic/recipes/scene-origin-async-message-or-callback.json +0 -438
  198. package/content/knowledge/update/diagnostic/recipes/scene-origin-derived-update-chain.json +0 -510
  199. package/content/knowledge/update/diagnostic/recipes/scene-origin-direct-service-call.json +0 -438
  200. package/content/knowledge/update/diagnostic/recipes/scene-origin-http.json +0 -438
  201. package/content/knowledge/update/diagnostic/recipes/scene-origin-internal-event.json +0 -438
  202. package/content/knowledge/update/diagnostic/recipes/scene-origin-job.json +0 -438
  203. package/content/knowledge/update/diagnostic/recipes/scene-origin-recovery-or-migration.json +0 -438
  204. package/content/knowledge/update/diagnostic/recipes/table-history.json +0 -508
  205. package/content/knowledge/update/diagnostic/recipes/table-in-chain.json +0 -595
  206. package/content/knowledge/update/diagnostic/scene-index.json +0 -252
  207. package/content/knowledge/update/diagnostic/scenes/active.json +0 -47
  208. package/content/knowledge/update/diagnostic/scenes/add.json +0 -140
  209. package/content/knowledge/update/diagnostic/scenes/agent.json +0 -20
  210. package/content/knowledge/update/diagnostic/scenes/archive.json +0 -32
  211. package/content/knowledge/update/diagnostic/scenes/auth-change.json +0 -116
  212. package/content/knowledge/update/diagnostic/scenes/call-back.json +0 -32
  213. package/content/knowledge/update/diagnostic/scenes/case-install.json +0 -20
  214. package/content/knowledge/update/diagnostic/scenes/case-replace.json +0 -7
  215. package/content/knowledge/update/diagnostic/scenes/cdc-schedule.json +0 -20
  216. package/content/knowledge/update/diagnostic/scenes/compute-model.json +0 -20
  217. package/content/knowledge/update/diagnostic/scenes/copy-data.json +0 -32
  218. package/content/knowledge/update/diagnostic/scenes/corp-linked.json +0 -7
  219. package/content/knowledge/update/diagnostic/scenes/corp-member-add.json +0 -20
  220. package/content/knowledge/update/diagnostic/scenes/corp-member-del.json +0 -7
  221. package/content/knowledge/update/diagnostic/scenes/corp-member-modify.json +0 -32
  222. package/content/knowledge/update/diagnostic/scenes/corp-member-sync.json +0 -152
  223. package/content/knowledge/update/diagnostic/scenes/corp-setting-member-rename.json +0 -152
  224. package/content/knowledge/update/diagnostic/scenes/corp-setting.json +0 -20
  225. package/content/knowledge/update/diagnostic/scenes/cross-project-allow.json +0 -32
  226. package/content/knowledge/update/diagnostic/scenes/default.json +0 -32
  227. package/content/knowledge/update/diagnostic/scenes/del.json +0 -20
  228. package/content/knowledge/update/diagnostic/scenes/dynamic-time.json +0 -20
  229. package/content/knowledge/update/diagnostic/scenes/edit.json +0 -92
  230. package/content/knowledge/update/diagnostic/scenes/excel-append.json +0 -44
  231. package/content/knowledge/update/diagnostic/scenes/excel-save.json +0 -32
  232. package/content/knowledge/update/diagnostic/scenes/folder-copy.json +0 -32
  233. package/content/knowledge/update/diagnostic/scenes/global.json +0 -56
  234. package/content/knowledge/update/diagnostic/scenes/handover.json +0 -32
  235. package/content/knowledge/update/diagnostic/scenes/history-handle.json +0 -20
  236. package/content/knowledge/update/diagnostic/scenes/manual-update.json +0 -44
  237. package/content/knowledge/update/diagnostic/scenes/migration.json +0 -20
  238. package/content/knowledge/update/diagnostic/scenes/param-change.json +0 -20
  239. package/content/knowledge/update/diagnostic/scenes/polars-error.json +0 -32
  240. package/content/knowledge/update/diagnostic/scenes/preview-exception.json +0 -20
  241. package/content/knowledge/update/diagnostic/scenes/preview-invalid.json +0 -20
  242. package/content/knowledge/update/diagnostic/scenes/project-excel-move.json +0 -20
  243. package/content/knowledge/update/diagnostic/scenes/re-check.json +0 -7
  244. package/content/knowledge/update/diagnostic/scenes/replace.json +0 -20
  245. package/content/knowledge/update/diagnostic/scenes/rollback.json +0 -68
  246. package/content/knowledge/update/diagnostic/scenes/save-as.json +0 -44
  247. package/content/knowledge/update/diagnostic/scenes/schedu.json +0 -56
  248. package/content/knowledge/update/diagnostic/scenes/table-move-other-workspace.json +0 -20
  249. package/content/knowledge/update/diagnostic/scenes/user-holder-to-normal.json +0 -20
  250. package/content/knowledge/update/observability.md +0 -16
  251. package/content/knowledge/update/runtime-evidence.md +0 -32
  252. package/content/scripts/receive_tool_result.py +0 -57
  253. /package/content/{.agents/skills/setup-signoz-mcp/scripts → scripts}/install_signoz_mcp.ps1 +0 -0
  254. /package/content/{.agents/skills/setup-signoz-mcp/scripts → scripts}/install_signoz_mcp.py +0 -0
@@ -1,35 +0,0 @@
1
- ---
2
- name: analyze-analysis-table-update-runtime
3
- description: 当用户或上游 Skill 提供企业 ID、dagId、脱敏的分析表更新日志、trace 摘要、运行时导出、Trace ID 或绝对时间窗,需要查看企业最近更新、解释更新来源、scene/producer、request/root/chain/DAG、node/attempt/requeue/load/listener/engine-task、核对更新计数、关联边、逻辑或执行时间线,或生成有界查询计划时使用。它只返回版本匹配的更新运行证据摘要,不维护多轮调查上下文、不协调跨场景,也不宣称最终根因;慢、超时、内存超限、OOM、MemoryLimitExceeded、资源消耗或性能回归必须先由性能诊断入口路由。
4
- ---
5
-
6
- # 分析更新运行记录
7
-
8
- 解释本次更新来源、request、chain/DAG、节点尝试、requeue、load、listener、engine task 或更新计数。返回阶段证据摘要,不维护多轮根因调查、不协调跨场景、不宣称最终根因或处置优先级。性能目标由性能入口及更新场景调用本能力。
9
-
10
- ## 从当前问题开始
11
-
12
- 沿用已有的对象、环境、时间、trace、chain/task 和调查材料。先确定本次要解释的记录与计数单位;已有材料足够时直接分析,无需先生成查询计划或填写适用性 JSON。
13
-
14
- 只有企业 ID 或 dagId、尚未定位执行时,先按[企业与 DAG 发现指引](references/discover-update-executions.md)查找记录。企业命中消费 span 后,按已有显式链接直接查关联更新,不为例行检查先重取消费 trace 和日志。
15
-
16
- 需要解释字段、阶段或关联时,按[更新运行知识](../../../knowledge/update/runtime-evidence.md)选择对应场景、recipe 和观测分片,只读取当前缺口需要的记录。参考[输出边界](references/update-diagnostic-contract.md)区分本阶段事实、静态知识和最终原因。
17
-
18
- ## 取证与解释
19
-
20
- - 按当前问题选择执行,由助手依知识和当前工具声明查询。已有精确 trace/chain/task 不重做资源发现,查询范围及默认时间遵守[公共规则](../../../knowledge/common/signoz-query-policy.md)。
21
- - 按发布描述核对来源、版本、范围和字段语义。版本未知保持 unknown,语义漂移保留 needs_revalidation;继续交付直接观察事实,不要求使用者取得内部构建标识。
22
- - 来源、accepted entry、chain、node、attempt、load、listener 和 engine task 分阶段关联。每条边需其声明的原生关系或显式键;第一条必要边缺失时停止扩展。
23
- - 同租户、同表名、display name、相似数量、时间邻近或相邻 trace 不证明异步关系、重复更新、merge 或物理提交。知识只说明可能行为,不能代替本次记录。
24
- - 确定计数单位并保持一致,分别说明 request、chain、distinct node、attempt、load 和 task;同一完整结果足够时直接整理,不重复查询。
25
- - 只查询能改变当前判断的缺口,不能为走完 recipe 读取全部阶段。明确 engine task/Metric 时返回关联证据及缺口,由调用方继续;不自行扩展为调查负责人。
26
-
27
- ## 返回结果
28
-
29
- 简要说明当前问题、调查范围和知识适用限制,列出可信候选与所选运行、身份/计数单位、阶段时间线和阶段测量结果。保留直接事实、反证、已验证关联、覆盖范围和下一项最小缺口。
30
-
31
- 直接向使用者答复时,按[公共交付说明](../../../docs/diagnostic-report.md)组织结果,本轮已读则复用,仍保留以下阶段证据边界。
32
-
33
- 不返回 `final_root_cause`、`cross_scene_conclusion` 或 `remediation_priority`,不调用其他场景自行扩大调查。面对使用者说明记录和判断边界,内部索引、digest 和输出协议留在调查材料中。
34
-
35
- 本轮实际遇到项目优化项或文档差异时,按[需求反馈](../../../docs/diagnostic-feedback.md)返回线索、依据和限制,由最终交付方汇总;不为反馈新建调查。
@@ -1,7 +0,0 @@
1
- interface:
2
- display_name: "分析表更新运行证据"
3
- short_description: "解释更新来源、DAG、运行时间线、关联关系与计数口径"
4
- default_prompt: "使用 $analyze-analysis-table-update-runtime 解释这份更新运行证据,并返回有边界的证据摘要。"
5
-
6
- policy:
7
- allow_implicit_invocation: false
@@ -1,34 +0,0 @@
1
- # 从企业或 DAG 定位更新执行
2
-
3
- 输入包含企业 ID/dagId、尚未定位更新执行时,读取本指引查找候选,不重建完整 DAG。企业入口只覆盖更新,其他企业级性能目标交回调用方确认范围。按[公共查询规则](../../../../knowledge/common/signoz-query-policy.md)确定环境、业务服务、时间和有限结果数:企业无时间默认最近 24 小时;dagId 直接定位链,由助手管理检索范围,不先索要时间或 trace。已有执行、时间和结果直接复用。
4
-
5
- ## 检索时间
6
-
7
- 企业更新与 dagId 的检索窗口只在本节维护,其他查询规则仍按公共规则执行。
8
-
9
- - 企业更新查询未提供时间,或只说“最近”,使用当前时钟之前 24 小时,时间参数按[公共查询规则](../../../../knowledge/common/signoz-query-policy.md#查询约束)处理。一句告知“未提供时间,先查看正式环境最近 24 小时的更新,优先检查异常”,随即查询,不等待确认。报告说明查询时间范围。用户指定的时间、URL 时间和已确认范围优先,含糊但明确指向历史的“那天”等不能用最近窗口覆盖。
10
- - dagId 对应更新 chain ID,标识一条更新链,链内可能有多个节点、尝试和 trace;不能把它当作可反复运行的表资源 ID,也不能以“不是运行唯一标识”为由先索要时间。已有该链的时间或查询结果直接复用。仅在工具明确支持按 dagId 无时间定位时直接调用;当前工具要求时间边界时按下方规则生成范围,不传入缺失参数或猜测新工具能力。
11
- - 工具必须带时间且只有 dagId 时,由助手生成最近 24 小时作为内部首次检索范围,按同环境、服务、精确 dagId 查询属性,再按发现指引在同范围降级一次。开场只说明按此 DAG 查询链路,不要求用户确认检索时间。首查窗口用于发现,不定义该链的起止边界;命中后从实际记录恢复时间,沿精确 trace、chain 和显式链接继续。关联记录跨初始窗口时记录证据及新边界,不能把同链的早期提交或后续节点排除为无关执行。
12
- - 只有 dagId 且上述两查确实为空时,核对标识与过滤条件;已知数据源保留范围且用户未限定时间的,允许再做一次同环境、服务和精确链标识的时间扩展,最多覆盖已知保留期与最近 30 天的交集,记录新旧边界。使用已确认支持链标识的来源查询,不扫描企业或移除服务过滤。保留期未知、扩展仍为空或查询失败时,交付实际覆盖范围再问大致日期或最小缺口;不猜保留期、不循环扩展。
13
- - 企业无结果时先完成同范围降级,再说明覆盖范围并询问更早时间;不自动扩大企业扫描。历史对比仍以目标执行开始前 24 小时为基线,和以当前时钟为右边界的“最近更新”分别维护。
14
-
15
- ## 企业入口
16
-
17
- 1. 企业 ID 按更新观测中的 `corpId` 精确检索。只使用已知环境、服务和时间,不同时要求 `span=update`、`dagId` 非空或错误状态;企业字段可能位于进入更新之前的消费 span,失败条件应在后续关联的更新执行上核对。
18
- 2. 先保留命中的 trace/span ID、时间、tableId 及实际返回的属性。企业属性的放置条件复用 `lookup:analysis-update-attempt-consumed`;只有 `corpId` 无法判定记录已经属于一次完整更新。
19
- 3. 按[独立 Trace 的显式链接](../../../../knowledge/common/signoz-query-policy.md#独立-trace-的显式链接)查询关联执行,使用实际 link 或 `linked`,不把原 trace 的 ID 当作新 `update` trace 的 ID。发现结果已含消费 trace ID 和可用的链接来源时,直接按链接查关联更新;没有需要解释的消费阶段缺口时,不先重取消费 trace 或日志。可批量使用已经取得的精确 ID,不重新扫描企业范围。某一 `update` span 没有 `corpId` 不能用来排除其企业归属;同时不能根据企业或时间相同把无链接的执行并入。
20
- 4. 从关联更新记录取得实际 dagId、tableId、traceId、时间、结果与耗时。“最近更新情况”先交付已观察到的概况,优先展示有明确失败、超时、OOM 或有证据支持的等待异常的执行;只有耗时长或缺结束记录不能直接判异常。有异常时在本次目标内继续核对相关证据,正常记录简述即可,不要求用户必须选择一条继续。多个不同异常需要深入且目标无法判断时才展示差异作最小消歧;不擅自挑最慢的一条或深挖全部候选。无明确异常时简洁说明观察结果和必要覆盖限制,不逐条展开内部字段与查询过程。
21
-
22
- ## DAG 入口
23
-
24
- 1. 用户给出的 dagId 用 `dagId` attribute 精确过滤,在同服务与已确认或内部生成的检索范围内检查更新提交和节点执行。该标识在更新记录中对应 chain ID,标识一条链而非其中单个节点或 trace;不要求用户先提供发生时间。链内记录的时间可以超出默认发现窗口,按公共规则沿实际证据恢复范围。
25
- 2. 属性查询未命中或不可查询时,在同一范围使用 `lookup:analysis-update-intent-accepted` 和 `lookup:analysis-update-primary-node-result` 声明的 chain ID 日志签名降级一次。精确匹配实际 chain 值和签名,不仅搜索通用的 `dag` 字样。
26
- 3. 日志命中后提取其真实 trace_id;没有该字段时按公共规则补取关联字段。已有 chain 和绝对窗口即可进入现有 `dag-chain` 查询计划,不要求用户另找 trace。提交早期失败可能尚未写入 dagId attribute,因此不能只看完成属性。
27
-
28
- ## 字段与交付边界
29
-
30
- - 两个入口的首查和同范围降级复用公共查询预算;只有 dagId 可按公共规则作一次已知保留期内的时间扩展。取得执行后只沿精确 ID 补证;关联查询不是再次发现整个企业。无结果时区分查询为空、字段不可查、权限问题和本地响应交接失败,不写“企业/DAG 字段未采集”的通用结论。
31
- - XS03 的 `tenantId`、dagId、traceId 属于更新结果埋点;字段存在不证明该埋点可由 SigNoZ 检索。产生条件及覆盖复用 `lookup:analysis-update-primary-node-result`;仅在已经有可访问数据源或用户材料时使用,不能把它作为 SigNoZ 首查或必需回退。
32
- - 达到 limit、分页未完成或窗口不全时,报告“已观察到”的候选数量及覆盖限制,不报告企业全部更新数;节点成功不代表 DAG 完成,多个 span 不代表多次更新。
33
- - 发现阶段只解释原生记录和显式链接,不先要求 application 通过业务语义校验。选中执行后才按主 Skill 核对版本、范围、字段及关联边,未知版本不能被本指引补齐。已有精确 task 可继续取得 Metric,但不反向补造 DAG 关系。
34
- - 向调用方交接候选、排除依据、选中执行、范围与未完成动作;发现完成不等于诊断完成。性能目标继续由更新性能专项负责,来源/计数等有界事实问题由本 Skill 交付。
@@ -1,101 +0,0 @@
1
- # 更新证据摘要边界
2
-
3
- 按[更新运行知识](../../../../knowledge/update/runtime-evidence.md)读取所需分片并解释证据。助手选择执行、构造查询并判断适用范围,无需生成应用 JSON 或执行查询规划命令。
4
-
5
- 发布来源与字段要求见知识 manifest 和索引,本次行为以运行记录为准。unknown 表示版本、范围、关联或关键字段无法确认;needs_revalidation 表示已知版本或语义发生变化,或不满足适用要求。引擎统计、相近时间或猜测的默认值都不能补足这些证据。
6
-
7
- 证据摘要保留当前范围、全部仍可信候选、所选运行、计数单位和各阶段测量结果,并说明反证、已验证关联、覆盖范围,以及分析停在哪一步。问题型入口负责最终根因、跨场景结论及处置排序。
8
-
9
- ## 逻辑事件与身份术语
10
-
11
- | 逻辑项 | 含义 | 身份边界 | 不得等同于 |
12
- | --- | --- | --- | --- |
13
- | update request | 一次 producer 提交,携带 candidate 集合和业务上下文 | 显式 request/trace 或 producer key(如存在) | accepted chain 或已完成更新 |
14
- | candidate root | producer 在资格与图约简前提出的 table/resource | 当前 request 内的 candidate identity | effective root |
15
- | effective root | scheduler 按当前依赖关系约简后保留的 root | 显式 root 与 accepted chain | 所有关联 DAG node |
16
- | update chain | 一次提交上下文被控制面接受的范围 | 显式 chain ID | data load、chain 完成或物理提交 |
17
- | merged chain member | 被吸收到 node 级合并任务中的 chain | 显式 member chain ID 和 merge decision | 所有 chain 已合成一个 DAG 的证明 |
18
- | DAG extent | 按当前依赖视图从 effective root 可达的关联 node | 显式 dependency/control record | entry 数或成功 load 数 |
19
- | node | 以 table/resource 为范围的可执行任务 | chain 内显式 node/resource ID | 物理 engine task |
20
- | attempt / execution detail | 一个 node 的一次入队或消费执行记录 | 显式 execution-detail ID、node ID 和 chain ID | 独立 node 或成功 commit |
21
- | requeue | 已分类的重新派发路径,例如 lock/capacity/recovery | 显式 requeue reason 或 producer-consumer 证据 | 普通业务失败或重复物理工作 |
22
- | load outcome | 任务执行 load、reuse、bypass、skip 或 fail 的显式决策/结果 | 显式 load-result 证据 | 不存在 load result 时的 node success |
23
- | engine task | 只有显式 handoff/result 能确认的 engine 侧任务 | 显式 server-to-engine/task 关系 | 每个 node、trace 或成功 listener |
24
- | trace / span | 遥测执行范围 | 原生 trace/span identity | request、chain、node 或物理 commit |
25
-
26
- ## 允许的关联边
27
-
28
- 只有在目标范围内验证字段语义和唯一性后,才能确认以下关联边:
29
-
30
- 1. trace 原生父子关系、link 或消息关系可以连接遥测范围。新的消费 trace 不会自动成为请求 trace 的子 trace。原生 trace 关系不能确认业务、更新或引擎交接关系;每条待确认的业务关联仍需具备完整的已声明业务键。
31
- 2. 已提交 request 必须有明确的接受记录,或共享且经过语义验证的 request/chain key,才能关联到 update chain。
32
- 3. Chain 必须通过显式 chain、node/resource、execution-detail key 或持久控制记录,才能关联到 node 或 attempt 证据。
33
- 4. Merge 关系需要明确的原始 chain 和成员 chain 标识。
34
- 5. Load outcome 或 engine task 需要显式 result 或 handoff key。`edge-load-operation-to-engine-task` 必须同时具备服务端调用范围,以及写入统计成功返回的 engine task ID;仅有原生 trace 关系无法确认这次交接。
35
-
36
- 时间邻近、租户相同、显示名称相同、表数量相同或 trace 相邻,只能用于筛选候选,不能确认一次跳转、重复更新、merged chain 或物理写入。
37
-
38
- ## 计数单位与对账
39
-
40
- 每次测量只使用一个单位,并保持一致:input request、candidate root、effective root、accepted chain、merged-chain member、DAG node、execution attempt、requeue、load outcome、engine task、trace/span 或 successful physical commit。聚合前记录统计对象范围、时间含义、去重键、包含和排除规则,以及证据覆盖范围。
41
-
42
- Update request、chain、DAG node、attempt、load、engine task 和 successful physical commit 分别计数。
43
-
44
- | 比较 | 只有满足以下条件才有效 | 否则报告 |
45
- | --- | --- | --- |
46
- | request → effective root | 显式 request-to-root 映射和 filtering coverage | fan-out/filtering unknown |
47
- | effective root → DAG node | 同一 chain/version 下的显式 dependency extent | graph expansion unknown |
48
- | chain → attempt | 显式 chain/execution key 和 retry 分类 | control acceptance,不是 execution 数 |
49
- | attempt → load | 显式 attempt/load result 映射 | execution 不代表物理 load |
50
- | load → engine task/commit | 显式 handoff/task 及 outcome/commit 证据 | 不得形成 engine 或 commit 结论 |
51
- | trace/span → 任一业务单位 | 显式语义 attribute 和去重规则 | 只能计为 telemetry 数量 |
52
-
53
- entry count、DAG count、node/update-span count、trace count 和 physical successful-commit count 不能互换。重复的 attempt 或 span 不能证明重复物理更新;多个 request 可能被过滤或合并,一个 root 也可能展开为多个节点。
54
-
55
- ## 判断矩阵
56
-
57
- | 问题 | 必需证据 | 可直接回答 | 停止或移交 |
58
- | --- | --- | --- | --- |
59
- | 输入是否产生了被接受的控制面任务? | 显式 request/chain acceptance key | 只分类 acceptance | 无 key:request-to-chain 为 unknown |
60
- | 为什么 entry 多于 chain 或 node? | 冻结的计数单位及显式 root/merge/dependency 映射 | 识别已测量的 filtering、fan-out 或 merge 关系 | 无映射:报告不可比较 |
61
- | 重复 node 是否是 retry? | 相同 node/attempt 及显式 requeue reason | 分类已观测的 requeue | 无 reason:重复信号不能证明 retry |
62
- | Node 是否写入数据? | 显式 load result | 按记录分类 load/reuse/skip/failure | 无 load result:不得声称物理写入 |
63
- | Engine 是否 commit? | 显式 handoff、engine task 和 commit outcome | 陈述有范围限制的 engine result | 无显式 engine relation:停在 server 边界 |
64
- | 权限/成员事件是否导致 DAG? | 显式 producer/acceptance/chain key | 陈述已验证的 edge | 只有邻近事件/tenant/name:保留 candidate 并停止 |
65
-
66
- ## 选择运行与阶段测量
67
-
68
- - 保留全部可信运行候选,按用户操作和明确关系选择目标;不按最新、最慢或链接存在性静默挑选。失败、成功重试、其他查询和正常基线分别保存。
69
- - 每段耗时保留原始开始/结束、字段口径和覆盖范围。异步阶段或并发分支可能重叠,不能把父子/并发耗时相加为端到端时间。
70
- - load/listener 的成功不是整链或全部分区的 successful physical commit,成功尝试也不自动代表整链成功。恢复或重试行为只报告实际观察到的分支。
71
- - 分页、截断、保留期缺失、字段缺失与关联缺口分别描述。有限样本不能代替总体;一次完整查询已回答计数时直接整理,不重复聚合。需要相对历史变化时另建可比基线,时间与证据独立。
72
-
73
- ## Trace 优先与时间窗优先计划
74
-
75
- ### Trace 优先
76
-
77
- 1. 从提供的 Trace ID 或显式 producer key 开始,记录绝对时间区间及其来源时区。
78
- 2. 确认 trace 记录对应的逻辑事件类型,并寻找显式 chain acceptance key。
79
- 3. 存在原生关系或已验证的 chain/node/attempt key 时,才扩展到消费 trace;没有显式证据的跳转只保留为候选。
80
- 4. 按顺序检查显式 merge、requeue、load 和可选 engine-task outcome,在第一条缺失的允许关联边停止。
81
-
82
- ### 时间窗优先
83
-
84
- 1. 查询前确定统计对象范围和计数单位,并保持一致。
85
- 2. 使用完整的服务端聚合证据确定查询区间。原始记录只有经分页和覆盖核对确认完整后,才能代表总体;否则仅作为样本。
86
- 3. 只使用已验证字段和去重规则,分别测量 request、chain、distinct node、attempt、load 和 engine task。
87
- 4. 用少量代表性 trace 解释已测量的过程;样本不能代替总体聚合。
88
-
89
- 查询前,先按逻辑条件确定候选范围,再将其中有界的过滤条件适配到当前可用的 SigNoZ MCP。分页、覆盖范围、统计对象范围和实际字段的发现过程保留在本次调查证据中,不回写到由来源材料提炼的知识包。
90
-
91
- ## 降级与停止规则
92
-
93
- 运行版本未知或关键字段缺失时保留 `unknown`;已知版本不匹配,或 tag/log 含义发生变化时使用 `needs_revalidation`。存在已生效的失效条件(包括配置变更)、范围不匹配、归属其他服务、必要身份关联缺失、分页不完整或必需证据不可用时,使用 `unknown`。不得仅为制造关联而扩大时间窗。
94
-
95
- 当请求的分类已在声明的覆盖范围内获得证据、必要关联边不可用,或下一步需要研发确认产品行为、补充采集或分析因果时停止。说明下一步需要的最小检查,不给出猜测性结论。
96
-
97
- ## 职责与移交
98
-
99
- 本 Skill 与 manifest 只解释匹配的、无需产品源码即可核对的观测要求。知识以可审查的索引和小分片存储,生产侧候选扫描台账不复制到使用方仓库,只保留其原始哈希和数量作为来源证明。已有 log、trace 摘要和运行导出继续离线分析。需要查询时,按当前缺口选择知识中的关联键和字段,使用当前可用的 SigNoZ MCP;缺少 MCP 配置时,返回转交 `setup-signoz-mcp` 的建议。对显式关联的 engine task 或 metric,向调用方返回关联材料及转交 `analyze-engine-metric` 的建议。
100
-
101
- 产品行为再验证和完整产品根因调查超出本分析流程的范围。停止时说明还需验证哪项产品行为,交由研发继续;本 Skill 不调查源码或诊断完整因果链。
@@ -1,76 +0,0 @@
1
- ---
2
- name: analyze-engine-metric
3
- description: 当用户提供 SigNoZ trace/metric 链接、MetricOuts 日志或完整引擎 metric 文件,要求分析执行耗时、内存、Pipeline、Operator、数据规模、资源边界或执行差异时使用;也供性能场景 Skill 深挖引擎证据。该 Skill 自行获取、解析并解释 Metric,不负责 DSL 或业务步骤映射。
4
- ---
5
-
6
- # 分析引擎 Metric
7
-
8
- 获取并解释当前执行的引擎证据,说明任务结果、数据规模、耗时、内存和仍需确认的内容。助手选择执行、查询并判断原因,解析器整理事实。用户直接请求时,由本 Skill 交付;性能场景调用时,返回执行层判断,业务配置和最终业务根因由上游确认。
9
-
10
- ## 从已有材料继续
11
-
12
- | 已有材料 | 当前动作 |
13
- |---|---|
14
- | 对应执行的结构化报告 | 核对 task、正文 hash、schema_version、normalization_version 和完整性后复用,按问题读取相关事实 |
15
- | MetricOuts 原始响应或完整 Metric 文件 | 直接解析,跳过执行发现 |
16
- | 已选 task 或 Metric 链接 | 在冻结范围内取得该 task 的正文 |
17
- | 已保存 trace 或少量日志 | 依据[执行关联与获取方法](../../../knowledge/engine/metric-retrieval.md)恢复任务,不重复查询 |
18
- | 只有精确 trace | 先读取当前缺少的时间线或任务属性,按用户问题选择执行 |
19
- | 两组材料 | 分别冻结目标与基线,再比较,保留不可比部分 |
20
-
21
- 已有材料足够时直接解释。无法确认获取状态时,只补当前缺口。旧或不匹配产物从保留材料离线重建;旧摘要已有伴随 hash 却无事实路径时,从留存 MetricOuts 响应重建全部产物。
22
-
23
- ## 获取和选择
24
-
25
- 需要新增证据时复用[公共查询规则](../../../knowledge/common/signoz-query-policy.md)。字段、关联键、查询例子、精确 trace 回退见[获取方法](../../../knowledge/engine/metric-retrieval.md),只读当前需要的部分。
26
-
27
- - 按当前问题和明确关联选择执行。保留失败、重试、混合执行和无链接候选;已选执行不能被更慢、更新或有链接的其他任务替换。耗时只用于排序。
28
- - 从 trace 整理任务绑定、补取属性和核对覆盖,按[获取方法 · 从 trace 整理任务绑定](../../../knowledge/engine/metric-retrieval.md#从-trace-整理任务绑定)直接完成,不依赖脚本。
29
- - 优先使用原始 Metric 链接的 task、logger、过滤和时间,读法见[获取方法 · Metric 链接与任务日志](../../../knowledge/engine/metric-retrieval.md#metric-链接与任务日志);按当前 MCP 工具声明查询,不重新设计范围或删除不认识的条件。
30
- - 同 task 明确记录 `not submitted, skip finish` 时,交付提交前失败;预生成 ID 或其他缓存任务不能证明本次已计算。
31
- - 已选定的慢或失败引擎执行默认获取并解析 Metric。只有明确未提交、用户限定不读取或实际取证受阻时跳过。仅有 `polars query timeout` 且缺 task 时继续恢复关联,不能直接结束。
32
- - 单次失败不要求成功样本。历史变化目标按公共规则主动发现基线;两侧材料独立获取,不能互换时间窗或以附近执行替代。
33
-
34
- 原始响应直接交给解析器或系统临时文件,完整正文保留到本次调查结束;交接失败重试本地传递,不重新获取正文。不得把原始响应、凭据或业务载荷写入工作区。
35
-
36
- ## 统一解析入口
37
-
38
- 在仓库根目录调用 `python3 .agents/skills/analyze-engine-metric/scripts/analyze_engine_metric.py`。`<dir>` 使用本次调查独占的系统临时目录。
39
-
40
- | 输入 | 参数 |
41
- |---|---|
42
- | 已选 task 的原始日志响应 | `--metric-log-json <path或-> --task-name <task> --artifacts-dir <dir>` |
43
- | 完整 Metric 文件 | `--metric <file> --artifacts-dir <dir>` |
44
- | 两次可比执行 | `--metric <before> --compare-metric <after> --artifacts-dir <dir>` |
45
- | 复用产物 | `--metric <原文> --reuse-summary <summary> --artifacts-dir <dir>` |
46
-
47
- 解析日志前,助手先选定执行和 task,通过 `--task-name` 传入所选 task。解析器只核对正文 task 是否一致,不替助手选择执行。通过 `--query-limit` 传入日志查询的已知上限;上限未知时不套用另一份查询值,达到上限不能声明正文唯一。
48
-
49
- 解析生成 `metric_summary.json` 和 `metric_report.json`。先读紧凑事实及报告路径,再按需展开;`--view summary` 显示已保存的排名。主明细和完整伴随摘要分别保存、解析,保留时间、hash、任务核对及独立路径。只有任务核对成立且产物完整时使用伴随信息,不合并不同快照的状态、内存或耗时。
50
-
51
- 内存问题先查看紧凑摘要的 `memory_overview`,展示不足时沿报告指针展开;分组口径、不能相加的字段和旧摘要补齐规则见[事实产物](../../../knowledge/engine/metric-artifacts.md)。
52
-
53
- 解析状态区分完整明细、完整摘要、真实空结果、分页/截断、正文不完整、任务不匹配、正文歧义、格式或本地处理失败。只有服务端确实返回空 rows 才能说查询为空;界面截断、传递失败或解析失败不能说未生成 Metric。完整 `RUNNING` 摘要和 `tasks=0` 仍是快照,不证明未提交或最终成功。
54
-
55
- ## 解释事实
56
-
57
- 首次解读字段时按需读取[Metric 语义](../../../knowledge/engine/metric-semantics.md),同轮复用。
58
-
59
- 按本次信号查阅[常见性能问题](../../../knowledge/engine/performance-patterns.md)中的相关条目,核对判断依据、其他可能解释和建议前提,无需遍历全部场景。
60
-
61
- - 先核对任务结果与直接错误,再连接热点、输入输出、IO、中间状态、并行度和资源边界。最慢 Pipeline 不自动是根因,高阻塞不单独证明 IO、网络或下游原因。
62
- - pending 是调度等待,blocked 是依赖等待。比较 active CPU/wall 前,先确认范围和聚合对象;累计 sum 除以 Pipeline 墙钟不能当作占比。JIT 后端的编译和 active 计时分别查看,不覆盖 Pipeline 汇总,也不相加为查询总时长。
63
- - 只有总行数时,不推断高基数、数据倾斜或 Join 放大;继续核对局部输入和中间状态。
64
- - `query_peak_memory_when_pipeline_closed` 是查询快照;arena 等算子专用字段分别保留来源,不将不同记录相加为同时驻留量。
65
- - 容量显示值可能舍入,精确边界以同 task 的整数字节证据核对;前后对比同时核对内存跟踪范围,不只比较同名字段。
66
- - 只有 schema_version=2、complete=true 的事实产物才引用算子比例。输入缺失、负哨兵、未知单位或聚合口径不同保持不可计算,不用相邻节点输出代替输入,不跨 Join/Aggregate/Union/Exchange 手算放大率。
67
- - 两份 Metric 的比较核对 `metric_comparison.json` 的对齐依据、歧义和未匹配项。数值变化不证明业务条件可比,也不自动解释配置变化或唯一原因。
68
- - 保留全部对象、原值、来源和未知项;摘要展示范围有限时沿报告指针展开。只有引擎证据时,结论停在执行层,页面步骤映射交给场景分析。
69
-
70
- ## 交付
71
-
72
- 直接向使用者答复时,按[公共交付说明](../../../docs/diagnostic-report.md)组织结果,本轮已读则复用;由性能专项调用时返回执行层判断及其范围,不自行扩写为业务根因。
73
-
74
- 返回当前执行的判断、关键事实与来源、反证、限制,以及下一步判断所缺的证据。简单数值或链接直接回答;解释复杂原因时,用少量关键证据说明判断依据,不罗列全部指标,也不因缺少基线额外创建任务。
75
-
76
- 交付时按[需求反馈](../../../docs/diagnostic-feedback.md)复核本轮已遇到的场景知识缺口、项目优化项和文档差异,复用现有证据,由最终交付方汇总一次。
@@ -1,13 +0,0 @@
1
- interface:
2
- display_name: "分析引擎 Metric"
3
- short_description: "获取并分析引擎 Metric,解释执行热点和资源问题"
4
- default_prompt: "使用 $analyze-engine-metric 获取并分析这次执行的 Metric,说明主要 Pipeline、Operator、数据条件和资源边界。"
5
-
6
- dependencies:
7
- tools:
8
- - type: "mcp"
9
- value: "signoz"
10
- description: "用于从 Trace 和 Logs 获取 Metric 证据的 SigNoZ MCP 服务"
11
-
12
- policy:
13
- allow_implicit_invocation: true
@@ -1,270 +0,0 @@
1
- #!/usr/bin/env python3
2
- """Extract and normalize Metric facts. The diagnostic Skill interprets them."""
3
-
4
- from __future__ import annotations
5
-
6
- import argparse
7
- import hashlib
8
- import json
9
- from pathlib import Path
10
- import sys
11
-
12
- SCRIPT_DIR = Path(__file__).resolve().parent
13
- if str(SCRIPT_DIR) not in sys.path:
14
- sys.path.insert(0, str(SCRIPT_DIR))
15
- from engine_metric_analysis import (
16
- NORMALIZATION_VERSION,
17
- SCHEMA_VERSION,
18
- build_report,
19
- build_memory_overview,
20
- build_summary,
21
- compare_reports,
22
- )
23
- from engine_metric_analysis import signoz_extract as metric_extractor
24
-
25
-
26
- def _write_json(path, value):
27
- path.write_text(json.dumps(value, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
28
-
29
-
30
- def analyze_metric(metric_path: Path, artifacts_dir: Path, *, top: int = 5):
31
- artifacts_dir.mkdir(parents=True, exist_ok=True)
32
- report = build_report(metric_path, top=top)
33
- report_path, summary_path = artifacts_dir / "metric_report.json", artifacts_dir / "metric_summary.json"
34
- summary = build_summary(report, report_path, top=top)
35
- _write_json(report_path, report)
36
- _write_json(summary_path, summary)
37
- return {"report": report, "summary": summary, "report_path": str(report_path), "summary_path": str(summary_path)}
38
-
39
-
40
- def analyze_metric_collection(receipt, task_name: str, artifacts_dir: Path, *, top: int = 5):
41
- """Keep the selected detail and companion snapshots in separate reports."""
42
- result = analyze_metric(Path(receipt["metric_path"]), artifacts_dir, top=top)
43
- if task_name not in result["report"]["task_names"]:
44
- raise metric_extractor.MetricExtractionError("Metric task does not match the selected execution", "task_mismatch")
45
- collection = {key: value for key, value in receipt.items() if key != "body"}
46
- for companion in collection["companion_candidates"]:
47
- facts = analyze_metric(Path(companion["metric_path"]), artifacts_dir / "companions" / companion["body_sha256"], top=top)
48
- summary = facts["summary"]
49
- companion.update({key: summary[key] for key in ("schema_version", "task_names", "complete", "collection_status", "coverage")})
50
- companion.update({"report_path": facts["report_path"], "summary_path": facts["summary_path"],
51
- "task_identity_matches": summary["task_names"] == [task_name],
52
- "job_states": [{key: job[key] for key in ("task_name", "status", "report_pointer")}
53
- for job in summary["job_snapshots"]]})
54
- result["summary"]["collection"] = collection
55
- _write_json(Path(result["summary_path"]), result["summary"])
56
- return result
57
-
58
-
59
- def validate_reuse(summary_path: Path, metric_path: Path):
60
- summary = json.loads(summary_path.read_text(encoding="utf-8"))
61
- report = json.loads(Path(summary["report_path"]).read_text(encoding="utf-8"))
62
- required = {"task_names", "coverage", "pipelines", "source_lines", "query_fields", "summary_metrics", "data_scale_transitions", "complete", "collection_status"}
63
- if not required.issubset(report) or any(key not in summary for key in ("task_names", "coverage", "complete", "collection_status")):
64
- raise ValueError("Artifact is incomplete; reparse the retained Metric locally")
65
- digest = hashlib.sha256(metric_path.read_bytes()).hexdigest()
66
- if any(v.get("schema_version") != SCHEMA_VERSION or v.get("body_sha256") != digest for v in (summary, report)):
67
- raise ValueError("Artifact schema or source hash changed; reparse the retained Metric locally")
68
- if any(v.get("normalization_version") != NORMALIZATION_VERSION for v in (summary, report)):
69
- raise ValueError("Artifact normalization changed; reparse the retained Metric locally")
70
- if summary.get("task_names") != report.get("task_names"):
71
- raise ValueError("Artifact task identities do not match")
72
- if any(summary[k] != report[k] for k in ("complete", "collection_status", "coverage")):
73
- raise ValueError("Artifact coverage does not match the full report")
74
- if any(job["fields"].get(key, {}).get("unit") == "count" for job in report.get("jobs", [])
75
- for key in ("queue_time", "wait_resource_time", "plan_time", "start_time")):
76
- raise ValueError("Artifact treats a unitless phase field as a count; reparse the retained Metric locally")
77
- for companion in summary.get("collection", {}).get("companion_candidates", []):
78
- if "summary_path" not in companion:
79
- raise ValueError("Companion facts are missing; reparse the retained MetricOuts response locally")
80
- facts = validate_reuse(Path(companion["summary_path"]), Path(companion["metric_path"]))
81
- if any(companion[key] != facts[key] for key in ("body_sha256", "report_path", "task_names", "complete", "collection_status", "coverage")):
82
- raise ValueError("Companion artifact does not match its collection record; reparse the retained response locally")
83
- if "memory_overview" not in summary:
84
- summary["memory_overview"] = build_memory_overview(report)
85
- _write_json(summary_path, summary)
86
- return summary
87
-
88
-
89
- def compact_summary(summary, summary_path):
90
- keys = (
91
- "schema_version",
92
- "normalization_version",
93
- "report_path",
94
- "body_sha256",
95
- "source",
96
- "task_names",
97
- "collection_status",
98
- "complete",
99
- "input_format",
100
- "coverage",
101
- "job_snapshots",
102
- "execution_overview",
103
- "memory_overview",
104
- "collection",
105
- )
106
- return {
107
- **{key: summary[key] for key in keys if key in summary},
108
- "summary_path": str(summary_path),
109
- }
110
-
111
-
112
- def main():
113
- parser = argparse.ArgumentParser(description=__doc__)
114
- source = parser.add_mutually_exclusive_group()
115
- source.add_argument("--metric")
116
- source.add_argument(
117
- "--metric-log-json", help="Original MCP response path, or '-' for stdin"
118
- )
119
- parser.add_argument(
120
- "--query-limit",
121
- type=int,
122
- help="Known limit of the Metric log query",
123
- )
124
- parser.add_argument("--task-name")
125
- parser.add_argument("--compare-metric")
126
- parser.add_argument(
127
- "--artifacts-dir",
128
- help="Required for Metric analysis; use a system temporary directory",
129
- )
130
- parser.add_argument("--top", type=int, default=5)
131
- parser.add_argument(
132
- "--json",
133
- action="store_true",
134
- help="Retained for compatibility; stdout is always factual JSON",
135
- )
136
- parser.add_argument(
137
- "--view",
138
- choices=("compact", "summary"),
139
- default="compact",
140
- help="Single-Metric stdout is compact by default; summary includes the saved rankings",
141
- )
142
- parser.add_argument(
143
- "--reuse-summary",
144
- help="Validate existing v2 artifacts against --metric without querying",
145
- )
146
- args = parser.parse_args()
147
- if args.top < 1:
148
- parser.error("--top must be positive")
149
- if args.query_limit is not None and args.query_limit < 1:
150
- parser.error("--query-limit must be positive")
151
- if not (args.metric or args.metric_log_json):
152
- parser.error("provide --metric or --metric-log-json")
153
- if (args.compare_metric or args.reuse_summary) and not args.metric:
154
- parser.error("comparison and reuse require --metric")
155
- if (args.metric or args.metric_log_json) and not args.artifacts_dir:
156
- parser.error("Metric analysis requires --artifacts-dir")
157
- try:
158
- directory = Path(args.artifacts_dir).resolve()
159
- receipt = None
160
- if args.metric_log_json:
161
- if not args.task_name or args.compare_metric or args.reuse_summary:
162
- parser.error(
163
- "--metric-log-json requires --task-name and cannot combine with comparison/reuse"
164
- )
165
- payload = metric_extractor.read_payload(args.metric_log_json)
166
- receipt = metric_extractor.write_metric(
167
- payload, args.task_name, directory, query_limit=args.query_limit
168
- )
169
- metric_path = Path(receipt["metric_path"])
170
- else:
171
- metric_path = Path(args.metric)
172
- if args.reuse_summary:
173
- if args.compare_metric:
174
- parser.error("--reuse-summary cannot combine with --compare-metric")
175
- output = validate_reuse(Path(args.reuse_summary), metric_path)
176
- if args.task_name and args.task_name not in output["task_names"]:
177
- raise metric_extractor.MetricExtractionError(
178
- "Reused Metric task does not match the selected execution",
179
- "task_mismatch",
180
- )
181
- else:
182
- result = (
183
- analyze_metric_collection(
184
- receipt, args.task_name, directory, top=args.top
185
- )
186
- if receipt
187
- else analyze_metric(metric_path, directory, top=args.top)
188
- )
189
- if args.task_name and args.task_name not in result["report"]["task_names"]:
190
- raise metric_extractor.MetricExtractionError(
191
- "Metric task does not match the selected execution", "task_mismatch"
192
- )
193
- output = result["summary"]
194
- if args.compare_metric:
195
- target = analyze_metric(
196
- Path(args.compare_metric),
197
- directory / "comparison_target",
198
- top=args.top,
199
- )
200
- comparison = compare_reports(
201
- result["report"], target["report"], top=args.top
202
- )
203
- comparison["before"]["report_path"] = result["report_path"]
204
- comparison["after"]["report_path"] = target["report_path"]
205
- comparison_path = directory / "metric_comparison.json"
206
- _write_json(comparison_path, comparison)
207
- output = {
208
- "schema_version": SCHEMA_VERSION,
209
- "comparison_path": str(comparison_path),
210
- "aligned_count": len(comparison["operator_data_scale_changes"]),
211
- "ambiguity_count": len(
212
- comparison["operator_alignment_ambiguities"]
213
- ),
214
- "job_aligned_count": len(comparison["job_changes"]),
215
- "job_ambiguity_count": len(comparison["job_alignment_ambiguities"]),
216
- "before_status": result["summary"]["collection_status"],
217
- "after_status": target["summary"]["collection_status"],
218
- "before_summary": result["summary_path"],
219
- "after_summary": target["summary_path"],
220
- }
221
- output["before_overview"] = result["summary"]["execution_overview"]
222
- output["after_overview"] = target["summary"]["execution_overview"]
223
- if "collection_status" in output and args.view == "compact":
224
- summary_path = (
225
- Path(args.reuse_summary)
226
- if args.reuse_summary
227
- else directory / "metric_summary.json"
228
- )
229
- output = compact_summary(output, summary_path)
230
- print(
231
- json.dumps(
232
- output, ensure_ascii=False, indent=2 if args.view == "summary" else None
233
- )
234
- )
235
- statuses = [
236
- output.get(k)
237
- for k in ("collection_status", "before_status", "after_status")
238
- ]
239
- return (
240
- 2
241
- if any(status in {"format_error", "body_incomplete"} for status in statuses)
242
- else 0
243
- )
244
- except json.JSONDecodeError as exc:
245
- print(
246
- json.dumps(
247
- {"collection_status": "format_error", "error": str(exc)},
248
- ensure_ascii=False,
249
- )
250
- )
251
- return 2
252
- except metric_extractor.MetricExtractionError as exc:
253
- print(
254
- json.dumps(
255
- {"collection_status": exc.status, "error": str(exc)}, ensure_ascii=False
256
- )
257
- )
258
- return 2
259
- except (ValueError, OSError, KeyError) as exc:
260
- print(
261
- json.dumps(
262
- {"collection_status": "local_processing_error", "error": str(exc)},
263
- ensure_ascii=False,
264
- )
265
- )
266
- return 2
267
-
268
-
269
- if __name__ == "__main__":
270
- raise SystemExit(main())
@@ -1,11 +0,0 @@
1
- """Metric format parsing and factual normalization."""
2
- from .metric_analyzer import (
3
- NORMALIZATION_VERSION,
4
- SCHEMA_VERSION,
5
- build_report,
6
- build_memory_overview,
7
- build_summary,
8
- compare_reports,
9
- )
10
-
11
- __all__ = ["NORMALIZATION_VERSION", "SCHEMA_VERSION", "build_report", "build_memory_overview", "build_summary", "compare_reports"]