You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以惯用方式集成Effect TS、OpenTelemetry与DataDog(OTLP方式)?

Effect TS 集成 Datadog 追踪(基于OTLP + Datadog Agent)

1. 安装依赖

首先安装Effect OpenTelemetry集成包及OTLP相关依赖:

npm install @effect/opentelemetry @opentelemetry/exporter-trace-otlp-http @opentelemetry/sdk-trace-base @opentelemetry/resources @opentelemetry/semantic-conventions

2. 构建OTLP导出器与Trace配置层

按照Effect TS的Layer优先风格,封装Datadog OTLP导出的配置:

import { Effect, Layer } from "effect";
import { Trace } from "@effect/opentelemetry";
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
import { Resource } from "@opentelemetry/resources";
import { SEMRESATTRS_SERVICE_NAME } from "@opentelemetry/semantic-conventions";

// 配置OTLP导出器,指向Datadog Agent的HTTP端点
const OtlpExporterLayer = Layer.succeed(
  Trace.SpanExporter,
  new OTLPTraceExporter({
    url: "http://localhost:4318/v1/traces", // Datadog Agent默认OTLP HTTP接收地址
    // 若Agent部署在远程或需要认证,可添加headers,例如:
    // headers: { "DD-API-KEY": "your-datadog-api-key" }
  })
);

// 设置服务标识(Datadog APM需要该字段区分服务)
const ServiceResourceLayer = Layer.succeed(
  Trace.Resource,
  new Resource({
    [SEMRESATTRS_SERVICE_NAME]: "your-effect-application",
  })
);

// 整合Trace完整配置层
const DatadogTraceLayer = Trace.layer({
  sampler: Trace.samplerAlwaysOn, // 生产环境可调整为按比例采样
  resource: ServiceResourceLayer,
  spanExporter: OtlpExporterLayer,
});

3. 在应用中注入Trace层

将Trace配置层通过provide注入到应用逻辑中,保持Effect的纯函数风格:

import { Effect, LogLevel } from "effect";
import { Trace } from "@effect/opentelemetry";

// 示例业务逻辑,使用Trace创建Span
const businessLogic = Effect.gen(function* (_) {
  const tracer = yield* _(Trace.tracer);
  
  yield* _(
    tracer.startSpan("checkout-process", { attributes: { "user.id": "12345" } }),
    Effect.flatMap((span) =>
      Effect.log("Processing user checkout...", { level: LogLevel.Info }).pipe(
        Effect.flatMap(() => Effect.sleep("200 millis")),
        Effect.finally(span.end) // 确保Span正确结束
      )
    )
  );
});

// 运行应用并注入Datadog Trace配置
Effect.run(businessLogic.pipe(Effect.provide(DatadogTraceLayer)));

4. 验证Datadog Agent配置

确保Datadog Agent已启用OTLP接收(默认开启),可检查Agent配置文件datadog.yaml:

otlp_config:
  receiver:
    protocols:
      http:
        endpoint: 0.0.0.0:4318

重启Agent后,运行Effect应用即可在Datadog APM界面看到服务your-effect-application的追踪数据。

关键注意点

  • 始终用Effect的Layer管理外部依赖,避免全局初始化副作用
  • 生产环境建议调整采样策略为Trace.samplerParentBased(Trace.samplerTraceIdRatio(0.1))以控制追踪量
  • 若Agent不在本地,需修改OTLP导出器的url为Agent所在地址

内容的提问来源于stack exchange,提问作者Andrei Koch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 03:42:43