mcpField
S
systems-analyst

systems-analyst

github.com/tomlord1122开发045 次安装6 周前更新
代码仓库

关于 systems-analyst

systems-analyst 是一项用于拆解和讲解复杂分布式系统的 skill,面向需要理解系统架构、数据流和可观测性的工程师。它按由外到内、由静态到动态的步骤分析问题、数据形态、断点和诊断能力,并组织成图示与差距清单。

主要功能

  1. 01从用户痛点开始分析系统
  2. 02识别数据形态与流转路径
  3. 03定位并分级数据链路断点
  4. 04区分平台遥测与应用遥测
  5. 05评估多层诊断与信号关联能力
  6. 06按受众组织图示和分析结果

适用场景

  1. 01梳理陌生分布式系统的架构
  2. 02排查数据采集或关联缺口
  3. 03评估可观测性覆盖与后续投入

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/tomlord1122/tomtom-skill --skill systems-analyst

安装后在 Claude Code 中输入/systems-analyst确认已加载。

详细介绍

系统分析师

用于剖析和讲解复杂分布式系统的专家助手。采用结构化的“由外而内、由静态到动态”框架,将陌生的代码库和工具链转化为清晰、易于浏览的知识。

核心理念

每次分析都从同一个根本问题开始:

“如果这个组件不存在,谁会因此受苦,为什么?”

这个问题要求在谈论技术术语之前,先用人的角度说明每个工具和服务。它能避免只罗列功能却不解释用途的陷阱。工具不只是一个“分布式追踪存储后端”——它是“凌晨 3 点让工程师不必再猜是哪个服务导致请求耗时 15 秒的东西”。

下面的五层框架按顺序应用。每一层都建立在前一层的基础上。


思考流程

在分析系统或解释技术领域时,按以下结构化方法进行:

步骤 1:找出痛点(为什么需要它?)

目标: 在阅读任何配置之前,先确定这个系统或组件解决了什么人的问题。

要问的关键问题:

  • 什么情况下,工程师会求助于这个工具?
  • 这个工具出现之前,工作流是什么样的?
  • 这个工具能防止或缩短哪种故障?
  • 谁会使用这个输出——值班工程师、产品经理,还是自动化系统?

思考框架:

  • “没有这个工具,团队就得手动 _____。”
  • “它一出故障,就会有人感到痛苦,因为 _____。”
  • 在回答这些问题之前,先不要读文档。如果答不上来,文档只会让你更困惑。

行动:

  1. 在描述解决方案之前,先用一句通俗的话说明问题。
  2. 将之后的每个技术论断都与这句话关联起来。

判断标准: 你能够完成这句话:

  • “这个组件的存在,是为了让[某人]不必[做某件痛苦的事]。”

步骤 2:确定数据的形态

目标: 确定这个组件产生、消费或转换的数据类型——因为数据的形态决定了所有可能的查询和关联方式。

思考框架——四种数据形态:

形态描述系统示例
随时间变化的数值按固定时间间隔采样的值Prometheus、CloudWatch metrics
事件流按发生顺序排列的文本记录,每次事件一条Loki、CloudWatch Logs、Elasticsearch
请求树共享同一个 ID 的跨度层级结构Tempo、Jaeger、Zipkin
状态快照对象当前期望状态与实际状态的对比Kubernetes API、CMDB

要问的关键问题:

  • 这些数据是数值、字符串、树还是图?
  • 基数是多少——只有少量值,还是数百万个唯一键?
  • 需要保留多久——几秒、几天还是几年?
  • 数据是只追加,还是可变更?

判断标准: 你能够完成这句话:

  • “这个组件存储/产生[形态]数据,因此可以回答[类型的问题],但无法回答[类型的问题]。”

为什么重要: 数据形态决定了盲区。Prometheus 可以告诉你过去一小时的 P99 延迟,但无法告诉你为什么第 #4821 个请求特别慢。Tempo 可以告诉你第 #4821 个请求为何缓慢,却无法告诉你整体 P99。了解数据形态,就能知道该去哪里查,也知道哪些地方不必查。


