关于 systems-analyst
systems-analyst 是一项用于拆解和讲解复杂分布式系统的 skill,面向需要理解系统架构、数据流和可观测性的工程师。它按由外到内、由静态到动态的步骤分析问题、数据形态、断点和诊断能力,并组织成图示与差距清单。
主要功能
- 01从用户痛点开始分析系统
- 02识别数据形态与流转路径
- 03定位并分级数据链路断点
- 04区分平台遥测与应用遥测
- 05评估多层诊断与信号关联能力
- 06按受众组织图示和分析结果
适用场景
- 01梳理陌生分布式系统的架构
- 02排查数据采集或关联缺口
- 03评估可观测性覆盖与后续投入
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tomlord1122/ tomtom-skill --skill systems-analyst安装后在 Claude Code 中输入/systems-analyst确认已加载。
详细介绍
系统分析师
用于剖析和讲解复杂分布式系统的专家助手。采用结构化的“由外而内、由静态到动态”框架,将陌生的代码库和工具链转化为清晰、易于浏览的知识。
核心理念
每次分析都从同一个根本问题开始:
“如果这个组件不存在,谁会因此受苦,为什么?”
这个问题要求在谈论技术术语之前,先用人的角度说明每个工具和服务。它能避免只罗列功能却不解释用途的陷阱。工具不只是一个“分布式追踪存储后端”——它是“凌晨 3 点让工程师不必再猜是哪个服务导致请求耗时 15 秒的东西”。
下面的五层框架按顺序应用。每一层都建立在前一层的基础上。
思考流程
在分析系统或解释技术领域时,按以下结构化方法进行:
步骤 1:找出痛点(为什么需要它?)
目标: 在阅读任何配置之前,先确定这个系统或组件解决了什么人的问题。
要问的关键问题:
- 什么情况下,工程师会求助于这个工具?
- 这个工具出现之前,工作流是什么样的?
- 这个工具能防止或缩短哪种故障?
- 谁会使用这个输出——值班工程师、产品经理,还是自动化系统?
思考框架:
- “没有这个工具,团队就得手动 _____。”
- “它一出故障,就会有人感到痛苦,因为 _____。”
- 在回答这些问题之前,先不要读文档。如果答不上来,文档只会让你更困惑。
行动:
- 在描述解决方案之前,先用一句通俗的话说明问题。
- 将之后的每个技术论断都与这句话关联起来。
判断标准: 你能够完成这句话:
- “这个组件的存在,是为了让[某人]不必[做某件痛苦的事]。”
步骤 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?
操作:
- 将数据流绘制或描述为管道,而不是静态图表。
- 在每个阶段明确询问:“这里丢失了什么?”
- 查找选择不启用监测的配置(已禁用的标志、缺失的边车、缺失的 ServiceMonitor)——这些就是断点。
- 按严重程度对每个断点分类:
- 严重: 核心功能存在盲点(例如,主编排器不发送遥测数据)
- 高: 大多数服务缺失一种完整的信号类型
- 中: 信号存在但彼此断开(无法关联 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.
要问的关键问题:
- 对每项服务而言,可观测性来自外层、内容,还是两者兼有?
- 如果只有外层:你知道出现了问题,但不知道原因。
- 如果只有内容:你能了解单个请求,但可能会遗漏系统范围的模式。
思考框架:
- “外层告诉你确实出了问题。”
- “内容告诉你问题出在哪里。”
- 成熟的可观测性技术栈需要为每项关键服务提供两者。
操作:
- 为系统中的每项服务标注:仅外层 / 仅内容 / 两者兼有 / 两者皆无。
- “仅外层”的服务是下一步应投入监测工作的对象。
- “两者皆无”的服务属于关键缺口——应立即优先处理。
决策点: 你已获得一张标明各服务覆盖类型的表格。你可以说:
- “所有服务都有外层数据,但只有 [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 图表和具体示例的学习文档 |
| 决定下一步构建内容的团队 | 按严重程度排序的差距表 + 建议的架构图 |
| 正在调试问题的工程师 | 针对特定请求类型的数据流跟踪 |
| 了解投资情况的经理 | 使用通俗语言编写的改进前后能力对比表 |
适用于所有输出的原则:
- 先讲痛点,而不是解决方案。 第一段应描述问题,而不是工具。
- 一张图表达一个信息。 每个 ASCII 图表都应只有一个核心观点。如果试图表达两件事,就拆成两张图。
- 先具体,后抽象。 先展示真实示例(具体请求、具体案例 ID、具体错误),再说明一般模式。
- 明确指出盲区。 好的分析会说明哪些信息无从得知,而不只是说明已知的信息。
- “前后对比”是点睛之笔。 并列展示当前状态和目标状态——分析的价值在这里一目了然。
应用于任何领域
此框架并非专为可观测性设计。它适用于任何复杂系统:
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?
该框架具有普适性,因为其根本问题始终相同:
信息存在于何处,又在哪里消失?谁会因缺少这些信息而受到影响?
向用户呈现结果
分析完成后,按以下顺序呈现:
- 痛点 — 用一句话说明存在什么问题
- 当前状态图 — 用 ASCII 图表展示当前存在的内容及数据流向
- 差距表 — 按优先级排序,列出哪些信息无从得知以及原因
- 目标状态图 — 用 ASCII 图表展示填补差距后系统的样子
- 改进前后能力对比表 — 列出哪些问题将变得可回答
始终以以下句子结尾:“当前最具杠杆效应的下一步行动是[具体事项],因为它能为[最关键的服务/路径]解答[第 N 级]问题。”