Metrics.NET step by step
安装Nuget包
nuget中搜索metrics,如图:
配置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/将会看到一个空白的页面,里面啥也没有,各个度量菜单中也没有任何度量项。
收集度量值
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不做任何统计计算,读取一个即时值。
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();
}
});
}
}
示例代码展示如何度量并发数。
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());
}
});
}
示例代码展示每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();
}
});
}
示例代码展示了如何统计某个事件每秒钟发生的次数,可以用来统计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();
}
});
}
}
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)。
度量值类型
非严谨关系概览
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
下载
Metrics.NET step by step的更多相关文章
- Metrics.NET step by step使用Metrics监控应用程序的性能
使用Metrics监控应用程序的性能 在编写应用程序的时候,通常会记录日志以便事后分析,在很多情况下是产生了问题之后,再去查看日志,是一种事后的静态分析.在很多时候,我们可能需要了解整个系统在当前,或 ...
- Step by Step Process of Migrating non-CDBs and PDBs Using ASM for File Storage (Doc ID 1576755.1)
Step by Step Process of Migrating non-CDBs and PDBs Using ASM for File Storage (Doc ID 1576755.1) AP ...
- Linkerd 2.10(Step by Step)—2. 自动化的金丝雀发布
通过结合 Linkerd 和 Flagger 来根据服务指标自动金丝雀(canary)发布,从而降低部署风险. Linkerd 2.10 中文手册持续修正更新中: https://linkerd.ha ...
- Step by step Dynamics CRM 2011升级到Dynamics CRM 2013
原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...
- Step by Step 创建一个新的Dynamics CRM Organization
原创地址:http://www.cnblogs.com/jfzhu/p/4012833.html 转载请注明出处 前面演示过如何安装Dynamics CRM 2013,参见<Step by st ...
- Step by step Install a Local Report Server and Remote Report Server Database
原创地址:http://www.cnblogs.com/jfzhu/p/4012097.html 转载请注明出处 前面的文章<Step by step SQL Server 2012的安装 &g ...
- Step by step Dynamics CRM 2013安装
原创地址:http://www.cnblogs.com/jfzhu/p/4008391.html 转载请注明出处 SQL Server可以与CRM装在同一台计算机上,也可安装在不同的计算机上.演示 ...
- Step by step 活动目录中添加一个子域
原创地址:http://www.cnblogs.com/jfzhu/p/4006545.html 转载请注明出处 前面介绍过如何创建一个域,下面再介绍一下如何在该父域中添加一个子域. 活动目录中的森林 ...
- SQL Server 维护计划实现数据库备份(Step by Step)(转)
SQL Server 维护计划实现数据库备份(Step by Step) 一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server ...
- 转:eclipse以及step into step over step return的区别
首先来讲一下step into step over step return的区别: step into就是单步执行,遇到子函数就进入并且继续单步执行:(F5) step over是在单步执行时,在函数 ...
随机推荐
- 设置Jexus开机启动
一.如需要开机没有登陆情况下就能运行的程序,存在系统服务(system)里,即:/lib/systemd/system/ ,服务以.service结尾 cd /lib/systemd/system/ ...
- AWS S3服务使用
AWS S3是亚马逊的一种文件存储服务使用方便. 一.配置服务 public static class AWS_S3ClientInfo { private static readonly strin ...
- .asmx支持post请求或者get请求调用(WebService "因 URL 意外地以 结束,请求格式无法识别" 的解决方法)
使用Post调用以asmx形式提供的webservice时,在本机调试没有调用问题.一旦部署至服务器后会提示如下信息: <html> <head> <title>因 ...
- iOS开发从申请开发账号到APP上架的整体流程详解
应公司要求,写一份文档从申请账号一直到APP上架的整体流程,下面进入正文. https://blog.csdn.net/qq_35612929/article/details/78754470 首先第 ...
- 2.DNN-神经网络推导
DNN就是我们常常说的深度神经网络,可以说由其衍生出来的各种深度算法都在AI界大行其道,今天就好好理一下这个算法.参考的是刘建平老师的博客:http://www.cnblogs.com/pinard/ ...
- 2018-2019-2 20165235 《网络对抗技术》 Exp6 信息搜集与漏洞扫描
2018-2019-2 20165235 <网络对抗技术> Exp6 信息搜集与漏洞扫描 1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应 ...
- 关于<超文本>定义
百度百科定义: 1, 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本.它更是一种用户界面范式,用以显示文本及与文本之间相关的内容.现时超文本普遍以电子文档方式存在,其中的文字包含 ...
- DICOM图像转出为bmp格式图像方法(matlab程序实现)
在matlab中用dicomread读取dicom文件后,生成一个MxN矩阵(对应图像像素个数),每个像素灰度数据是int16格式 但是bmp图像灰度是int8格式的(灰度范围0~255),所以若想把 ...
- [ubuntu]apt-get update突然出现arm package找不到
https://blog.csdn.net/l741299292/article/details/69671789
- android 第三次作业
android studio音乐播放器 一.实现功能: 1.读取本地SD中的所有音频文件 2.歌单列表展示,并显示音频具体信息 3.进度条显示当前播放进度,可滑动加速 4.点击歌单进行播放 5.实现暂 ...