Code Monkey home page Code Monkey logo

csharp-netcore's People

Contributors

aaronontheweb avatar austinlparker avatar catcherwong avatar chrishaly avatar cwe1ss avatar d1mnewz avatar human-aft3r-all avatar marcus-smallman avatar markvincze avatar mehyaa avatar ndrwrbgs avatar pcwiese avatar rwkarg avatar scoof avatar yelob avatar yurishkuro avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

csharp-netcore's Issues

StackOverflowException if tracer tries to resolve ILoggerFactory

The OpenTracingLoggerProvider needs a ITracer to send logs to it. If a tracer needs a ILoggerFactory to create its own logs, this will result in a cyclic dependency and therefore fails with a StackOverflowException.

An easy solution would be to rely on GlobalTracer.Instance in our OpenTracingLoggerProvider.

Consider targeting .NET Standard 2.0

ASP.NET Core runs on .NET Core and .NET Framework.

Both .NET Core and .NET Framework (depending on the versions) can use .NET Standard libraries.

Targeting .NET Core only will not allow its use on .NET Framework.

Question: Why child span not created?

I have some message handler

using (var scope = _tracer.BuildSpan("processing-event").StartActive(true))
{
    await ProcessEvent(message);
}

Inside ProcessEvent I run some service that call entity framework 2 times. In a result I got 3 separate spans.
Screenshot_5

Should not it be one span processing-event with 2 childs? How can I achieve that?

Should be .NET Standard Library

In general, libraries should be .NET Standard and executables should be .NET Core. All of this project's dependencies are .NET Standard. Making it .NET Core makes it difficult to include in other libraries.

Creating Spans for SignalR messages sent over Web Sockets

I'm using opentracing-csharp-netcore in an ASP.NET Core (3.1) application that receives SignalR requests via WebSockets.

In my Startup.ConfigureServices() method I setup OpenTracing as follows:

            services.AddOpenTracingCoreServices(otBuilder =>
            {
                otBuilder.AddAspNetCore()
                    .ConfigureAspNetCore(options =>
                    {
                        var ignoredRequestPaths = tracingOptions.IgnoredRequestPaths;
                        options.Hosting.IgnorePatterns.Add(ctx => (ignoredRequestPaths != null) ? ignoredRequestPaths.Contains(ctx.Request.Path) : false);

                        // options.Hosting.OnError = (span, exception, context) => {} -- this is only thrown when there is an unhandled exception, not when an HTTP error is purposefully returned by a controller

                        // This sets the main-level Span Operation Name which normally has a less than useful value in my experience.
                        options.Hosting.OperationNameResolver = (httpContext) =>
                        {
                            return httpContext.Request.Path.Value;
                        };
                    })
                    .AddCoreFx()
                    .AddEntityFrameworkCore()
                    .AddLoggerProvider();
            });

Unfortunately, what I am finding is that SignalR via WebSockets requests received do not cause a Span to be created. Meanwhile, regular HTTP web requests work fine.

Is there some limitation to DiagnosticListeners that don't support SignalR over Web Sockets or does opentracing-csharp-netcore just not support listening for Web Socket events?

Sorry I am not an expert in the terminology for SignalR over Web Sockets or the inner workings of opentracing-charp-netcore but hopefully I got my question across despite that.

System.ArgumentException: An item with the same key has already been added. Key: ot-Span

Hello, seems that this issue was fixed, however there is still a problem in version 0.6.2. Here's a full stack trace of the error:

