我们正在 AWS ECS Fargate 中运行一个 dockerized ASP.NET Core 应用程序。我们想要将 Open Telemetry 添加到我们的项目中 - 我尝试仅添加相应的代码(库 + 注入 + 配置)来设置它,假设它默认情况下会获取 AWS 凭证(在 AWS 服务内运行) - 但跟踪不会弥补 AWS X-Ray 的不足。代码和docker文件如下。请注意,运行 Console Exporter 似乎正在拾取痕迹。
提前致谢...
services.AddOpenTelemetry()
.WithTracing(builder =>
{
var options = new OpenTelemetryOptions();
configuration.GetSection(OpenTelemetryOptions.OptionsKey).Bind(options);
builder.SetResourceBuilder(ResourceBuilder.CreateDefault()
.AddService(options.ServiceName, autoGenerateServiceInstanceId: false))
.AddSource(sourceName.Name);
if (options.TraceExportMode == TraceExportMode.OpenTelemetryAws)
{
builder.AddXRayTraceId();
Sdk.SetDefaultTextMapPropagator(new AWSXRayPropagator());
}
switch (options.TraceExportMode)
{
case TraceExportMode.OpenTelemetryAws:
{
builder.SetSampler(new AlwaysOnSampler()).AddOtlpExporter(o =>
{
o.Endpoint = new Uri(options.OpenTelemetryEndpoint);
o.Headers = options.OpenTelemetryHeaders;
o.TimeoutMilliseconds = options.OpenTelemetryTimoutMilliseconds;
o.ExportProcessorType = options.EnableBatching
? ExportProcessorType.Batch
: ExportProcessorType.Simple;
o.BatchExportProcessorOptions =
BuildBatchExportProcessorOptions(options);
});
break;
}
default:
{
builder.SetSampler(new AlwaysOffSampler());
break;
}
}
});
services.AddSingleton(_ => new ActivitySource(sourceName.Name ?? string.Empty, sourceName.Version?.ToString()));
Docker 文件如下:
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:7.0 as sdk
RUN dotnet tool install --global dotnet-counters
RUN dotnet tool install --global dotnet-dump
RUN dotnet tool install --global dotnet-gcdump
RUN dotnet tool install --global dotnet-stack
RUN dotnet tool install --global dotnet-trace
FROM base AS final
## Copy dotnet tools
COPY --from=sdk /root/.dotnet/tools/ /opt/bin
ENV PATH="/opt/bin:${PATH}"
***** ..... *****
## Copy service
WORKDIR /app
COPY ./Artifacts/MyProject .
ENTRYPOINT ["dotnet", "MyProject.dll"]
是的,您可以使用 Cloudformation 模板将 ADOT Collector 部署为 sidecar https://aws-otel.github.io/docs/setup/ecs/cfn-for-ecs-fargate。