应用监控Metrics

摘要:
应用程序监控指标1。度量简介应用程序监控系统度量由Metrics.NET+InfluxDB+Grafana组成。嵌入Metrics.NET的方法首先引用需要收集Metrics.NET监控数据的业务项的Metrics.dll。addkey=“Metrics.UserName”value=“Arch”/>

应用监控Metrics

一、Metrics简介

       应用监控系统MetricsMetrics.NET+InfluxDB+Grafana组合而成通过客户端Metrics.NET业务代码中埋点,Metrics.NET会把收集到数据存储在InfluxDB数据库中,然后通过Grafana来展示监控数据。其中,InfluxDB服务端部署的版本号是1.3.1,Grafana部署的版本号是4.0.1。下面将结合这3个工具来介绍如何实现对应用的监控。
       Metrics.NET移植自Java的metrics,它是一个给CLR提供度量的工具包。在业务代码中埋点Metrics.NET代码后,就可以方便地对各技术指标、业务指标进行度量,如:共花多长时间完成某方法的执行、某方法在被执行的过程中共出现过几次异常、某时间段内共下多少订单量Metrics.NET共提供5种度量类型:Gauge、Counter、Meter、Histogram以及Timer。其中Meter和Histogram这两种度量类型目前可以完全满足笔者所在公司的度量需求,所以,下面只介绍了Meter和Histogram这两种,另外3个若有兴趣可自行抽空去了解。

二、埋点Metrics.NET的方法

首先为需要收集Metrics.NET监控数据的业务项目引用Metrics.dll。
然后,在项目中的App.config/Web.config文件中加上如下配置信息:
1 <add key="AppID" value="150106"/>   
2 <add key="Metrics.DBUri" value="http://139.198.13.12:4126/write"/>
3 <add key="Metrics.UserName" value="Arch"/>
4 <add key="Metrics.Password" value="Arch"/>
5 <add key="Metrics.Database" value="ArchDB"/> 

1、Meter

Meter用于度量TPS(每秒处理的请求数)。
示例:模拟统计成功下单量、下单金额、失败下单量。
调用Meter对象的Mark()方法: 
复制代码
 1 static void CreateOrder() 
 2 {        
 3   try        
 4   {                
 5     // 省略关于下单的业务逻辑代码       
 6     //...... 
 7                    
 8     // 分别统计成功下单量和下单金额,统一写到MetrisKey中               
 9     MetricsKey.OrderCount.Mark();
10     if (n % 2 == 1)
11     {
12         MetricsKey.OrderMoneyCount.Mark("BuyerA", n);
13     }
14     else
15     {
16         MetricsKey.OrderMoneyCount.Mark("BuyerB", n);
17     }          
18   }         
19   catch (Exception)         
20   {                 
21     // 统计失败下单量,统一写到MetrisKey中            
22     MetricsKey.OrderErrorCount.Mark();
23                    
24     // 省略异常处理代码......         
25   } 
26 }
复制代码

2Histogram

 

Histogram用于度量流数据中Value的分布情况,它不仅使您能像Meter一样测量出TPS ,还能测量出最小值、最大值和平均值。使用场景如:统计服务器的延迟时间、统计某方法共执行多长时间。
示例:模拟统计航班查询引擎方法的耗时情况。
调用Histogram对象的Update()方法: 
复制代码
 1 private readonly Histogram searchFlightTime = MetricsHelper.Histogram("MetricsDemo.SearchFlightTime", Unit.Custom("ms"));
 2 
 3 static void SearchFlight()
 4 {           
 5   Stopwatch stopwatch = Stopwatch.StartNew();  
 6              
 7   // 模拟关于航班查询的业务逻辑的代码            
 8   Random random = new Random((int)DateTime.Now.Ticks & 0x0000FFFF); 
 9   var n = Random.Next(100);                 
10   Thread.Sleep(n);                 
11 
12   stopwatch.Stop();        
13 
14   // 统计航班搜索耗时  
15   searchFlightTime.Update(stopwatch.ElapsedMilliseconds);
16 }
复制代码

三、Grafana配置

