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

问题描述 投票:0回答:1

代码使用Console Trace Provider。但是,在函数 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;
        }
        


        }
    } 

此代码示例与我使用 c# 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 });
c# profiling jaeger open-telemetry
1个回答
0
投票

由于某种原因,它需要 AddSource() 来跟踪工作

© www.soinside.com 2019 - 2024. All rights reserved.