ActivitySource.StartActivity 返回 null,就好像没有侦听器一样,即使定义了控制台侦听器

jun*_*one 6 c# profiling jaeger open-telemetry

该代码使用控制台跟踪提供程序。但是,在函数 static void MakeActivity(string name) 中,ActivitySource.startActivity 行返回 null。我该如何修复它?

谷歌上的示例有“using”关键字,我无法将其应用于我的项目ID绑定的.net 4.7。

     /// <summary>
    /// Starts up the OpenTelemetry and JeagerTracing connection
    /// </summary>
  using OpenTelemetry;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UnitTestProject1
    {
        class Program
        {
            private static ResourceBuilder BackendServiceResource { get; set; }

            private static readonly ActivitySource ActivitySource = new ActivitySource("Sample.DistributedTracing");

            private static readonly string serveradress = "127.0.0.1";
            private static readonly int serverPort = 6831;

            public static TracerProvider Provider { get; set; }

            public static Tracer OpenTelemetryTracer { get; set; }

            static void Main(string[] args)
            {
            var serviceName = "MyCompany.MyProduct.MyService";
            var serviceVersion = "1.0.0";
            Provider = GetConsoleTraceProvider(serviceName, serviceVersion);
                OpenTelemetryTracer = Provider.GetTracer(ActivitySource.Name);

                MakeActivity("Test 1");
                MakeActivity("Test 2");
                MakeActivity("Test 3");
                MakeActivity("Test 4");
                MakeActivity("Test 5");

            }

            static void MakeActivity(string name)
            {
                Activity activity = ActivitySource.StartActivity(name); // this returns null even though i have a trace provider setup using GetConsoleTraceProvider
                activity.AddTag("machine.name", Environment.MachineName); 
                activity.AddTag("user.name", Environment.UserName);

                Task.Delay(5000);

                activity.Stop();
            }

        public static TracerProvider GetConsoleTraceProvider(string serviceName,string serviceVersion)
        {
            // Configure important OpenTelemetry settings and the console exporter
             var tracerProvider = Sdk.CreateTracerProviderBuilder()
                .AddSource(serviceName)
                .SetResourceBuilder(
                    ResourceBuilder.CreateDefault()
                        .AddService(serviceName: serviceName, serviceVersion: serviceVersion))
                .AddConsoleExporter()
                .Build();
            return tracerProvider;
        }
        


        }
    } 
Run Code Online (Sandbox Code Playgroud)

与此代码示例的工作原理相同,因为我正在使用 ac# 10 功能。

    using System.Diagnostics;

using OpenTelemetry;
using OpenTelemetry.Trace;
using OpenTelemetry.Resources;
using OpenTelemetry.Exporter;

// Define some important constants and the activity source
var serviceName = "MyCompany.MyProduct.MyService";
var serviceVersion = "1.0.0";

// Configure important OpenTelemetry settings and the console exporter
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
    .AddSource(serviceName)
    .SetResourceBuilder(
        ResourceBuilder.CreateDefault()
            .AddService(serviceName: serviceName, serviceVersion: serviceVersion))
    .AddConsoleExporter()
    .Build();




var MyActivitySource = new ActivitySource(serviceName);

using var activity = MyActivitySource.StartActivity("SayHello");
activity?.SetTag("foo", 1);
activity?.SetTag("bar", "Hello, World!");
activity?.SetTag("baz", new int[] { 1, 2, 3 });
Run Code Online (Sandbox Code Playgroud)