查阅Metrics Dashboard Demo的地址:http://139.198.13.12:4127/。打开这个Metrics地址后,如果页面显示已登录状态,那么在开始查阅前,请先确认是否把组织切换到了Default Org.:
应用监控Metrics第5张

1、仪表盘设置

点击位于下图上方的Home图标,会下拉弹出Dashboard列表:
应用监控Metrics第6张
 
点击位于上图下方的Create New按钮,会进入到新建面板Panel页面,点击位于下图上方的保存图标按钮:
应用监控Metrics第7张
 
在弹出的Save As...对话框中输入Dashboard名称,如Arch.OrderCountDemo,然后点击Save按钮进行保存:
应用监控Metrics第8张

2、面板(Panel)设置

点击上面创建的【Arch.OrderCountDemo】Dashboard图标,进入属于这个Dashboard的面板(Panel)页面:
应用监控Metrics第9张
 
点击位于上图的ADD ROW按钮,进入下图。其中,Graph表示以图表(有折线图、柱状图、散点图、梯形图)形式展示数据、Singlestat表示单个统计、Table表示以表格形式展示数据、PieChart表示以饼状图形式展示数据。这几种统计类型的面板设置方式类似,本文将以Graph为例进行说明。
应用监控Metrics第10张

2.1、数据设置

点击上图的Graph图标创建图表:
应用监控Metrics第11张
点击上图的Panel Title,在弹出菜单中单击Edit打开Panel编辑界面,即进入Metrics选项卡面板。
关于Meter的查询数据语句配置一般如下:
应用监控Metrics第12张
 
关于Histogram的查询数据语句配置一般如下:
应用监控Metrics第13张
其中,fill()一般被设为null,但当查询时间范围很大时(如1天),请用fill(0);另外,$appId、$serverIP、$summarize这3个变量是在模板(Templating)中设置,请看第3小节的介绍。

2.2、样式配置

2.2.1、General选项卡用来设置Panel样式

主要用来设置Panel的标题:
应用监控Metrics第14张

2.2.2、Axes选项卡用来设置坐标轴

Label表示设置左侧Y轴旁显示什么说明文字,另外,Unit表示设置左侧Y轴数字的单位:
应用监控Metrics第15张

2.2.3、Legend选项卡用来设置显示样式

应用监控Metrics第16张

2.2.4 Display选项卡用来设置图表样式

Draw options子选项卡用来设置图表显示效果:
Draw Modes:Points表示设置是否在图中显示散点;
Mode Options:Fill表示设置填充度、Line Width表示设置图表线的粗细、Point Radius表示设置圆点半径的长度;
Stacking & Null value:Null value选择null as zero时表示设置当该时间节点在InfluxDB中没有记录时,用0替代。
应用监控Metrics第17张

3、模板(Templating)设置

打开Templating设置页面:
应用监控Metrics第18张
 
新建变量:
应用监控Metrics第19张
 
新建serverIP变量:
(在Query文本框处,输的是:SHOW TAG VALUES WITH KEY = "ServerIP")
应用监控Metrics第20张
 
新建summarize变量其中Values值可以自行添加或删除,值与值之间用英文状态的逗号隔开
应用监控Metrics第21张
 
新建adhoc变量:
应用监控Metrics第22张

4、设置Time Range

一个Dashboard中,除了需要显示实时监控数据外,有时还需要显示历史的监控数据,主要目的是要通过对历史监控数据的观察来预测未来的业务量走势,那么需要重写Time Range,即需要在Time range选项卡中进行设置。
例如,在一个Panel中需要显示近24小时的历史监控数据,那么请在这个Panel中加上如下配置:
应用监控Metrics第23张

5、告警设置

在Grafana当前版本(4.0.1)中,告警目前仅支持Graph类型的面板,在将来版本会添加Singlestat和Table类型面板的支持。另外,由于告警查询语句不支持template变量,所以最好是对不使用template变量的Panel才设置告警。

5.1、设置通知规则

在左侧菜单中选择Alerting -> Notifications进入通知列表页:
应用监控Metrics第24张
 
点击New Notification按钮新建一个通知:
在Name文本输入框中,输入通知名称,类型Type选择email。设置完成之后单击Save按钮,然后点击Send Test按钮测试下通知是否能够发送成功。
应用监控Metrics第25张

