2016-09-20 4 views
1

Ich habe eine asp.net Core Web-Anwendung, und ich möchte metrics.net verwenden.Versucht, metrics.net in asp net Kern zu konfigurieren

vor, konfigurieren i-Metriken und owin wie folgt aus:

Metric.Config 
      .WithInternalMetrics() 
      .WithOwin(middleware => app.Use(middleware), config => config 
       .WithRequestMetricsConfig(c => c.WithErrorsMeter() 
               .WithActiveRequestCounter() 
               .WithPostAndPutRequestSizeHistogram() 
               .WithRequestTimer() 
              , new[] { 
                new Regex("(?i)^metrics"), 
                new Regex("(?i)^health"), 
                new Regex("(?i)^json") 
                } 
              ) 
       .WithMetricsEndpoint(endpointConfig => 
       { 
        endpointConfig 
         .MetricsTextEndpoint(enabled: false);        
       }) 
      ); 

wie kann ich einige ähnliche tun in asp net Kern?

+0

Metric.net unterstützt den dotnet-Core noch nicht. Sie können es nur mit vollem Framework verwenden. Hier klicken [docs.asp.net] (https://docs.asp.net/en/latest/fundamentals/owin.html). [GitHub-Problem] (https://github.com/etishor/Metrics.NET/issues/133) – Kalten

+0

@Kalten: Sie können ASP.NET Core unter (Standard) .NET Framework ausführen lassen. Mit Johans Antwort konnte ich den OWIN-Adapter für Metrics.NET erfolgreich konfigurieren. –

Antwort

1

Wir müssen app.UseOwin von Microsoft.AspnetCore.Owin Paket verwenden und die richtige Middleware an die Pipeline anschließen.

Metric.Config.WithInternalMetrics() 
      .WithOwin(middleware => app.UseOwin(pipeline => pipeline(next => Engage(middleware, next))), config => config 
       .WithRequestMetricsConfig(c => c.WithAllOwinMetrics() 
              , new[] { 
                new Regex("(?i)^metrics"), 
                new Regex("(?i)^health"), 
                new Regex("(?i)^json") 
                } 
              ) 
       .WithMetricsEndpoint(endpointConfig => 
       { 
        endpointConfig 
         .MetricsJsonEndpoint(enabled: true) 
         .MetricsEndpoint(enabled: true) 
         .MetricsHealthEndpoint(enabled: true) 
         .MetricsTextEndpoint(enabled: false) 
         .MetricsPingEndpoint(enabled: false); 
       }) 
      ); 

und die Engage-Funktion wie diese

private static Func<IDictionary<string, object>, Task> Engage(dynamic middleware, Func<IDictionary<string, object>, Task> next) 
    { 
     return env => { 
      middleware.Initialize(next); 

      return middleware.Invoke(env); 
     }; 
    } 
+0

Vielen Dank! –

0

Es gibt eine .NET Standard port von Metrics.NET. Die API in Metriken wurde nach dem .net-Core-Ansatz neu geschrieben.