These sources ( microsoft docs , microsoft dev blog ) state that in order to use the new W3C Trace Context Headers in a .net 3.0+ core application no extra configuration is required. However, we are not receiving traceparent or tracestate from any request made via a ServiceClient.
What is the proper setup process? How did you guys get access to a distributed trace id? We prefer to expose those values automaticaly without adding a lot of code to all existing services, if that's possible.
Thank you very much in advance!
PS: this is my first question here; please let me know if you need further information
The System.Diagnostics.Activity
Id in .net 5 has already been configured as the w3c standard . It means that all Actions
will be identifiable by a traceparent
id format and both traceparent
and tracestate
will be sent to downstream dependencies in the http
request header. As you said, no extra configuration is required, but in .net 3 is different, the default id format is the Hierarchical
one and it's downstream propagated as a HeaderRequestId
. To see the Activity Id format, import the System.Diagnostics
to your class and type: Console.WriteLine(Activity.Current.Id)
, you'll see a format like this: |fab6082c-46326cca135ffe48.1.
. To change it to the w3c format in .net 3 is required to force it in your main method:
public static void Main(string[] args)
{
Activity.DefaultIdFormat = ActivityIdFormat.W3C;
Activity.ForceDefaultIdFormat = true;
CreateHostBuilder(args).Build().Run();
}
Then, you'll see w3c's format and also the traceparent
and tracestate
fields been propagated to the downstream dependencies in the header.
If you want to send messages throw a broker, use the application-properties
section in case of AMQP calls . You'll find some examples of both cases here and here .
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.