5.2、设置告警规则

进入需要添加告警的Panel的编辑界面,转到Alert选项卡,点击Create Alert按钮,进入Alert Config子选项卡界面进行配置,其中Evaluate every表示设置执行频率,Conditions表示配置何时告警的条件(WHEN是选择聚合函数的地方,OF用来设置时间段,IS ABOVE或者IS BELOW用来设置阈值)。
对Alert Config子选项卡界面的配置参考如下:
应用监控Metrics第26张
 
然后在Notifications子选项卡界面中配置通知规则:
应用监控Metrics第27张

5.3、暂停告警操作

在左侧菜单中点击Alerting -> Alert List进入告警规则列表页,点击暂停图标按钮就可以停止该告警:
应用监控Metrics第28张

四、其它说明  

1、Grafana匿名访问地址: http://139.198.13.12:4127/。建议使用Google Chrome浏览器打开Grafana;
2、一个MetricsName对应一张数据表,建议明确定义MetricsName;
3、提供的Metrics.dll基于0.4.8的版本增加了Unit Count的返回,且适用于.NET Framework 4.5及其以上版本。

五、总结Metrics的价值  

1、可以实时监控线上程序运行情况,形成闭环、不断改进;
2、可以预测程序未来大致走向;
3、可以及时发现故障,消灭在用户反馈之前;
4、Metrics.NET出现异常不影响业务流程;
5、可设置自动报警,即时发送邮件、短信、微信(通过API)。

六、Demo下载及更多资料

免责声明:文章转载自《应用监控Metrics》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇轻松简单搭建Linux下的C#开发环境&amp;lt;转&amp;gt;Windows Server 2012 R2 英文版安装中文语言包教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql获取当月数据_MySQL中获取天、周、月等数据

MySQL中获取天、周、月等数据 1.今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 2.昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1 3.近7天 SELECT * FROM 表名 where...

spark的bulkload报错及解决

需求 将HDFS上的数据解析出来,然后通过hfile方式批量写入Hbase(需要多列写入) 写入数据的关键api: rdd.saveAsNewAPIHadoopFile( stagingFolder, classOf[ImmutableBytesWritable], classOf[KeyValue],...

服务器推送的实现—基于EventSource

一、服务器推送理解   首先要知道为什么使用服务器推送,回答这个问题其实就是相当于回答,服务器推送的优点,可以从两个方面来思考: 1.1 服务器推送的目的   及时的将客户端感兴趣的数据推送给它。 1.2 不是用服务器推送怎么来实现需求   不使用服务端推送,那就只能由客户端定期对服务器发送请求,来获取是否有需要的数据。这样做有几个缺点: 不能及时的获取...

ADO.NET- 中批量添加数据的几种实现方法比较

在.Net中经常会遇到批量添加数据,如将Excel中的数据导入数据库,直接在DataGridView控件中添加数据再保存到数据库等等。 方法一:一条一条循环添加 通常我们的第一反应是采用for或foreach循环一条一条的添加。这样的方法可想而知,效率肯定很低,可以慢到操作人员无法接受的那种。经过测试(局域网),1W条数据将会耗时3分42秒842毫秒 fo...

Sword HTTP协议之chunk介绍

简介 当HTTP服务器无法预知报文长度时,可以使用Transfer-Encoding:chunk模式来传输数据即HTTP服务器一边产生数据,一边发给客户端,HTTP服务器报文头需要设置"Transfer-Encoding: chunked"来代替Content-Length。 编码格式 如果一个HTTP消息(请求消息或应答消息)的Transfer-Enco...

串行通信协议——基础知识

基础知识: 微型计算机中,通信有两种方式:串行通信、并行通信 1)串行通信       串行通信是指计算机与IO设备之间数据传输的各位是按顺序逐位进行传送,通常数据在一根数据线上传输。传输速度慢,传输设备成本低,适合远程通信,但是一些差分串行通信总线(RS-485,USB等)传输距离远,抗干扰强,速度也较快。 2)并行通信   指通过多条传输线交换数据,数...