System.ArgumentException: An item with the same key has already been added. Key: ot-Span
at System.Collections.Generic.Dictionary2.TryInsert(TKey key, TValue value, InsertionBehavior behavior) at System.Collections.Generic.Dictionary2.Add(TKey key, TValue value)
at OpenTracing.Contrib.NetCore.CoreFx.HttpHandlerDiagnostics.OnNext(String eventName, Object arg)
at OpenTracing.Contrib.NetCore.Internal.DiagnosticListenerObserver.System.IObserver<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.OnNext(KeyValuePair`2 value)

What else should I do, if I'm already using version 0.6.2?

Ignore ElasticSearch HealthCheck is not working

Hi, I would like to avoid HealthCheck of Elasticsearch to be logged into Jaeger, it's spamming my logs. I work in debug with Elastic in a docker compose file, such as my apps which periodically checks its health using the package AspNetCore.HealthChecks.Elasticsearch.

Currenlty I'm not able to fully exclude healthChecks reporting on ElasticSearch using IgnorePatterns.

ConfigureServies in Startup.cs

            // HealthChecks
              services
                  .UseHealthChecks()
                  .AddElasticSearchHC(Configuration);

             // Distributed tracing
             services
                  .AddJaeger(Configuration)
                  .AddOpenTracing()
                  .Configure<AspNetCoreDiagnosticOptions>(options =>
                  {
                      options.Hosting.IgnorePatterns.Add(x =>
                      {
                          return x.Request.Path.ToString().IsIn("/health", "/metrics");
                      });
                  })
                  .Configure<HttpHandlerDiagnosticOptions>(options =>
                  {
                      options.IgnorePatterns.Add(request => new Uri("http://elasticsearch:9200/").IsBaseOf(request.RequestUri));
                  });

My AddJaeger extension

      public static IServiceCollection AddJaeger(this IServiceCollection services, IConfiguration config, string varEnv = "Jaeger")
       {
           var configuration = config.Get<Configuration>(varEnv);
           string serviceName = Assembly.GetEntryAssembly().GetName().Name;

           services.AddSingleton<ITracer>(serviceProvider =>
           {
               var loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
               var endpoint = configuration.Jaeger;

               var remoteReporter = new RemoteReporter.Builder()
               .WithLoggerFactory(loggerFactory) // optional, defaults to no logging
               .WithMaxQueueSize(100)            // optional, defaults to 100
               .WithFlushInterval(TimeSpan.FromSeconds(1)) // optional, defaults to TimeSpan.FromSeconds(1)
               .WithSender(new HttpSender(endpoint))   // optional, defaults to UdpSender("localhost", 6831, 0)
               .Build();

               var loggingReporter = new LoggingReporter(loggerFactory);
               var compositeReporter = new CompositeReporter(remoteReporter, loggingReporter);
               var sampler = new ConstSampler(true);

               ITracer tracer = new Tracer.Builder(serviceName)
                   .WithSampler(sampler)
                   .WithReporter(compositeReporter)
                   .Build();

               // Usefull for OpenTracingSink logger
               GlobalTracer.Register(tracer);

               return tracer;
           });


           return services;
       }

My healthchecks extensions

      public static IHealthChecksBuilder UseHealthChecks(this IServiceCollection services)
            => services.AddHealthChecks().AddCheck("self", () => HealthCheckResult.Healthy()).ForwardToPrometheus();

        public static IHealthChecksBuilder AddElasticSearchHC(this IHealthChecksBuilder healthChecksBuilder, IConfiguration config, string varEnv = "ElasticSearch")
        {
            var configuration = config.Get<ElasticSearch.Configuration>(varEnv);
            return healthChecksBuilder.AddElasticsearch(
                configuration.Nodes.FirstOrDefault()?.NodeUrl,
                name: "ElasticSearchHC",
                failureStatus: HealthStatus.Unhealthy,
                tags: new string[] { "searchengine", "nosql", "elasticsearch" });
        }

Basically the HC for Elastic from the package AspNetCore.HealthChecks.Elasticsearch does an async Ping to root address :
Elasticsearch HC : Async Ping

And a part of my docker compose file

version: '3.4'

services:

  itf.microservices.order.projection:
    image: ${DOCKER_REGISTRY-}itfmicroservicesorderprojection
    container_name: itfmicroservicesorderprojection
    build:
      context: .
      dockerfile: src/ITF.Microservices.Order.Projection/src/Dockerfile
    depends_on:
      - elasticsearch


  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - "9200:9200"
    volumes:
      - ./volumes/elasticsearch:/usr/share/elasticsearch/data

  jaeger:
    image: jaegertracing/all-in-one:latest
    container_name: jaeger
    ports:
      - "5775:5775/udp"
      - "6831:6831/udp"
      - "6832:6832/udp"
      - "5778:5778"
      - "16686:16686"
      - "14268:14268"
      - "9411:9411"
    environment:
      - COLLECTOR_ZIPKIN_HTTP_PORT=9411

When the app is running, the HC are triggered as expected :

[14:14:10 DBG] Running health check publishers
[14:14:10 DBG] Running health checks
[14:14:10 DBG] Running health check ElasticSearchHC
[14:14:10 DBG] Ignoring Request http://elasticsearch:9200/
[14:14:10 DBG] Running health check self
[14:14:10 DBG] Health check self completed after 0.2355ms with status Healthy and 'null'
[14:14:10 INF] Span reported: dac8bee78295b292:9884d80fd531c45c:dac8bee78295b292:1 - SendAndReceiveHeaders
[14:14:10 INF] Span reported: dac8bee78295b292:3f94594108f3a391:43197b96753ece13:1 - Deserialize
[14:14:10 INF] Span reported: dac8bee78295b292:43197b96753ece13:dac8bee78295b292:1 - ReceiveBody
[14:14:10 INF] Span reported: dac8bee78295b292:dac8bee78295b292:0000000000000000:1 - CallElasticsearch
[14:14:10 DBG] Health check ElasticSearchHC completed after 22.1559ms with status Healthy and 'null'
[14:14:10 DBG] Health check processing completed after 28.7957ms with combined status Healthy
[14:14:10 DBG] Running health check publisher 'Prometheus.PrometheusHealthCheckPublisher'
[14:14:10 DBG] Health check 'Prometheus.PrometheusHealthCheckPublisher' completed after 0.0874ms
[14:14:10 DBG] Running health check publisher 'App.Metrics.Extensions.HealthChecks.AppMetricsHealthCheckPublisher'
[14:14:10 DBG] Health check 'App.Metrics.Extensions.HealthChecks.AppMetricsHealthCheckPublisher' completed after 0.2536ms
[14:14:10 DBG] Health check publisher processing completed after 31.4883ms
[14:14:11 DBG] Ignoring Request http://jaeger:14268/api/traces?format=jaeger.thrift
[14:14:23 DBG] Ignoring request

We can see that a request to http://elasticsearch:9200/ is correctly ignored, but I still have 4 spans reported, which appear in Jaeger. And I don't know how to get rid of them.

image

I hope there is a solution, otherwise I'll have to remove my ElasticSearch HC...

Span has already been finished

using the new version 0.6.0, ef starts a span and then sqlClient starts an inner span which is wrong, resulting in ..

"Span has already been finished; will not be reported again. Operation: "sqlClient MERGE" Trace Id: "54d95a5926fc16ce" Span Id: "41c65e24e9365bcd""

Traces are being recorded for ignored patterns

There is an option to ignore some tracing patterns as described here - #28
Steps to reproduce:
0. Setup: ASP.NET Core 2.2, OpenTracing.Contrib.NetCore 0.5.0

  1. Have the following code.
    MonitoringController.cs
        [HttpGet]
        [Route("health")]
        public IActionResult Health()
        {
            var state = StateManager.CurrentState;
            if (state is State.RequiresRestart)
            {
                this.log.Warning("Health probe was requested, but service is in {State} state", state);
                return this.StatusCode(503);
            }

            return this.Ok();
        }

Startup.cs

            services.AddJaeger().AddOpenTracing(builder =>
                builder.ConfigureAspNetCore(options =>
                {
                    // ignore certain requests to prevent spamming the tracer with irrelevant data
                    options.Hosting.IgnorePatterns.Add(request =>
                        request.Request.Path.Value?.StartsWith("/monitoring") == true);
                }));
  1. Call GET /monitoring/health endpoint.

Expected behaviour: No traces were reported for this call.
Actual behaviour: Traces were recorded for this call.
image

So, I went on and fixed it with PR #35 where you can see the reason of this bug.

Capture SOAP Action

We (unfortunately) are still making SOAP calls using WCF due to the vendor not exposing a REST API. The SOAP calls are properly captured, but they do not capture the SOAP Action which makes it really hard to know which method the code invoked at the vendor. So this ticket is two fold. First, it is a feature request to see the capturing of the SOAP Action incorporated into the tooling.

Second, in the mean time I created a IClientMessageInspector to Tag the "http.action" to the active span. While the code is capturing the action, it is associating it to the parent span, not the span that actually made the SOAP call. How do I fix this?

Adjustment of SqlClientDiagnostics

I would like to cut some info from SqlClientDiagnostics (sql queries) and also exclude some spans with specific queries.

To kick out this diagnostics from my project, I do:
services.Remove(services.Single(src => src.ImplementationType != null && src.ImplementationType.ToString().Contains("OpenTracing.Contrib.NetCore.CoreFx.SqlClientDiagnostics")));

I would like to add my custom DiagnosticListenerObserver. But DiagnosticListenerObserver internal.

internal abstract class DiagnosticListenerObserver : DiagnosticObserver, IObserver<KeyValuePair<string, object>>

How can I add my own SqlClientDiagnostics?

Add automated builds via Travis and/or AppVeyor

The other OpenTracing-projects use Travis but AppVeyor is better for CI/CD with C# as it can build on Windows (required when targeting the full .NET framework) and it has a nice integration with NuGet.

Might be best to add both.

Using PerOperationSampler

Hello

I am just learning OpenTracing and Jaeger, so first of all, forgive me if the question is stupid.
Also, I have tried to find this issue but haven't found it

I am trying to use PerOperationSampler, because there are some operations that usually I don't want to be sampled, but others are critical and want sampled.

So at first I instantiate a PerOperationSampler, with a OperationSamplingParameters with a DefaultProbability (1.0d) and a collection of PerOperationSamplingParameters. One of them I assigned probability 0.0d. For the operation I use [Controller]/[Action]. That is what had some sense to me.

I run it, and I see that the operation is being traced. Then I delve into your code, and I believe I know the reason.

The outmost span the one that is being generated by HostingEventProvider. And the operationName isn't Controller/Action, but "HTTP GET" or "HTTP POST".

There is an inner span generated by MvcEventProcessor, that has the information that I want. its operation names are Controller/Action. But the filtering is done at the outer spans.

I see the reason in generating outer spans such as you are doing, but I believe that renders the PerOperationSampler quite useless, unless I want to filter all HTTP GETs.

Is there a solution for that? That is: Filtering per Controller/Action

Don't start instrumentation if there's no tracer (= NoopTracer)

It would be great if our DiagnosticManager would only start the underlying instrumentation components if the passed ITracer is a valid tracer (not NoopTracer). However, it's not (easily) possible right now to check if the instance is of type NoopTracer as

  • NoopTracer is an internal type
  • the instance can be of type GlobalTracer and there's no (easily) accessible way to check the underlying type. We could do if (tracer is GlobalTracer && GlobalTracer.IsRegistered()) but this seems a bit hacky.

Discuss package/library names

This solution currently contains two projects that would ship as libraries on nuget.org:

OpenTracing.Contrib.AspNetCore

This project currently contains instrumentation for incoming HTTP requests and for some MVC components (actions, views). It has dependencies on Microsoft.AspNetCore.* libraries.

I think this name is pretty self-explanatory and should be ok.

OpenTracing.Contrib.Core

This project currently contains instrumentation for outgoing HTTP calls via HttpClient and for EntityFramework Core calls. EF Core is included because instrumenting it works without a dependency on it. The idea behind this separate Core project is to extract instrumentation that could also be used for non-web projects. However, due to its current architecture with dependencies on Microsoft.Extensions.* libraries (DependencyInjection, Logging, etc) it still requires the non-web project to use the "new" Microsoft.Extensions.* stack from the ASP.NET Core team.

Also, due to its dependency on Microsoft.Extensions.DiagnosticAdapter it currently only works on .NET Core. From ASP.NET 2.1 it will also support .NET 4.6+ though.

In other words, the Core project is a sort-of BCL instrumentation library but it requires the host to use the "new" Microsoft.Extensions.* stack and it (currently) only works on .NET Core.

OpenTracing.Contrib.Core was the best I could come up with but I'm open to suggestions here!

GenericEventOptions internal namespace

The GenericEventOptions class is in an internal namespace (OpenTracing.Contrib.NetCore.Internal). As the class is not internal it should be moved to a not internal namespace. Also a ConfigureGenericEvent extension method should be provided.

Logging provider greedily caches NoOpTracer if app startup consumes logging

Summary

The OpenTracingLoggerProvider greedily caches the global tracer, causing a race condition when setting up Jaeger.

Details

When setting up the Jaeger C# client using environment-based configuration, the Jaeger system wants an ILoggerFactory so it can log information about startup.

This looks like this in your ASP.NET Core Startup class:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITracer>(serviceProvider =>
            {
                var logFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
                var config = Jaeger.Configuration.FromEnv(logFactory);
                var tracer = config.GetTracerBuilder().Build();
                GlobalTracer.Register(tracer);
                return tracer;
            });
}

When the ILoggerFactory gets resolved, it also resolves all of the logger providers that are registered - this includes the OpenTracingLoggerProvider.

When the OpenTracingLoggerProvder is resolved, it greedily caches the global tracer instance which, as you can see, hasn't actually been set up yet.

The net result of this is that no log messages ever get piped to the OT logger because the cached trace instance is always the NoOpTracer.

Proposal

One of two solutions would address this:

  1. Get the tracer when the logger is created, not the log provider. Instead of resolving the global tracer in the constructor of the OpenTracingLoggerProvider resolve the tracer in the OpenTracingLoggerProvider.GetLogger method just before the logger itself is created.
  2. Pass the accessor to the logger and resolve as needed. Instead of the OpenTracingLoggerProvider doing any resolution of the global tracer, have the provider pass the accessor to each logger. Have the logger resolve the tracer as needed rather than caching it at all.

I think option 2 may be slightly safer since it'd avoid race conditions where other ASP.NET Core components may also need to log information at startup and then later also log more information that we may want caught by tracing.

I think option 1 appears that it may be more performant but since accessing the global trace is really just a static property access, it's likely negligible.

Can't control which Sql Command will create a span

Need:
In our system micro-services share internally developed framework which executes SqlCommands for each transactions in background. For a given trace where are a lot of spans which developer may not be concerned, so we need someway to determine which SqlCommand will create a span.

Proposal:
SqlClientDiagnosticOptions can include OperationNameResolver like delegate to give control whether a span will be created for given SqlCommand or not.

Ps: i will create a PR for this need. thanks.

No custom logs when using Serilog

Requirement - what kind of business use case are you trying to solve?

I need to send to Jaeger custom logs. Now it works only when I use Microsoft.Extensions.Logging.ILoggerFactory

My Startup

public void ConfigureServices(IServiceCollection services)
{
	services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

	services.AddOpenTracing();
	services.AddSingleton<ITracer>(sp =>
	{
		var loggerFactory = sp.GetRequiredService<ILoggerFactory>();

		var reporter = new RemoteReporter.Builder()
			.WithSender(new UdpSender())
			.WithLoggerFactory(loggerFactory)
			.Build();		

		var tracer = new Tracer
				.Builder("Sample service")
			.WithReporter(reporter)
			.WithSampler(new ConstSampler(true))
			.Build();

		GlobalTracer.Register(tracer);
		return tracer;
	});
}

Somewhere in controller:
using Microsoft.Extensions.Logging;

namespace WebApplication2.Controllers
{
    [Route("api/[controller]")]
    public class ValuesController : ControllerBase
    {
        private readonly ILogger<ValuesController> _logger;

        public ValuesController(ILogger<ValuesController> logger)
        {
            _logger = logger;
        }
		
        // GET api/values/5
        [HttpGet("{id}")]
        public ActionResult<string> Get(int id)
        {
            _logger.LogWarning("Get values by id: {valueId}", id);
            return "value";
        }

Result
image

Problem - what in Jaeger blocks you from solving the requirement?

But when I use Serilog, there are no any custom logs. I just install serilog and add

public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
	return WebHost.CreateDefaultBuilder(args)
		.UseStartup<Startup>()
		.UseSerilog();
}

Could you please suggest why custom logging doesn't work with Serilog?

Add a Microsoft.Extensions.Logging LoggerProvider

As we already have a fixed dependency on Microsoft.Extensions.Logging we can create our own ILoggerProvider that forwards logging calls to Tracer.ActiveSpan.Log().

The provider should be configurable via Microsoft.Extensions.Logging's configuration capabilities. However, we also have to add some fixed exclusions to prevent duplicate entries for e.g. "Request started"/"Request stopped" in aspnet/Hosting.

Add OnError handler to HostingOptions

ASP.NET Core integration has OnRequest method in HostingOptions that allows to add tags to spans for every request. It would be great to also have something like OnError to be able to set additional tags for error spans.

Configuration of SqlClientDiagnosticOptions

Today the SqlClientDiagnosticOptions class has a default OperationNameResolver function:

There are a few issues I'm having with the way it's currently set up:

  1. The default function makes the assumption that tokens in SQL queries are always separated by spaces. In the application I'm working on, this is usually true, but in some cases, developers will choose to write statements on multiple lines. When that happens, if the verb (like SELECT) is on the first line, and the next part of the query is on the next line, the query will end up carriage-return (\n) separated instead of space-separated. The operation name then includes part of the query string instead of just the command verb. Whitespace in general is valid as a token separator (at least in the flavor of SQL we use), so I'd like to be able to set my operation name based on a split of any whitespace character.
  2. Not all of our queries use the same character casing for commands (ex: SELECT vs select). Ideally, this is something we should have static code analysis tools pick up, but let's assume we can't. I don't want my tracing tool considering these as separate operations, so I'd like to uppercase all the commands by default.

Both of these would be much easier if SqlClientDiagnostics was configurable in the way that AspNetCore, EntitfyFrameworkCore and GenericDiagnostics are configurable. For example, I'd like a ConfigureSqlClientDiagnostics() method or something similar.

Would that be something the maintainers are open to? If so, I'd be happy to write something up and make a PR.

In a Web MVC Application, parent span are missing

Parent span in MVC applications are not sent, maybe they never finish?

jaeger

{ "data": [ { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spans": [ { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "278e89dc55c3802e", "operationName": "Result ObjectResult", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "34ddb5ef2b8c5985" } ], "startTime": 1521822623386000, "duration": 5000, "tags": [ { "key": "component", "type": "string", "value": "AspNetCore.MvcResult" }, { "key": "result.type", "type": "string", "value": "ObjectResult" } ], "logs": [ { "timestamp": 1521822623386000, "fields": [ { "key": "event", "type": "string", "value": "Executing ObjectResult, writing value {Value}." }, { "key": "Value", "type": "string", "value": "Microsoft.AspNetCore.Mvc.ControllerContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor" }, { "key": "eventId", "type": "int64", "value": 1 }, { "key": "level", "type": "string", "value": "Information" }, { "key": "message", "type": "string", "value": "Executing ObjectResult, writing value Microsoft.AspNetCore.Mvc.ControllerContext." } ] } ], "processID": "p1", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "34ddb5ef2b8c5985", "operationName": "Action WebApplication2.Controllers.ValuesController/Get", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "e788490769d052d5" } ], "startTime": 1521822623366000, "duration": 31000, "tags": [ { "key": "component", "type": "string", "value": "AspNetCore.MvcAction" }, { "key": "controller", "type": "string", "value": "WebApplication2.Controllers.ValuesController" }, { "key": "action", "type": "string", "value": "Get" } ], "logs": [ { "timestamp": 1521822623366000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623367000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623367000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnActionExecution" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623367000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623367000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnActionExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623367000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeActionMethod" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623367000, "fields": [ { "key": "event", "type": "string", "value": "Executing action method {ActionName} with arguments ({Arguments}) - ModelState is {ValidationState}" }, { "key": "ActionName", "type": "string", "value": "WebApplication2.Controllers.ValuesController.Get (WebApplication2)" }, { "key": "Arguments", "type": "string", "value": "System.String[]" }, { "key": "ValidationState", "type": "int64", "value": 2 }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" }, { "key": "eventId", "type": "int64", "value": 1 }, { "key": "level", "type": "string", "value": "Information" }, { "key": "message", "type": "string", "value": "Executing action method WebApplication2.Controllers.ValuesController.Get (WebApplication2) with arguments (2) - ModelState is Valid" } ] }, { "timestamp": 1521822623386000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterActionMethod" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623386000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623386000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnActionExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623386000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnActionExecution" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623386000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResultExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623386000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResultExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623392000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResultExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623392000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResultExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623392000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623392000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623392000, "fields": [ { "key": "event", "type": "string", "value": "Executed action {ActionName} in {ElapsedMilliseconds}ms" }, { "key": "ActionName", "type": "string", "value": "WebApplication2.Controllers.ValuesController.Get (WebApplication2)" }, { "key": "ElapsedMilliseconds", "type": "float64", "value": 25.1319 }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" }, { "key": "eventId", "type": "int64", "value": 2 }, { "key": "level", "type": "string", "value": "Information" }, { "key": "message", "type": "string", "value": "Executed action WebApplication2.Controllers.ValuesController.Get (WebApplication2) in 25.1319ms" } ] } ], "processID": "p1", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "dd31ae7af46b528a", "operationName": "HTTP GET", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "82f12fcfa14d4959" } ], "startTime": 1521822622907000, "duration": 523000, "tags": [ { "key": "span.kind", "type": "string", "value": "client" }, { "key": "component", "type": "string", "value": "HttpOut" }, { "key": "http.method", "type": "string", "value": "GET" }, { "key": "http.url", "type": "string", "value": "http://localhost:47856/api/values/2" }, { "key": "peer.hostname", "type": "string", "value": "localhost" }, { "key": "peer.port", "type": "int64", "value": 47856 }, { "key": "http.status_code", "type": "int64", "value": 200 } ], "logs": [], "processID": "p2", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "4d6fd5d4436d17c2", "operationName": "send", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "82f12fcfa14d4959" } ], "startTime": 1521822623457000, "duration": 0, "tags": [ { "key": "span.kind", "type": "string", "value": "producer" }, { "key": "component", "type": "string", "value": "netcore-rabbitmq" }, { "key": "message_bus.destination", "type": "string", "value": "testexchange" } ], "logs": [], "processID": "p2", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "e788490769d052d5", "operationName": "HTTP GET", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "dd31ae7af46b528a" } ], "startTime": 1521822623035000, "duration": 394000, "tags": [ { "key": "component", "type": "string", "value": "HttpIn" }, { "key": "span.kind", "type": "string", "value": "server" }, { "key": "http.method", "type": "string", "value": "GET" }, { "key": "http.url", "type": "string", "value": "http://localhost:47856/api/values/2" }, { "key": "http.status_code", "type": "int64", "value": 200 } ], "logs": [], "processID": "p1", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "bbdf471dae85802f", "operationName": "Get:Fakes", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "fac7c33356af6149" } ], "startTime": 1521822623872000, "duration": 2561000, "tags": [ { "key": "span.kind", "type": "string", "value": "client" } ], "logs": [], "processID": "p1", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "b6acd8ebc0b8f238", "operationName": "HTTP GET", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "f469c4ab5f08d7ba" } ], "startTime": 1521822629103000, "duration": 1495000, "tags": [ { "key": "span.kind", "type": "string", "value": "client" }, { "key": "component", "type": "string", "value": "HttpOut" }, { "key": "http.method", "type": "string", "value": "GET" }, { "key": "http.url", "type": "string", "value": "https://www.google.com/" }, { "key": "peer.hostname", "type": "string", "value": "www.google.com" }, { "key": "peer.port", "type": "int64", "value": 443 }, { "key": "http.status_code", "type": "int64", "value": 200 } ], "logs": [], "processID": "p3", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "fdb14d4e5ab4cd05", "operationName": "Result ObjectResult", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "f469c4ab5f08d7ba" } ], "startTime": 1521822630856000, "duration": 5000, "tags": [ { "key": "component", "type": "string", "value": "AspNetCore.MvcResult" }, { "key": "result.type", "type": "string", "value": "ObjectResult" } ], "logs": [ { "timestamp": 1521822630857000, "fields": [ { "key": "event", "type": "string", "value": "Executing ObjectResult, writing value {Value}." }, { "key": "Value", "type": "string", "value": "Microsoft.AspNetCore.Mvc.ControllerContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor" }, { "key": "eventId", "type": "int64", "value": 1 }, { "key": "level", "type": "string", "value": "Information" }, { "key": "message", "type": "string", "value": "Executing ObjectResult, writing value Microsoft.AspNetCore.Mvc.ControllerContext." } ] } ], "processID": "p3", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "f469c4ab5f08d7ba", "operationName": "Action WebApplication3.Controllers.ValuesController/Get", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "b2b4d7a1f85134ca" } ], "startTime": 1521822629085000, "duration": 1790000, "tags": [ { "key": "component", "type": "string", "value": "AspNetCore.MvcAction" }, { "key": "controller", "type": "string", "value": "WebApplication3.Controllers.ValuesController" }, { "key": "action", "type": "string", "value": "Get" } ], "logs": [ { "timestamp": 1521822629085000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822629085000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822629085000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnActionExecution" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822629085000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822629085000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnActionExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822629085000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeActionMethod" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822629085000, "fields": [ { "key": "event", "type": "string", "value": "Executing action method {ActionName} with arguments ({Arguments}) - ModelState is {ValidationState}" }, { "key": "ActionName", "type": "string", "value": "WebApplication3.Controllers.ValuesController.Get (WebApplication3)" }, { "key": "Arguments", "type": "string", "value": "" }, { "key": "ValidationState", "type": "int64", "value": 2 }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" }, { "key": "eventId", "type": "int64", "value": 1 }, { "key": "level", "type": "string", "value": "Information" }, { "key": "message", "type": "string", "value": "Executing action method WebApplication3.Controllers.ValuesController.Get (WebApplication3) with arguments ((null)) - ModelState is Valid" } ] }, { "timestamp": 1521822630856000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterActionMethod" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630856000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630856000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnActionExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630856000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnActionExecution" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630856000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResultExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630856000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResultExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630861000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResultExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630861000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResultExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630861000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630861000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630861000, "fields": [ { "key": "event", "type": "string", "value": "Executed action {ActionName} in {ElapsedMilliseconds}ms" }, { "key": "ActionName", "type": "string", "value": "WebApplication3.Controllers.ValuesController.Get (WebApplication3)" }, { "key": "ElapsedMilliseconds", "type": "float64", "value": 1776.0520000000001 }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" }, { "key": "eventId", "type": "int64", "value": 2 }, { "key": "level", "type": "string", "value": "Information" }, { "key": "message", "type": "string", "value": "Executed action WebApplication3.Controllers.ValuesController.Get (WebApplication3) in 1776.052ms" } ] } ], "processID": "p3", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "4ce41144350776be", "operationName": "Get:FakeToo", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "fac7c33356af6149" } ], "startTime": 1521822626433000, "duration": 2537000, "tags": [ { "key": "span.kind", "type": "string", "value": "client" } ], "logs": [], "processID": "p1", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "ce72d3df9649a8c4", "operationName": "HTTP GET", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "fac7c33356af6149" } ], "startTime": 1521822628970000, "duration": 1907000, "tags": [ { "key": "span.kind", "type": "string", "value": "client" }, { "key": "component", "type": "string", "value": "HttpOut" }, { "key": "http.method", "type": "string", "value": "GET" }, { "key": "http.url", "type": "string", "value": "http://localhost:59263/api/values" }, { "key": "peer.hostname", "type": "string", "value": "localhost" }, { "key": "peer.port", "type": "int64", "value": 59263 }, { "key": "http.status_code", "type": "int64", "value": 200 } ], "logs": [], "processID": "p1", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "fac7c33356af6149", "operationName": "Action WebApplication2.Controllers.ValuesController/Get", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "1d07b774b569701f" } ], "startTime": 1521822623796000, "duration": 7191000, "tags": [ { "key": "component", "type": "string", "value": "AspNetCore.MvcAction" }, { "key": "controller", "type": "string", "value": "WebApplication2.Controllers.ValuesController" }, { "key": "action", "type": "string", "value": "Get" } ], "logs": [ { "timestamp": 1521822623796000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623796000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623796000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnActionExecution" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623796000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623796000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnActionExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623796000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeActionMethod" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822623796000, "fields": [ { "key": "event", "type": "string", "value": "Executing action method {ActionName} with arguments ({Arguments}) - ModelState is {ValidationState}" }, { "key": "ActionName", "type": "string", "value": "WebApplication2.Controllers.ValuesController.Get (WebApplication2)" }, { "key": "Arguments", "type": "string", "value": "" }, { "key": "ValidationState", "type": "int64", "value": 2 }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" }, { "key": "eventId", "type": "int64", "value": 1 }, { "key": "level", "type": "string", "value": "Information" }, { "key": "message", "type": "string", "value": "Executing action method WebApplication2.Controllers.ValuesController.Get (WebApplication2) with arguments ((null)) - ModelState is Valid" } ] }, { "timestamp": 1521822630915000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterActionMethod" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630915000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630915000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnActionExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630915000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnActionExecution" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630915000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResultExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630915000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResultExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630980000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResultExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630980000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResultExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630980000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630980000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuted" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822630981000, "fields": [ { "key": "event", "type": "string", "value": "Executed action {ActionName} in {ElapsedMilliseconds}ms" }, { "key": "ActionName", "type": "string", "value": "WebApplication2.Controllers.ValuesController.Get (WebApplication2)" }, { "key": "ElapsedMilliseconds", "type": "float64", "value": 7184.0034000000005 }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" }, { "key": "eventId", "type": "int64", "value": 2 }, { "key": "level", "type": "string", "value": "Information" }, { "key": "message", "type": "string", "value": "Executed action WebApplication2.Controllers.ValuesController.Get (WebApplication2) in 7184.0034ms" } ] } ], "processID": "p1", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "6a0086068ee26e52", "operationName": "Result ObjectResult", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "fac7c33356af6149" } ], "startTime": 1521822630915000, "duration": 65000, "tags": [ { "key": "component", "type": "string", "value": "AspNetCore.MvcResult" }, { "key": "result.type", "type": "string", "value": "ObjectResult" } ], "logs": [ { "timestamp": 1521822630916000, "fields": [ { "key": "event", "type": "string", "value": "Executing ObjectResult, writing value {Value}." }, { "key": "Value", "type": "string", "value": "Microsoft.AspNetCore.Mvc.ControllerContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor" }, { "key": "eventId", "type": "int64", "value": 1 }, { "key": "level", "type": "string", "value": "Information" }, { "key": "message", "type": "string", "value": "Executing ObjectResult, writing value Microsoft.AspNetCore.Mvc.ControllerContext." } ] } ], "processID": "p1", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "103deedf91d8ceda", "operationName": "HTTP GET", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "82f12fcfa14d4959" } ], "startTime": 1521822623676000, "duration": 7312000, "tags": [ { "key": "span.kind", "type": "string", "value": "client" }, { "key": "component", "type": "string", "value": "HttpOut" }, { "key": "http.method", "type": "string", "value": "GET" }, { "key": "http.url", "type": "string", "value": "http://localhost:47856/api/values" }, { "key": "peer.hostname", "type": "string", "value": "localhost" }, { "key": "peer.port", "type": "int64", "value": 47856 }, { "key": "http.status_code", "type": "int64", "value": 200 } ], "logs": [], "processID": "p2", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "82f12fcfa14d4959", "operationName": "Home:Index", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "e220ec0446a44dbe" } ], "startTime": 1521822622907000, "duration": 8113000, "tags": [], "logs": [], "processID": "p2", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "840edd7eec84c61b", "operationName": "Result ViewResult", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "e220ec0446a44dbe" } ], "startTime": 1521822631020000, "duration": 17000, "tags": [ { "key": "component", "type": "string", "value": "AspNetCore.MvcResult" }, { "key": "result.type", "type": "string", "value": "ViewResult" } ], "logs": [ { "timestamp": 1521822631021000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.ViewFound" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631030000, "fields": [ { "key": "event", "type": "string", "value": "Executing ViewResult, running view at path {Path}." }, { "key": "Path", "type": "string", "value": "/Views/Home/Index.cshtml" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ViewResultExecutor" }, { "key": "eventId", "type": "int64", "value": 1 }, { "key": "level", "type": "string", "value": "Information" }, { "key": "message", "type": "string", "value": "Executing ViewResult, running view at path /Views/Home/Index.cshtml." } ] }, { "timestamp": 1521822631033000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeView" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631034000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeforeViewPage" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631034000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.AfterViewPage" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631034000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeforeViewPage" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631034000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631034000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631034000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.AfterViewPage" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeforeViewPage" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631035000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.BeginInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.EndInstrumentationContext" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631036000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Razor.AfterViewPage" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822631037000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterView" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] } ], "processID": "p2", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "e220ec0446a44dbe", "operationName": "Action WebApplication1.Controllers.HomeController/Index", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "b7e24ae36250cbba" } ], "startTime": 1521822622751000, "duration": 8269000, "tags": [ { "key": "component", "type": "string", "value": "AspNetCore.MvcAction" }, { "key": "controller", "type": "string", "value": "WebApplication1.Controllers.HomeController" }, { "key": "action", "type": "string", "value": "Index" } ], "logs": [ { "timestamp": 1521822622751000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnResourceExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822622751000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnResourceExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822622782000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnActionExecution" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822622782000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeOnActionExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822622782000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.AfterOnActionExecuting" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822622782000, "fields": [ { "key": "event", "type": "string", "value": "Microsoft.AspNetCore.Mvc.BeforeActionMethod" }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore" } ] }, { "timestamp": 1521822622900000, "fields": [ { "key": "event", "type": "string", "value": "Executing action method {ActionName} with arguments ({Arguments}) - ModelState is {ValidationState}" }, { "key": "ActionName", "type": "string", "value": "WebApplication1.Controllers.HomeController.Index (WebApplication1)" }, { "key": "Arguments", "type": "string", "value": "" }, { "key": "ValidationState", "type": "int64", "value": 2 }, { "key": "component", "type": "string", "value": "Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker" }, { "key": "eventId", "type": "int64", "value": 1 }, { "key": "level", "type": "string", "value": "Information" }, { "key": "message", "type": "string", "value": "Executing action method WebApplication1.Controllers.HomeController.Index (WebApplication1) with arguments ((null)) - ModelState is Valid" } ] } ], "processID": "p2", "warnings": [ "invalid parent span IDs=b7e24ae36250cbba; skipping clock skew adjustment", "invalid parent span IDs=b7e24ae36250cbba; skipping clock skew adjustment", "invalid parent span IDs=b7e24ae36250cbba; skipping clock skew adjustment", "invalid parent span IDs=b7e24ae36250cbba; skipping clock skew adjustment" ] }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "1d07b774b569701f", "operationName": "HTTP GET", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "103deedf91d8ceda" } ], "startTime": 1521822623776000, "duration": 7220000, "tags": [ { "key": "component", "type": "string", "value": "HttpIn" }, { "key": "span.kind", "type": "string", "value": "server" }, { "key": "http.method", "type": "string", "value": "GET" }, { "key": "http.url", "type": "string", "value": "http://localhost:47856/api/values" }, { "key": "http.status_code", "type": "int64", "value": 200 } ], "logs": [], "processID": "p1", "warnings": null }, { "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "b2b4d7a1f85134ca", "operationName": "HTTP GET", "references": [ { "refType": "CHILD_OF", "traceID": "fd7d731f5f47192bb7e24ae36250cbba", "spanID": "ce72d3df9649a8c4" } ], "startTime": 1521822629064000, "duration": 1827000, "tags": [ { "key": "component", "type": "string", "value": "HttpIn" }, { "key": "span.kind", "type": "string", "value": "server" }, { "key": "http.method", "type": "string", "value": "GET" }, { "key": "http.url", "type": "string", "value": "http://localhost:59263/api/values" }, { "key": "http.status_code", "type": "int64", "value": 200 } ], "logs": [], "processID": "p3", "warnings": null } ], "processes": { "p1": { "serviceName": "webapi-dev", "tags": [ { "key": "hostname", "type": "string", "value": "LAPTOP-FLAVIO" }, { "key": "ip", "type": "string", "value": "192.168.99.1" }, { "key": "letstrace.version", "type": "string", "value": "CSharp-1.0.1.0" } ] }, "p2": { "serviceName": "webapp-test", "tags": [ { "key": "hostname", "type": "string", "value": "LAPTOP-FLAVIO" }, { "key": "ip", "type": "string", "value": "192.168.99.1" }, { "key": "letstrace.version", "type": "string", "value": "CSharp-1.0.1.0" } ] }, "p3": { "serviceName": "external", "tags": [ { "key": "hostname", "type": "string", "value": "LAPTOP-FLAVIO" }, { "key": "ip", "type": "string", "value": "192.168.99.1" }, { "key": "letstrace.version", "type": "string", "value": "CSharp-1.0.1.0" } ] } }, "warnings": null } ], "total": 0, "limit": 0, "offset": 0, "errors": null }

too much logs write by GenericEventProcessor, add options to ignore some

A action get request as following:

        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            using (var db = new DataContext())
            {
                db.Database.EnsureCreated();
                var user = new User
                {
                    Name = "hello",
                };
                db.Add(user);
                db.SaveChanges();

                var users = db.Users.ToArray();
            }

            return new string[] { "value1", "value2" };
        }

producuced 113 logs

Logs (113)
17.67ms:event=Route matched with {RouteData}. Executing action {ActionName}ActionName=TimeService.Controllers.ValuesController.Get (TimeService)RouteData={action = "Get", controller = "Values"}component=Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvokereventId=1level=Informationmessage=Route matched with {action = "Get", controller = "Values"}. Executing action TimeService.Controllers.ValuesController.Get (TimeService)
17.69ms:event=Microsoft.AspNetCore.Mvc.BeforeOnResourceExecutingcomponent=Microsoft.AspNetCore
17.72ms:event=Microsoft.AspNetCore.Mvc.AfterOnResourceExecutingcomponent=Microsoft.AspNetCore
17.75ms:event=Microsoft.AspNetCore.Mvc.BeforeOnActionExecutingcomponent=Microsoft.AspNetCore
17.75ms:event=Microsoft.AspNetCore.Mvc.AfterOnActionExecutingcomponent=Microsoft.AspNetCore
17.76ms:event=Microsoft.AspNetCore.Mvc.BeforeOnActionExecutingcomponent=Microsoft.AspNetCore
17.76ms:event=Microsoft.AspNetCore.Mvc.AfterOnActionExecutingcomponent=Microsoft.AspNetCore
...

most of the log are not concerned, and store them waste lots of disk, such as

45.24ms:event=Microsoft.EntityFrameworkCore.Database.Connection.ConnectionOpenedarg=Opened connection to database 'main' on server 'E:\Users\Chris\Desktop\tech\opentracing\jaeger\apps\JaegerTest\TimeService\data.sqlite'.component=Microsoft.EntityFrameworkCore
45.92ms:event=Microsoft.EntityFrameworkCore.Database.Transaction.TransactionStartedarg=Beginning transaction with isolation level 'Serializable'.component=Microsoft.EntityFrameworkCore
50.67ms:event=Microsoft.EntityFrameworkCore.ChangeTracking.ForeignKeyChangeDetectedarg=Foreign key property 'User.Id' detected as changed. Consider using 'DbContextOptionsBuilder.EnableSensitiveDataLogging' to see property values.component=Microsoft.EntityFrameworkCore
50.73ms:event=Microsoft.EntityFrameworkCore.Database.Command.DataReaderDisposingarg=A data reader was disposed.component=Microsoft.EntityFrameworkCore

so I suggest add options for GenericEventProcessor so that we can ignore some or all the Generic Event.

Make injection format configurable through HttpHandlerDiagnosticOptions.cs

Hi there,

I'm running into some issues using the package in Azure App Services because the HTTP headers seem to be being stripped out of my requests (I think).

I've turned to stackoverflow to try and help me resolve that, but it wouldn't be an issue if I could choose one of the other injection formats through the HttpHandlerDiagnosticOptions class.

Would be great if you guys could consider adding that as an option.

Support Worker Service template

Hello!

I tried to use OpenTracing.Contrib.NetCore in WorkerService project on .Net Core 3.1 and got error

Example: https://gist.github.com/PavelStefanov/d306bf1d818855ab7c16a9c8537f5555

Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.AspNetCore.Http.Abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
File name: 'Microsoft.AspNetCore.Http.Abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
   at OpenTracing.Contrib.NetCore.AspNetCore.AspNetCoreDiagnostics..ctor(ILoggerFactory loggerFactory, ITracer tracer, IOptions`1 options, IOptions`1 genericEventOptions)
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
   at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitIEnumerable(IEnumerableCallSite enumerableCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitIEnumerable(IEnumerableCallSite enumerableCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitCache(ServiceCallSite callSite, RuntimeResolverContext context, ServiceProviderEngineScope serviceProviderEngine, RuntimeResolverLock lockType)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite singletonCallSite, RuntimeResolverContext context)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService(Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider)   at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
   at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(IHost host)
   at TestService.Program.Main(String[] args) in C:\Projects\TestService\TestService\Program.cs:line 18

I see that OpenTracing.Contrib.NetCore has implicit dependencies.
In ASP.NET projects everything works well. But I want to use it in console app.

OpenTracing.Contrib.NetCore supports ASP.NET Core, Entity Framework Core and .NET Core BCL types (HttpClient). Can we create separate library for ASP.NET and console app?

Thanks!

Unable to install into .netstandard 2.0 library

I'm trying to add this dependency to a helper library we use in our org, but nuget is preventing me because it has a dependency on .NETCoreApp 2.0... I was wondering if it would be possible to retarget this as a netstandard2.0 dependency.

Trace filtering

I'm not sure this is a question for here or more for JaegerTracing (it have a sampler, but the signature is not able to enable what I want).

To you know a way to remove some traces, according to some rules ? *
my case is :
I want to remove noise from the GET /health endpoint of my services.

Create benchmarks

There should be benchmarks that compare the following scenarios:

  • Code is not instrumented
  • Code is instrumented with NoopTracer
  • Code is instrumented with a real tracer

The benchmarks should probably use BenchmarkDotNet.

Log level in EntityFrameworkCoreDiagnostics

Currently any of the Microsoft.EntityFrameworkCore events that are processed via ProcessUnhandledEvent only have the event, component & arg logged.

Would it be possible to pass the log level through to the GenericEventProcessor's GetLogFields so that level is also logged?

The PropertyFetchers are not working with ASP.NET Core 3.0

The property fetchers in this section of the code (https://github.com/opentracing-contrib/csharp-netcore/blob/master/src/OpenTracing.Contrib.NetCore/AspNetCore/MvcEventProcessor.cs#L23-L26) don't work with ASP.NET Core 3.0, the Fetch() calls return null.

I'm not 100% sure of the reason, but probably it's that event argument types have changed in ASP.NET Core. For example in the BeforeAction event the arg is of this type, in which the properties have upper case names (HttpContext, ActionDescriptor), but in the PropertyFetchers we're trying to use lower case names (httpContext, actionDescriptor).
If I change the strings there to start with upper case, then it starts working.

What should be the fix for this? I guess if I change the strings to uppercase, that fixes it for 3.0, but breaks it for 2.2. Would it be possible to make the PropertyFetcher ignore the case of the property name?

Turn off DiagnosticSource Logs

I like the current implementation of OpenTracing where it creates a new span for each Activity and calls span.Log for each DiagnosticSource log event. However I'm dealing with an issue where spans can be too big and don't get reported. I was wondering if there is a way to turn off the DiagnosticSource log events but still keep the behaviour where a new span is created for each new Activity?

I particularly find the Microsoft.AspNetCore.Mvc logs noisy and mostly useless when troubleshooting issues with my application.

Prevent endless loop if tracer sends each span separately via HTTP

As every HTTP call creates a new span, there could be an endless loop if a tracer sends each span separately (for whatever reason) to its backend system.

The only way to prevent this right now is to tell the HTTP instrumentation that those tracer HTTP calls should not be traced. This can be done in two ways:

  • There's a built-in rule that ignores requests that contain a request property key called ot-ignore. Ideally, this would automatically be set by the tracer. If the tracer allows passing a custom DelegatingHandler a user can also set this himself for each request via:
request.Properties["ot-ignore"] = true;
  • Adding a custom rule that ignores these requests based on their URL. This can be done in ConfigureServices via the following example:
services.Configure<HttpHandlerDiagnosticOptions>(options =>
{
    options.IgnorePatterns.Add(request => request.RequestUri == _tracerUri);
});

Maybe there is a way to prevent this scenario even if none of these things have been done?!

(Re)move Zipkin tracer

The solution currently contains a PoC implementation for an OpenTracing->Zipkin bridge because no official one exists right now. I'm using it to test this instrumentation but it's not complete and it should be hosted somewhere else.

Configure ISampler

I see this code in library.
As I understood now there is no possibility to change sampler, except for manually edit source code of the library.

Can you add a BuilderExtensions, like ConfigureAspNetCore ?

services.AddSingleton<ITracer>(serviceProvider =>
{
	string serviceName = Assembly.GetEntryAssembly().GetName().Name;

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

	ISampler sampler = new ConstSampler(sample: true);

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

	GlobalTracer.Register(tracer);

	return tracer;
});

Can´t trace exceptions

With the latest version, i cant trace exceptions... My test case is just an endpoint that throws an exception. Log section not show any exception in Logs stack.

I am using net core 3.1, jaeger 0.3.6 and OpenTracing.Contrib.NetCore 0.6.2.

Traces missing with rapid duplicate calls to dotnet core Web API endpoint

I'm new to OpenTracing & Jaeger, so I may simply be getting something wrong with the setup, but traces are logged fine, except when I make a rapid set of calls to my app. In the case where I make 10 successive calls, only 1 or 2 of the calls will be visible in Jaeger afterwards.

It feels like a sampling issue, but as you can see, I've specified new ConstSampler(true) which I'd expect should send every span to Jaeger.

I'm using the following command to make sure my requests are consistent, in the below examples I cancelled the curl command after 5 iterations.

while true; do curl -s http://localhost:5000/api/Todo | grep --color -E 'id'; sleep .5; done;

I'm registering the services in ConfigureServices of my Startup.cs:

services.AddOpenTracing();

// Adds the Jaeger Tracer.
services.AddSingleton<ITracer>(serviceProvider =>
{
    string serviceName = serviceProvider.GetRequiredService<IHostingEnvironment>().ApplicationName;

    // This will log to a default localhost installation of Jaeger.
    var tracer = new Tracer.Builder(serviceName)
        .WithSampler(new ConstSampler(true))
        .Build();

    // Allows code that can't use DI to also access the tracer.
    GlobalTracer.Register(tracer);

    return tracer;
});

If I manually add logging in my controller method like this:

using (var scope = _tracer.BuildSpan ("Action ToDoController.GetAll").StartActive (true)) {
    ...
}

... these are also lost along with the root span.

If I remove the services.AddOpenTracing(); from my Startup.cs then when I re-run my curl request 5 times, I get all 5 logs.

See a jeager screenshot below, the 1 trace at the bottom shows 4 spans (the extra spans are as a result of AddOpenTracing but I'm only getting the 1 trace - I should be getting 5), the other traces are visible for each curl request (once AddOpenTracing is removed) but only shows the 1 span I manually added on the controller method.

image

Any help or insights would be hugely appreciated.

Thanks for your work on this, I love the idea of automatically instrumenting jaeger tracing, and would love to see this grow & develop - and keen to help in any way I can.

Enabling EF and/or CoreFx support resulting in lost spans

Hi,

I'm trying to instrument our services with Jaeger and OpenTracing (using the ConstSampler during development).

Explicit tracing seems to work fine, as do .AddAspNetCore() and .AddLoggingProvider.

However, when I enable .AddCoreFx() or .AddEntityFrameworkCore(), I see a bunch of either <trace-without-root-span> or "Invalid parent spanID" in the span logs in the Jaeger UI, or just traces don't show up at all.

Also, if I set the LogLevel to "Trace", there are a bunch of messages of the form "Can not extract value for argument type '{Type}'. Using ToString()", seemingly all of which were related to EntityFrameworkCore. I still see these messages if just .AddCoreFx() is used. No idea if those are related but it seemed worth mentioning.

The samples in your repo run fine, and I can't figure out what's different. I tried commenting out a bunch of stuff in my service's Startup.cs trying to get it to work.

Maybe the database? In the service I'm working on now, we're using Postgres with the Npgsql EFCore drivers, and NetTopologySuite for Postgis support. When I worked on this previously, I ran into the same problem in all our services, one of which uses Mongo as the data store, not Postgres, so even though .AddEntityFrameworkCore() was used, there shouldn't have been any Diagnostic events coming from EF.

I've been banging my head against this for a couple of days now, so I figured a bug report was in order. Please let know if you need any additional information.

Thanks

How to extend based on OpenTracing.Contrib.NetCore?

Hello , Thanks for the great work.

I want to add some extensions to OpenTracing.Contrib.NetCore, but some classes like DiagnosticListenerObserver are defined as internal, why isn't it set to be public ? Is there something I have missed?

Another question, I saw the response of issue 12. I think there is no problem to change the project to netstandard2.0. We are a new library, don't need to think about the compatibility of .NET Framework. If set to netcoreapp2.0, it is very unfriendly for projects that need to extend OpenTracing.Contrib.NetCore.

Using this makes a lot of log noise coming from Microsoft.*

Hi,
Thanks for the great tools.
When I am using this nuget package, even though I've setup my logging in appseting.json to set the level of Microsoft logging to Warning and above, I am still getting lots of Microsoft.* level logs in jaeger ui.

Please can you let me know how I can filter out those logs ?

  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },

jaeger-ui-logh

Different "TraceID" and other meta data between opentracing-contrib and "Diagnostics" of Asp.Net Core

I am using .net core 3.0 preview 7, open tracing and Jaeger. Everything is working well, however, there is one thing is unclear that is the value of tracer Id of "GlobalTracer.Tracer" and "Diagnostics" are different.

[14:59:19 INF {"SourceContext": "Service1", "RequestId": "0HLOR1KJB6A9N:00000001", "RequestPath": "/Ping", "SpanId": "440b50a4411904c8", "TraceId": "6bf28db9-46118e6c32a3875b", "ParentId": "", "Environment": "Development", "ApplicationName": "Lead-Service", "TraceId_OpenTracing": "440b50a4411904c8"}] 123456

Please look at the value of "TracerId" and "TraceId_OpenTracing"

So, how can we configure to values are the same?

Workaround

public class OpenTracingContextLogEventEnricher : ILogEventEnricher
    {
        public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
        {
            var tracer = GlobalTracer.Instance;
            if (tracer?.ActiveSpan == null)
            {
                return;
            }
            logEvent.AddOrUpdateProperty(propertyFactory.CreateProperty("TraceId", tracer.ActiveSpan.Context.TraceId));
            logEvent.AddOrUpdateProperty(propertyFactory.CreateProperty("SpanId", tracer.ActiveSpan.Context.SpanId));
        }
    }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.