opentracing-contrib / csharp-netcore Goto Github PK
View Code? Open in Web Editor NEWOpenTracing instrumentation for .NET Core 3.1 & .NET 6+ apps
License: Apache License 2.0
OpenTracing instrumentation for .NET Core 3.1 & .NET 6+ apps
License: Apache License 2.0
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
.
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.
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.
Should not it be one span processing-event
with 2 childs? How can I achieve that?
Looking at the code
// This throws if there's already an item with the same key. We do this for now to get notified of potential bugs.
request.Properties.Add(PropertiesKey, span);
Yes this throws an error when Polly is configured to retry a failed Http request.
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.
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.
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.Dictionary
2.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?
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.
I hope there is a solution, otherwise I'll have to remove my ElasticSearch HC...
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""
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
[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);
}));
/monitoring/health
endpoint.Expected behaviour: No traces were reported for this call.
Actual behaviour: Traces were recorded for this call.
So, I went on and fixed it with PR #35 where you can see the reason of this bug.
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?
Hi!
From looking at the sources and examples, this library seems to be targeting netcoreapp2.1 and 3.1 but there's no nuget package with these targets available,
Since netcore 2.0 is out of support for a while and netcore 2.1 will go out of support next summer, will there be a nuget package dual-targeting 2.1 and 3.1 soon?
Thanks for your work!
Markus
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?
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.
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
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 typeGlobalTracer
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.Hey Christian,
Do you have up-for-grabs or any backlog of items that will enable removing this caveat from the main page?
This solution currently contains two projects that would ship as libraries on nuget.org:
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.
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!
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.
The OpenTracingLoggerProvider
greedily caches the global tracer, causing a race condition when setting up Jaeger.
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
.
One of two solutions would address this:
OpenTracingLoggerProvider
resolve the tracer in the OpenTracingLoggerProvider.GetLogger
method just before the logger itself is created.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.
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.
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";
}
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?
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.
is any idea use profiler api support more component in opentracing (for jaeger)
i write a profiler at there : https://github.com/caozhiyuan/ClrProfiler.Trace .
it can support .net core and .net framework , it's principle is the same as NewRelic(https://newrelic.com/products/application-monitoring).
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.
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:
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.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.
Parent span in MVC applications are not sent, maybe they never finish?
{ "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 }
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.
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.
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!
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.
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.
There should be benchmarks that compare the following scenarios:
The benchmarks should probably use BenchmarkDotNet.
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 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 PropertyFetcher
s 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?
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.
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:
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;
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?!
@cwe1ss would you be able to release in AppVeyor?
Questions:
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.
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;
});
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.
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.
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.
As far as I can tell, work on this project has generally stopped an the future of the opentracing standard is not opentelemetry!
Can we make this clean in the description of this repo and point to https://github.com/open-telemetry/opentelemetry-dotnet?
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
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.
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"
}
},
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));
}
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.