mcpField
O
observability-fundamentals

observability-fundamentals

github.com/honeycombio云与 DevOps2855 次安装3 周前更新
代码仓库

关于 observability-fundamentals

面向工程师的概念性技能,介绍 Honeycomb 的可观测性方法。内容涵盖宽事件、维度分析和调查循环,并说明如何将埋点选择用于根因分析。

主要功能

  1. 01解释宽事件与 Span
  2. 02区分事件、指标和日志
  3. 03说明基数与维度
  4. 04概述调查分析循环
  5. 05关联埋点与根因分析

适用场景

  1. 01选择有用的遥测属性
  2. 02理解基于事件的可观测性
  3. 03组织事故调查
  4. 04识别埋点缺口

安装

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

$npx skills add https://github.com/honeycombio/agent-skill --skill observability-fundamentals

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

附带文件references/events-vs-metrics-vs-logs.md

详细介绍

可观测性基础

Honeycomb 可观测性方法背后的第一性原理。可用它为建议提供依据并回答概念性问题;有关 SDK 设置和特定工具的指导,请参阅 otel-instrumentation 和 query-patterns 技能。

定义

可观测性:通过检查系统产生的数据,理解并解释系统可能进入的任何状态的能力,无论状态多么新颖或复杂,而且无需针对每个新问题部署新代码。

宽事件:捕获一个工作单元完整上下文的扁平键值记录,包括请求发起者、端点、缓存命中/未命中、构建版本、耗时、错误状态,以及与操作相关的任何业务上下文。在 OpenTelemetry 中,span 就是一个宽事件。

高基数:一个字段可能拥有的唯一值数量。包含数百万个值的 user.id 属于高基数。只有少数几个值的 http.method 属于低基数。

高维度:事件中不同字段的数量。包含 50 个属性的 span 具有高维度。

概念可观测性传统监控
问题任意,事先未知预先定义(仪表板、警报)
数据形态在查询时决定在埋点时决定
基数高基数很有价值高基数成本高
调查探索 → 缩小范围 → 确认查看仪表板 → 升级处理

为什么使用宽事件

你收集的数据形态会限制之后可以提出的问题。指标会在埋点时预先聚合并丢弃上下文。宽事件则保留上下文,让你在查询时决定分析的形态。

span 上的每个属性都是可查询的维度。在同一个 span 中添加 user.id、deployment.version 和 cache.hit,即可在单个查询中将它们关联起来——“较慢的请求来自租户 X,使用版本 2.3.1,且缓存未命中。”单独的指标无法做到这一点,因为每种维度组合都会创建一个新的时间序列。

Honeycomb 的存储引擎可以处理高基数和高维度,而不会像指标系统那样导致成本激增。添加 user.id 这类高基数字段不会创建数百万个时间序列——它只是每个事件上的另一个列,在查询时进行聚合。

事件与指标、日志的对比

结构化事件(Spans)指标日志
捕获内容完整的请求上下文(所有属性)带低基数标签的预聚合数值每行的文本或结构化字段
丢弃内容不丢弃任何内容——保留原始事件单个请求、高基数维度行与行之间的关联(没有跟踪上下文时)
查询能力可对任意维度执行 GROUP BY、筛选、BubbleUp对预定义维度进行快速聚合文本搜索、结构化字段查询
成本变化随事件量线性增长随维度数量(基数)呈指数增长随数据量线性增长,查询成本不一
最适用于调查、根因分析低成本警报、长期趋势审计跟踪、罕见事件

同样的埋点工作,既可以生成指标或日志行,也可以生成宽事件;而事件能提供这三种能力:计数(指标)、读取(日志)、跨维度分析(可观测性)。

如需查看同一操作采用三种方式进行埋点的代码示例,请参阅 ${CLAUDE_PLUGIN_ROOT}/skills/observability-fundamentals/references/events-vs-metrics-vs-logs.md。

核心分析循环

在 Honeycomb 中调试遵循一个循环:定义 → 可视化 → 调查 → 评估。

  1. 定义 — 明确问题。从告警、SLO 预算消耗或用户报告入手。
  2. 可视化 — 运行查询,查看问题的形态(HEATMAP、COUNT、P99)。
  3. 调查 — 使用 BubbleUp(自动比较所有维度上的异常值与基线)和追踪分析缩小范围。
  4. 评估 — 通过查询有无疑似原因的情况,验证假设。

然后继续循环——每个答案都会引出新的问题。BubbleUp 会比较每一列中的分布,自动完成第 2-3 步,但前提是事件包含足够多可供比较的维度。

如需了解如何使用 Honeycomb 工具实现这一循环的结构化工作流,请参阅 production-investigation 技能。

检测如何与调查相连

Span 上的每个属性都是一个维度,BubbleUp 可用它来查找根本原因。事件期间最重要的属性可回答三个问题:

  • 谁受到影响? — 用户、租户、账户层级、区域
  • 发生了什么变化? — 部署版本、功能标志、配置版本
  • 瓶颈在哪里? — 业务操作 Span、耗时细分、缓存状态

检测应围绕你凌晨 3 点会提出的问题进行,而非追求面面俱到。如果调查期间 BubbleUp 没有返回有用结果,通常是检测存在缺口——添加缺失的维度并重试。

完整的属性目录请参阅 ${CLAUDE_PLUGIN_ROOT}/skills/otel-instrumentation/references/wide-event-attributes.md。 有关添加属性的 SDK 指南,请参阅 otel-instrumentation 技能。

将检测作为开发实践

检测并非一次性设置任务。编写代码的工程师最了解哪些操作至关重要、哪些路径容易出错,以及哪些上下文有助于调试。应像对待测试一样对待检测:规划功能时规划遥测,在代码审查中检查遥测,并将补充缺失维度作为事件后续跟进工作。

其他资源

参考文件
  • ${CLAUDE_PLUGIN_ROOT}/skills/observability-fundamentals/references/events-vs-metrics-vs-logs.md — 代码示例:将同一操作表示为事件、指标和日志
交叉引用
  • 有关 SDK 设置和自定义检测:otel-instrumentation 技能
  • 有关实现核心分析循环的调查工作流:production-investigation 技能
  • 有关自主分析检测缺口:instrumentation-advisor Agent

评论

支持 Markdown