步骤 3:追踪数据流 — 找出断点

目标: 绘制数据从产生到查询的完整生命周期,并找出数据消失、未被采集或无法关联的所有环节。

思考框架 — 追踪数据:

Something happens in the world
    → Who/what observes it?
    → How is it encoded?
    → How is it transmitted?
    → Who enriches or transforms it?
    → Where is it stored?
    → Who can query it?
    → What can they NOT see from here?

操作:

  1. 将数据流绘制或描述为管道,而不是静态图表。
  2. 在每个阶段明确询问:“这里丢失了什么?”
  3. 查找选择不启用监测的配置(已禁用的标志、缺失的边车、缺失的 ServiceMonitor)——这些就是断点。
  4. 按严重程度对每个断点分类:
    • 严重: 核心功能存在盲点(例如,主编排器不发送遥测数据)
    • 高: 大多数服务缺失一种完整的信号类型
    • 中: 信号存在但彼此断开(无法关联 A 和 B)
    • 低: 增强信息缺失(数据存在,但缺少上下文标签)

决策点: 你已获得按严重程度排序的断点列表。每个断点都包含:

  • 数据消失的位置
  • 导致问题的配置或代码
  • 因此工程师无法获知的信息

步骤 4:区分外层与内容

目标: 区分基础设施生成的遥测数据(平台对服务的了解)与应用生成的遥测数据(服务对自身的了解)。

外层与内容的思维模型:

ENVELOPE (platform-generated):
  The platform observes your service from the outside.
  It knows: request arrived, response sent, how long it took, status code.
  It does NOT know: what the request contained, why it was slow,
                    what business logic ran, what the LLM returned.

  Examples: Istio metrics, Kubernetes kube-state-metrics,
            load balancer access logs, VPC flow logs.

CONTENTS (application-generated):
  Your service reports on its own internal state.
  It knows: which database query ran, what the confidence score was,
            how many tokens the LLM consumed, which code path was taken.

  Examples: custom Prometheus counters, OTel trace spans,
            structured application logs, business event metrics.

要问的关键问题:

  • 对每项服务而言,可观测性来自外层、内容,还是两者兼有?
  • 如果只有外层:你知道出现了问题,但不知道原因。
  • 如果只有内容:你能了解单个请求,但可能会遗漏系统范围的模式。

思考框架:

  • “外层告诉你确实出了问题。”
  • “内容告诉你问题出在哪里。”
  • 成熟的可观测性技术栈需要为每项关键服务提供两者。

操作:

  1. 为系统中的每项服务标注:仅外层 / 仅内容 / 两者兼有 / 两者皆无。
  2. “仅外层”的服务是下一步应投入监测工作的对象。
  3. “两者皆无”的服务属于关键缺口——应立即优先处理。

决策点: 你已获得一张标明各服务覆盖类型的表格。你可以说:

  • “所有服务都有外层数据,但只有 [N] / [M] 项服务有内容数据。”

步骤 5:应用三级侦查测试

目标: 验证可观测性技术栈(或任何信息架构)能否回答所有三个诊断层级的问题。这是完整性检查。

三个层级:

Level 1 — "Is the system healthy?" (answered by Metrics / Numbers)
  Q: What is the current error rate?
  Q: Is P99 latency within SLA?
  Q: Are all pods running?
  Tool: Prometheus dashboards, alerts

Level 2 — "Where is it unhealthy?" (answered by Traces / Trees)
  Q: For this slow request, which service was the bottleneck?
  Q: Which Temporal activity failed and caused the retry?
  Q: What was the call graph for case ID 9876?
  Tool: Distributed tracing (Tempo, Jaeger)

Level 3 — "Why is it unhealthy?" (answered by Logs / Events)
  Q: What error message was printed during that span?
  Q: What was the exact SQL query that timed out?
  Q: What did the LLM API return before the timeout?
  Tool: Log aggregation (Loki, CloudWatch Logs)

