To fix it I have to create my subsegment and add the trace ID in the right format, this documentation helps me to find this missing part.
this is the final code:
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
string traceId = AWSXRayRecorder.Instance.GetEntity()?.TraceId ?? "Not Available";
AWSXRayRecorder.Instance.BeginSubsegment($"HttpRequest-{request.RequestUri}");
try
{
_logger.LogInformation("XRayTracingHandler - Sending request to {Url}", request.RequestUri);
var entity = AWSXRayRecorder.Instance.GetEntity();
if (entity != null)
{
if (!request.Headers.Contains("X-Amzn-Trace-Id"))
{
var subsegmentId = entity.Id;
var sampled = AWSXRayRecorder.Instance.IsTracingDisabled() ? "0" : "1";
var traceHeader = $"Root={traceId};Parent={subsegmentId};Sampled={sampled}";
request.Headers.Add("X-Amzn-Trace-Id", traceHeader);
}
}
var response = await base.SendAsync(request, cancellationToken);
AWSXRayRecorder.Instance.AddAnnotation("HttpRequest", request.RequestUri?.ToString() ?? "Unknown");
AWSXRayRecorder.Instance.AddAnnotation("HttpStatus", response.StatusCode.ToString());
return response;
}
catch (Exception ex)
{
_logger.LogError(ex, "XRayTracingHandler - Exception occurred");
AWSXRayRecorder.Instance.AddException(ex);
throw;
}
finally
{
AWSXRayRecorder.Instance.EndSubsegment();
}
}