SuperAPI AI 工具集

observability

编程与开发

查看项目

更新于 10-16 10:44

技能介绍

用途

本技能用于在 Effect 中构建可观测性能力。Effect 内置了日志、指标与追踪三类可观测性机制,且均与其执行模型无缝集成。当需要为用户解答 Effect 日志、指标、追踪、span、telemetry、Metric.counter 等主题时,可依据本技能提供的示例与说明进行讲解。

主要能力

日志(Logging)

  • 结构化、带级别的日志记录,提供的基础日志函数包括:Effect.log、Effect.logDebug、Effect.logInfo、Effect.logWarning、Effect.logError、Effect.logFatal。
  • 日志级别:可通过 Logger.withMinimumLogLevel(LogLevel.Info) 设置最低日志级别;可用级别从低到高为 Trace、Debug、Info、Warning、Error、Fatal、None。
  • 结构化日志:使用 Effect.annotateLogs 添加结构化数据(如 userId、action、ip),注解作用于作用域内的所有日志。
  • 日志跨度:使用 Effect.withLogSpan("request-handler") 为日志添加计时/上下文跨度,日志中会包含类似 [request-handler 45ms] 的信息。
  • 自定义 Logger:通过 Logger.make 创建,访问 logLevel、message、annotations、date 等字段,并用 Effect.provide(Logger.replace(...)) 替换默认 Logger。

指标(Metrics)

  • Counter(计数器):追踪发生次数,使用 Metric.counter 创建,通过 Metric.increment、Metric.incrementBy 增加,也可用 Metric.trackAll 自动追踪效果执行次数。
  • Gauge(仪表):追踪当前值,使用 Metric.gauge 创建,通过 Metric.set、Metric.incrementBy、Metric.decrementBy 调整。
  • Histogram(直方图):追踪分布,使用 Metric.histogram 创建,可指定 boundaries,通过 Metric.observe 记录观测值,或用 Metric.trackDuration 追踪耗时。
  • Summary(摘要):统计摘要,使用 Metric.summary 创建,支持 maxAge、maxSize、quantiles 等参数。
  • Frequency(频率):按标签计数,使用 Metric.frequency 创建并观察取值(如状态码)。
  • 标签化指标:通过 Metric.tagged 添加静态标签,通过 Metric.taggedWithLabels 使用动态标签。
  • 读取指标:使用 Metric.value 获取快照(包含 count 等字段)。

追踪(Tracing)

  • 创建 span:使用 Effect.withSpan("handle-request"),可传入 attributes 添加属性。
  • 嵌套 span:外层 span 可包裹多个子 span,形成父子结构(如 main-operation 下含 fetch-user、process-data、save-result)。
  • 添加 span 属性:使用 Effect.annotateCurrentSpan 添加键值(如 user.id、event、result.status)。
  • Span 状态:使用 Effect.setSpanStatus 设置 code 为 error 及 message 等信息。
  • 自定义 Tracer:使用 Tracer.make 实现 span、attribute、end、event、status 等回调,并通过 Tracer.layer 提供。
  • OpenTelemetry 集成:使用 @effect/opentelemetry 的 NodeSdk.layer 配合 OTLPTraceExporter 等搭建追踪层。

组合使用

日志、指标与 span 可以组合在同一 Effect 流程中:接收请求时记录日志并添加日志注解,递增指标,处理请求后为当前 span 添加属性、记录耗时指标,并通过 Effect.withSpan 包裹整体逻辑并附加 HTTP 方法与 URL 等属性。

使用方式

在 Effect 程序中使用 Effect.gen 生成器函数编写逻辑,并将各操作 yield* 出来;可观测性操作可作为管道操作符(pipe)附加到 Effect 上,例如用 Effect.withSpan 包裹、用 Metric.trackAll 追踪、用 Effect.annotateLogs 添加日志注解。自定义 Logger、Tracer 与 OpenTelemetry 层通过 Effect.provide 注入。

适用场景

适用于在使用 Effect 构建的 TypeScript 应用中需要日志、指标、分布式追踪等可观测能力时;包括排查问题、监控请求量与延迟、追踪错误、对接 OpenTelemetry 等场景。

限制

资料未说明该技能的收费、价格、平台支持范围或性能效果等信息,这些内容暂未提供。更多可观测性文档可参考 ${CLAUDE_PLUGIN_ROOT}/references/llms-full.txt,其中可查找 "Built-in Logging"、"Metrics"、"Tracing" 等章节。