为了实现轻量级、跨平台、准确实时的性能指标收集,从 .NET Core 3.0 版本开始引入?EventCounters API。除了 .NET 运行时提供的 EventCounters 外,还可以实现自定义的 EventCounters。 以便跟踪各种指标,EventCounters 作为 EventSource 的一部分,可以实时自动定期推送到侦听器工具。
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/counters/{count}", (int count) =>
{
MinimalEventCounterSource.Log.Request("counters", count);
return $"count:{count}";
});
app.Run();
自定义的继承之 EventSource 类的实现代码:
using System.Diagnostics.Tracing;
[EventSource(Name = "Sample.EventCounter.Minimal")]
public sealed class MinimalEventCounterSource : EventSource
{
public static readonly MinimalEventCounterSource Log = new MinimalEventCounterSource();
private EventCounter _requestCounter;
private MinimalEventCounterSource() =>
_requestCounter = new EventCounter("request-time", this)
{
DisplayName = "Request Processing Time",
DisplayUnits = "ms"
};
public void Request(string url, long elapsedMilliseconds)
{
//WriteEvent(1, url, elapsedMilliseconds);
_requestCounter?.WriteMetric(elapsedMilliseconds);
}
protected override void Dispose(bool disposing)
{
_requestCounter?.Dispose();
_requestCounter = null;
base.Dispose(disposing);
}
}
启动asp.net core 应用
?
使用 dotnet-counters ps 查看进程号
如果之前没有安装dotnet-counters 可以在控制台中使用以下指令进行安装:
dotnet tool install --global dotnet-counters?
获取到对应的进程号,本例为[22936];再执行以下命令,监控标签名称为Sample.EventCounter.Minimal 的EventSource
dotnet-counters monitor --process-id 22936 --counters Sample.EventCounter.Minimal
当命令行窗口进入监控模式后,访问Web API
一个监控心跳后,监控窗口输出了刚刚的请求参数