C # .Net Core로 원격 Jaegertracing에 연결

조나스 린다 흘

C #과 관련하여 Opentracing 및 Jaegertracing에 몇 가지 문제가 있습니다. 이전에이 작업을 수행했지만 Java 프로젝트를 사용했습니다. 그래서 C # .NET Core 웹 서비스와 관련하여 무엇을 놓치고 있는지 궁금해하기 시작합니다.

이것은 내 추적기를 사용하기 시작하는 내 수업입니다.

    public static class MyTracer
    {
        public static ITracer tracer = null;

        public static ITracer InitTracer()
        {
            Environment.SetEnvironmentVariable("JAEGER_SERVICE_NAME", "my-store");
            Environment.SetEnvironmentVariable("JAEGER_AGENT_HOST", "192.168.2.27");
            Environment.SetEnvironmentVariable("JAEGER_AGENT_PORT", "6831");
            Environment.SetEnvironmentVariable("JAEGER_SAMPLER_TYPE", "const");                     
            Environment.SetEnvironmentVariable("JAEGER_REPORTER_LOG_SPANS", "false");
            Environment.SetEnvironmentVariable("JAEGER_SAMPLER_PARAM","1");
            Environment.SetEnvironmentVariable("JAEGER_SAMPLER_MANAGER_HOST_PORT", "5778");
            Environment.SetEnvironmentVariable("JAEGER_REPORTER_FLUSH_INTERVAL" , "1000");
            Environment.SetEnvironmentVariable("JAEGER_REPORTER_MAX_QUEUE_SIZE" , "100");


            var loggerFactory = new LoggerFactory();

            var config = Configuration.FromEnv(loggerFactory);

            tracer = config.GetTracer();

            if (!GlobalTracer.IsRegistered())
            {
                GlobalTracer.Register(tracer);
            }
            return tracer;
        }
    }

UI에 표시하기 위해 Jaeger 에이전트 및 수집기에보고해야하는 컨트롤러 코드입니다.

[Route("api/[controller]")]
[ApiController]
public class ComponentController : ControllerBase
{
    private readonly ITracer tracer;

    public ComponentController(ITracer tracer)
    {
        this.tracer = tracer;
    }

    /// <summary>
    /// Get component by ID
    /// </summary>
    /// <returns></returns>
    [HttpGet("GetComponent")]
    public ActionResult<ComponentModel> GetComponent(string id)
    {   
        var builder = tracer.BuildSpan("operationName");            
        var span = builder.Start();
        // Set some context data
        span.Log("Getting data");
        span.SetTag(Tags.SpanKind, "Getting data request");
        span.Finish();                     

        ComponentModel component = ComponentManager.GetComponent(id);    

        return component;
    }


}

Startup.cs

    public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();

        // Use "OpenTracing.Contrib.NetCore" to automatically generate spans for ASP.NET Core, Entity Framework Core, ...
        // See https://github.com/opentracing-contrib/csharp-netcore for details.
        services.AddOpenTracing();

        //Init tracer
        services.AddSingleton<ITracer>(t => MyTracer.InitTracer());

        services.AddHealthChecks();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseHttpsRedirection();
        app.UseRouting();
        app.UseAuthorization();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

그러나 이것은 전혀 작동하지 않습니다. 원격 서버에서 작동하게하려면 여기서 무엇을 놓치고 있습니까?

조나스 린다 흘

Iv는 마침내 해결책을 찾았습니다. 기자가 시작되는 방식과 관련이있는 것 같았다. 어쨌든 내 추적자 클래스를 이것으로 변경했습니다.

    public static class MyTracer
{
    public static ITracer tracer = null;
    public static ITracer InitTracer(IServiceProvider serviceProvider)
    {
        string serviceName = serviceProvider.GetRequiredService<IHostingEnvironment>().ApplicationName;

        Environment.SetEnvironmentVariable("JAEGER_SERVICE_NAME", "my-store");
        //Environment.SetEnvironmentVariable("JAEGER_AGENT_HOST", "192.168.2.27");
        //Environment.SetEnvironmentVariable("JAEGER_AGENT_PORT", "6831");
        //Environment.SetEnvironmentVariable("JAEGER_SAMPLER_TYPE", "const");                     
        //Environment.SetEnvironmentVariable("JAEGER_REPORTER_LOG_SPANS", "false");
        //Environment.SetEnvironmentVariable("JAEGER_SAMPLER_PARAM","1");
        //Environment.SetEnvironmentVariable("JAEGER_SAMPLER_MANAGER_HOST_PORT", "5778");
        //Environment.SetEnvironmentVariable("JAEGER_REPORTER_FLUSH_INTERVAL" , "1000");
        //Environment.SetEnvironmentVariable("JAEGER_REPORTER_MAX_QUEUE_SIZE" , "100");
        //application - server - id = server - x

        var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();

        var sampler = new ConstSampler(sample: true);
        var reporter = new RemoteReporter.Builder()
         .WithLoggerFactory(loggerFactory)
         .WithSender(new UdpSender("192.168.2.27", 6831, 0))
         .Build();

        tracer = new Tracer.Builder(serviceName)
         .WithLoggerFactory(loggerFactory)
         .WithSampler(sampler)
         .WithReporter(reporter)
         .Build();

        if (!GlobalTracer.IsRegistered())
        {
            GlobalTracer.Register(tracer);
        }
        return tracer;
    }
}

