如何以惯用方式集成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
相关产品推荐
相关产品推荐

