设为首页 加入收藏

TOP

中小研发团队架构实践之应用监控Metrics(一)
2019-09-17 18:54:36 】 浏览:55
Tags:中小 研发 团队 架构 实践 应用 监控 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.:

1、仪表盘设置

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

2、面板(Panel)设置

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

2.1、数据设置

点击上图的Graph图标创建图表:
点击上图的Panel Title,在弹出菜单中单击Edit打开Panel编辑界面,即进入Metrics选项卡面板。
关于Meter的查询数据语句配置一般如下:
 
关于Histogram的查询数据语句配置一般如下:
其中,fill()一般被设为null,但当查询时间范围很大时(如1天),请用fill(0);另外,$appId、$serverIP、$summarize这3个变量是在模板(T
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇基础设施DevOps演进之路 下一篇Activiti6.0 java项目框架 spring..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目