지금 여기에 몇 가지 비활성 변수가 있다는 것을 알고 있습니다. 그들이 여전히 어떻게 사용할 수 있는지 볼 것입니다. 그러나 지금 당장 필요한 것은 없습니다. 이것이 원격 Jeagertracing 서버와 함께 .NET Core가 제대로 작동하도록 시도하는 다른 사람에게 도움이되기를 바랍니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

.NET Core 3.1에서 원격 SignalR 허브에 연결할 수 없습니다.

분류에서Dev

Amazon AWS Mysql에 원격으로 연결

분류에서Dev

Postgres에 원격으로 jhipster 연결

분류에서Dev

원격으로 JBoss 7.1.1 MBean에 연결

분류에서Dev

공용 IP로 원격 mssql에 연결

분류에서Dev

C에서 원격 호스트에 연결 (소켓 프로그래밍)

분류에서Dev

원격 데스크톱 연결에서 C # Winform 프로그램 실행

분류에서Dev

C #로드 XML : 원격 서버에 연결할 수 없습니다.

분류에서Dev

C #으로 원격 클라이언트를 통해 MSSQL Server에 연결

분류에서Dev

네트워크의 원격 컴퓨터에서 ASP.NET Core API에 연결할 수 없습니다.

분류에서Dev

Linux의 Dot Net Core에서 원격 SQL Server에 연결하는 데 때때로 실패한 다음 무작위로 작동하기 시작합니다.

분류에서Dev

Linux의 .NET Core에서 실행되는 원격 프로세스에 디버거를 연결하는 Visual Studio 확장

분류에서Dev

.NET UDPClient : 오류 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

authorize.net의 원격 호스트에 의해 기존 연결이 강제로 닫혔습니다.

분류에서Dev

MySQL Linux에 원격 연결

분류에서Dev

VPS로 laravel을 mysql에 원격으로 연결

분류에서Dev

내 C ++ 프로그램에서 원격 Cplex를 연결하고 사용하는 방법

분류에서Dev

C # 컴퓨터에 원격으로 연결하는 사용자의 IP 주소를 가져옵니다.

분류에서Dev

C #에서 원격 couchbase 데이터베이스로 데이터베이스 연결을 만드는 방법

분류에서Dev

VPN에 연결되어있는 동안 로컬 원격 데스크톱 연결

분류에서Dev

MS SQL 원격 연결 설정 및 PHP로 Linux 호스팅에서 연결

분류에서Dev

PostGIS Docker에 원격으로 연결할 수 없습니다.

분류에서Dev

Python의 Elasticsearch 패키지로 원격 Elasticsearch 서버에 연결

분류에서Dev

원격 지점에서 로컬 지점 연결 해제

분류에서Dev

X 포워딩으로 원격 Emacs에 연결

분류에서Dev

로컬 시스템에 대한 원격 SSH 연결

분류에서Dev

WMI 관리 범위는 원격 대신 로컬에 연결

분류에서Dev

iis 기반 웹 사이트에 원격으로 연결

분류에서Dev

원격 사용자로 데이터베이스에 연결

Related 관련 기사

  1. 1

    .NET Core 3.1에서 원격 SignalR 허브에 연결할 수 없습니다.

  2. 2

    Amazon AWS Mysql에 원격으로 연결

  3. 3

    Postgres에 원격으로 jhipster 연결

  4. 4

    원격으로 JBoss 7.1.1 MBean에 연결

  5. 5

    공용 IP로 원격 mssql에 연결

  6. 6

    C에서 원격 호스트에 연결 (소켓 프로그래밍)

  7. 7

    원격 데스크톱 연결에서 C # Winform 프로그램 실행

  8. 8

    C #로드 XML : 원격 서버에 연결할 수 없습니다.

  9. 9

    C #으로 원격 클라이언트를 통해 MSSQL Server에 연결

  10. 10

    네트워크의 원격 컴퓨터에서 ASP.NET Core API에 연결할 수 없습니다.

  11. 11

    Linux의 Dot Net Core에서 원격 SQL Server에 연결하는 데 때때로 실패한 다음 무작위로 작동하기 시작합니다.

  12. 12

    Linux의 .NET Core에서 실행되는 원격 프로세스에 디버거를 연결하는 Visual Studio 확장

  13. 13

    .NET UDPClient : 오류 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  14. 14

    authorize.net의 원격 호스트에 의해 기존 연결이 강제로 닫혔습니다.

  15. 15

    MySQL Linux에 원격 연결

  16. 16

    VPS로 laravel을 mysql에 원격으로 연결

  17. 17

    내 C ++ 프로그램에서 원격 Cplex를 연결하고 사용하는 방법

  18. 18

    C # 컴퓨터에 원격으로 연결하는 사용자의 IP 주소를 가져옵니다.

  19. 19

    C #에서 원격 couchbase 데이터베이스로 데이터베이스 연결을 만드는 방법

  20. 20

    VPN에 연결되어있는 동안 로컬 원격 데스크톱 연결

  21. 21

    MS SQL 원격 연결 설정 및 PHP로 Linux 호스팅에서 연결

  22. 22

    PostGIS Docker에 원격으로 연결할 수 없습니다.

  23. 23

    Python의 Elasticsearch 패키지로 원격 Elasticsearch 서버에 연결

  24. 24

    원격 지점에서 로컬 지점 연결 해제

  25. 25

    X 포워딩으로 원격 Emacs에 연결

  26. 26

    로컬 시스템에 대한 원격 SSH 연결

  27. 27

    WMI 관리 범위는 원격 대신 로컬에 연결

  28. 28

    iis 기반 웹 사이트에 원격으로 연결

  29. 29

    원격 사용자로 데이터베이스에 연결

뜨겁다태그

보관