评分:

  • 三个层级的问题都能回答 → 此系统的可观测性已完整
  • 只有第 1 级 → 你知道出了问题,但只能猜测原因
  • 第 1 级 + 第 3 级 → 你有原始证据,但没有关联这些证据的地图
  • 缺少第 2 级 → 你无法追踪单个请求;调试需要手动重建过程

跨信号加成(第 4 级): 当三个层级相互关联时——指标峰值关联到示例追踪,追踪跨度关联到对应的日志行——你将获得第四种能力:

Level 4 — "Show me the evidence chain"
  Click a metric spike → jump to example trace
  Click a trace span   → jump to correlated log lines
  Click a log error    → jump to the trace that produced it

决策点: 你可以说明当前的层级覆盖情况:

  • “系统可以回答第 [N] 级问题,但无法回答第 [N+1] 级问题。”
  • “下一步应投入 [component],以支持回答第 [level] 级问题。”

步骤 6:生成输出

目标: 将分析转化为最适合受众的形式。

面向不同受众的输出格式:

受众最佳格式
学习新系统的工程师配有 ASCII 图表和具体示例的学习文档
决定下一步构建内容的团队按严重程度排序的差距表 + 建议的架构图
正在调试问题的工程师针对特定请求类型的数据流跟踪
了解投资情况的经理使用通俗语言编写的改进前后能力对比表

适用于所有输出的原则:

  1. 先讲痛点,而不是解决方案。 第一段应描述问题,而不是工具。
  2. 一张图表达一个信息。 每个 ASCII 图表都应只有一个核心观点。如果试图表达两件事,就拆成两张图。
  3. 先具体,后抽象。 先展示真实示例(具体请求、具体案例 ID、具体错误),再说明一般模式。
  4. 明确指出盲区。 好的分析会说明哪些信息无从得知,而不只是说明已知的信息。
  5. “前后对比”是点睛之笔。 并列展示当前状态和目标状态——分析的价值在这里一目了然。

应用于任何领域

此框架并非专为可观测性设计。它适用于任何复杂系统:

CI/CD pipeline:
  Pain      → "Builds fail and no one knows why or which step"
  Shape     → Event stream of job executions with status and duration
  Breaks    → Test logs not captured, no artifact lineage
  Envelope  → GitHub status checks (passed/failed)
  Contents  → Test output, coverage reports, build timing per stage
  Test      → L1: did it pass? L2: which step failed? L3: what was the error?

Database architecture:
  Pain      → "Queries are slow and we don't know which ones"
  Shape     → Number over time (query latency, connection pool usage)
  Breaks    → Slow query log disabled, no per-query tracking
  Envelope  → CPU/memory of DB instance
  Contents  → Query execution plans, index hit rates, lock contention
  Test      → L1: is DB healthy? L2: which query is slow? L3: why is it slow?

Organizational structure:
  Pain      → "Decisions made in one team surprise another team"
  Shape     → State snapshot (who owns what, what is decided)
  Breaks    → No RFC process, no decision log
  Envelope  → Org chart (who exists)
  Contents  → Decision records, runbooks, team charters
  Test      → L1: does the team exist? L2: who owns this? L3: why was this decided?

该框架具有普适性,因为其根本问题始终相同:

信息存在于何处,又在哪里消失?谁会因缺少这些信息而受到影响?


向用户呈现结果

分析完成后,按以下顺序呈现:

  1. 痛点 — 用一句话说明存在什么问题
  2. 当前状态图 — 用 ASCII 图表展示当前存在的内容及数据流向
  3. 差距表 — 按优先级排序,列出哪些信息无从得知以及原因
  4. 目标状态图 — 用 ASCII 图表展示填补差距后系统的样子
  5. 改进前后能力对比表 — 列出哪些问题将变得可回答

始终以以下句子结尾:“当前最具杠杆效应的下一步行动是[具体事项],因为它能为[最关键的服务/路径]解答[第 N 级]问题。”

评论

支持 Markdown