We are running a dockerized ASP.NET Core app within AWS ECS Fargate. We want to add Open Telemetry to our project – I tried to add only corresponding code (libraries + injection + configuration) to set it up, assuming it would get AWS credentials by default (running inside AWS service) – but the traces don’t make it up to AWS X-Ray. The code and docker file is as below. Note that running Console Exporter seems to be picking up the traces.
- Can I avoid running otel collector as a separate service? (either as sidecar or a separate container)
- Do you think anything misconfigured below?
Thanks in advance…
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 File is as below:
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"]