关于 iii-observability
iii-observability 是用于在 iii engine 中配置和应用遥测模式的技能,涵盖自动追踪、自定义 Span 与指标、日志订阅,以及 Worker 调用间的追踪上下文传播。
主要功能
- 01自动追踪函数调用
- 02通过 OTLP 导出追踪、指标和日志
- 03传播 W3C 追踪上下文
- 04在 9464 端口提供 Prometheus 指标
- 05创建自定义 Span 和指标
- 06订阅日志事件
适用场景
- 01追踪 Worker 函数和外部调用
- 02将 iii 追踪与外部日志关联
- 03向兼容 OTLP 的收集器发送遥测数据
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ iii-hq/ skills --skill iii-observability安装后在 Claude Code 中输入/iii-observability确认已加载。
详细介绍
可观测性
可与以下产品媲美:Datadog、Grafana、Honeycomb、Jaeger
核心概念
在适合任务的情况下使用以下概念。并非每个 worker 都需要自定义 span 或指标。
- 所有 SDK 均内置 OpenTelemetry 支持 — 每次函数调用都会自动生成追踪数据
- 引擎通过 OTLP 将追踪数据、指标和日志导出到任何兼容的收集器
- worker 会在函数调用之间自动传播 W3C trace context
- Prometheus 指标通过端口 9464 暴露
registerWorker()配置otel后可为每个 worker 启用遥测- 通过
withSpan(name, opts, fn)创建自定义 span,为异步任务添加追踪上下文 - 通过
getMeter()创建自定义指标,包括计数器和直方图
架构
worker SDK 会在函数执行期间生成 span、指标和日志。这些数据会流向引擎,再由引擎通过 OTLP 导出到收集器(Jaeger、Grafana、Datadog)。引擎还会在端口 9464 暴露 Prometheus 端点,以供抓取。
使用的 iii 原语
| 原语 | 用途 |
|---|---|
registerWorker(url, { otel }) | 使用遥测配置连接 worker |
withSpan(name, opts, fn) | 创建自定义追踪 span |
getTracer() | 直接访问 OpenTelemetry Tracer |
getMeter() | 访问用于创建自定义指标的 OpenTelemetry Meter |
currentTraceId() | 获取用于关联的活动追踪 ID |
injectTraceparent() | 将 W3C trace context 注入出站调用 |
onLog(callback, { level }) | 订阅日志事件 |
shutdown_otel() | 以优雅方式关闭遥测管线 |
参考实现
完整可运行示例见 ../references/observability.js:其中包含一个带有自定义 span 的 worker,
另有 Python 版本:../references/observability.py
另有 Rust 版本:../references/observability.rs 指标计数器、追踪传播,以及连接到 OTel 收集器的日志订阅。
常见模式
使用此模式的代码通常会在适用时包含:
registerWorker('ws://localhost:49134', { otel: { enabled: true, serviceName: 'my-svc' } })— 启用遥测withSpan('validate-order', {}, async (span) => { span.setAttribute('order.id', id); ... })— 自定义 spangetMeter().createCounter('orders.processed')— 自定义计数器指标getMeter().createHistogram('request.duration')— 自定义直方图指标onLog((log) => { ... }, { level: 'warn' })— 订阅警告及更高级别的日志currentTraceId()— 获取活动追踪 ID,以便与外部系统关联injectTraceparent()— 将追踪上下文传播到出站 HTTP 调用- 禁用遥测:
registerWorker(url, { otel: { enabled: false } })或OTEL_ENABLED=false
调整此模式
在适用于任务的情况下使用以下调整方式。
- 在
registerWorker()配置中启用otel,以开始自动收集追踪数据 - 在耗时操作(数据库查询、大模型调用、外部 API)周围添加自定义 span
- 创建特定领域的指标(已处理订单数、支付失败次数、队列深度)
- 使用
currentTraceId()将 iii 追踪数据与外部系统日志关联 - 在 iii-config.yaml 中配置
OtelModule,设置引擎侧导出器、采样率和告警 - 将 OTLP 端点指向你的收集器(Jaeger、Grafana Tempo、Datadog Agent)
引擎配置
必须在 iii-config.yaml 中启用 OtelModule,才能获取引擎侧的追踪数据、指标和日志。完整的注释版配置参考见 ../references/iii-config.yaml。
模式边界
- 对于引擎端 OtelModule YAML 配置,优先使用
iii-engine-config。 - 对于 SDK 初始化选项和函数注册,优先使用
iii-functions-and-triggers。 - 如果主要问题是 SDK 级遥测:span、指标、日志和 trace 传播,则使用
iii-observability。
适用场景
- 当任务主要涉及 iii 引擎中的
iii-observability时,使用此技能。 - 当请求直接要求使用此模式或实现等效方案时,使用此技能。
边界
- 切勿将此技能用作无关任务的通用兜底方案。
- 如果有更具体的 iii 技能更适合,则不得使用此技能。
- 在应用此技能中的示例之前,务必先确认环境和安全约束。
评论
支持 Markdown