首页 技术 正文
技术 2022年11月12日
0 收藏 338 点赞 2,168 浏览 4254 个字

安装Nuget包

nuget中搜索metrics,如图:

Metrics.NET step by step

配置Metrics

在程序入口处插入配置Metrics的代码。

    class Program
{
static void Main(string[] args)
{
Metric.Config
// Web监视仪表板,提供Metrics.NET度量值图表,浏览器打开这个地址可以访问一个Metrics.NET内置的页面
.WithHttpEndpoint("http://localhost:1234/metrics/")
// 配置报表输出
.WithReporting((rc)=>{
// 报表输出到控制台
rc.WithConsoleReport(TimeSpan.FromSeconds());
});
Console.ReadLine();
}
}

这个时候打开http://localhost:1234/metrics/将会看到一个空白的页面,里面啥也没有,各个度量菜单中也没有任何度量项。

Metrics.NET step by step

收集度量值

Main入口中添加度量项,后面需要分别实现这些度量项。

static void Main(string[] args)
{
Metric.Config
// Web监视仪表板,提供Metrics.NET度量值图表
.WithHttpEndpoint("http://localhost:1234/metrics/")
// 配置报表输出
.WithReporting((rc) =>
{
// 报表输出到控制台
rc.WithConsoleReport(TimeSpan.FromSeconds());
}); GaugeTest();
CounterTest();
HistogramTest();
MeterTest();
TimerTest();
HealthCheckTest(); Console.ReadLine();
}

Gauge

static void GaugeTest()
{
Metric.Gauge("test.gauge", () => ran.NextDouble() * , Unit.None);
}

Metrics.NET step by step

最简单的度量,Metrics不做任何统计计算,读取一个即时值。

Counter

static Random ran = new Random(DateTime.Now.TimeOfDay.Milliseconds);
static void CounterTest()
{
var counter = Metric.Counter("test.counter", Unit.Custom("并发")); Action doWork = () => { System.Threading.Thread.Sleep(ran.Next(, )); };
Action idlesse = () => { System.Threading.Thread.Sleep(ran.Next(, )); };
for (var i = ; i < ; i++)
{
Task.Run(() =>
{
while (true)
{
counter.Increment();
doWork();
counter.Decrement();
idlesse();
}
});
}
}

Metrics.NET step by step

示例代码展示如何度量并发数。

Histogram

static Random ran = new Random(DateTime.Now.TimeOfDay.Milliseconds);
static void HistogramTest()
{
var histogram = Metric.Histogram("test.histogram", Unit.Custom("岁"), SamplingType.LongTerm); Task.Run(() =>
{
while (true)
{
histogram.Update(ran.Next(, ), ran.Next(, ) > ? "男" : "女");
System.Threading.Thread.Sleep(TimeSpan.FromSeconds());
}
});
}

Metrics.NET step by step

示例代码展示每1秒钟录入一个人的年龄,使用Histogram统计所有录入的人的年龄的最新值,平均值,最大最小值,分位数(75%,95%,98%,99%,99.9%)等。从效果上看,可以认为Histogram是Gauge的复杂(数值统计)版。

Meter

static Random ran = new Random(DateTime.Now.TimeOfDay.Milliseconds);
static void MeterTest()
{
var meter = Metric.Meter("test.meter", Unit.Calls, TimeUnit.Seconds); Action idlesse = () => { System.Threading.Thread.Sleep(ran.Next(, )); };
Task.Run(() => {
while(true)
{
meter.Mark();
idlesse();
}
});
}

Metrics.NET step by step

示例代码展示了如何统计某个事件每秒钟发生的次数,可以用来统计qps或tps,除了全部数据的qps,和tps,还提供了最近1分钟、5分钟、15分钟的事件频率。调用里有个时间单位(TimeUnit)参数rateUnit,频率=总次数/总时间,这个rateUnit就是总时间的单位。

Timer

static Random ran = new Random(DateTime.Now.TimeOfDay.Milliseconds);
static void TimerTest()
{
var timer = Metric.Timer("test.meter", Unit.None, SamplingType.FavourRecent, TimeUnit.Seconds, TimeUnit.Microseconds); Action doWork = () => { System.Threading.Thread.Sleep(ran.Next(, )); };
Action idlesse = () => { System.Threading.Thread.Sleep(ran.Next(, )); };
for (var i = ; i < ; i++)
{
Task.Run(() =>
{
while (true)
{
timer.Time(doWork);
idlesse();
}
});
}
}

Metrics.NET step by step

timer是meter和histogram结合,在meter的基础上,统计了每个业务处理的耗时的histogram度量信息,同时记录并发数。创建timer需要两个时间单位(TimeUnit),第一个rateUnit同meter里的含义一样,第二个durationUnit是统计每个业务处理耗时的时间单位。

HealthCheck

static Random ran = new Random(DateTime.Now.TimeOfDay.Milliseconds);
static void HealthCheckTest()
{
HealthChecks.RegisterHealthCheck("test.healthcheck", () =>
{
return ran.Next() < ? HealthCheckResult.Unhealthy() : HealthCheckResult.Healthy();
});
}

健康状况检查很简单,输出就两个值:健康(healthy)、不健康(unhealthy)。

度量值类型

非严谨关系概览

Metrics.NET step by step

GaugeValue : double

CounterValue

{
"Count" : "long"
"Items" : [{
"Item" : "string",
"Count" : "long",
"Percent" : "double"
}]
}

HistogramValue

{
"Count" : "long",
"LastValue" : "double",
"LastUserValue" : "string",
"Max" : "double",
"MaxUserValue" : "string",
"Mean" : "double",
"Min" : "double";
"MinUserValue" : "string",
"StdDev" : "double",
"Median" : "double",
"Percentile75" : "double",
"Percentile95" : "double",
"Percentile98" : "double",
"Percentile99" : "double",
"Percentile999" : "double",
"SampleSize" : "int"
}

MeterValue

{
"Count" : "long",
"MeanRate" : "double",
"OneMinuteRate" : "double",
"FiveMinuteRate" : "double",
"FifteenMinuteRate" : "double",
"RateUnit" : "TimeUnit",
"Items" : [{
"Item" : "string",
"Percent" : "double",
"Value" : {
"Count" : "long",
"MeanRate" : "double",
"OneMinuteRate" : "double",
"FiveMinuteRate" : "double",
"FifteenMinuteRate" : "double",
"RateUnit" : "TimeUnit"
}
}]
}

TimerValue

{
"Rate" : "MeterValue",
"Histogram" : "HistogramValue",
"ActiveSessions" : "long"
}

度量值采集方式

Gauge

使用时读取,无需额外函数支持

Counter

Increase(long value=1, string item=null) : void //增加计数

Decrease(long value=1, string item=null) : void //减少计数

Histogram

Update(double value, string userValue=null) : void

Meter

Mark(long count=1, string item=null) : void

Timer

Record(long duration, TimeUnit unit,  string userValue=null) : void

Timer(Action action, string userValue=null) : void

Timer<T>(Func<T> action, string userValue=null) : T

下载

MetricsDemo.rar

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,083
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,558
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,407
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,180
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,817
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,900