计时器基本上是一种事件时间持续的直方图,并度量事件的发生频率。
计时器样例
private readonly Timer timer =
Metric.Timer("HTTP Requests",Unit.Requests);
public void ProcessRequest()
{
using(timer.NewContext())
{
// Actual Processing of the request
}
}
跟踪用户值
通过使用直方图跟踪用户值的能力,计时器也有能力跟踪用户值中最小值,最大值或最后一段时间记录的值。用户值可以是任易字符串(documentId, operationId等)
下例定时器将记录请求花费最长的documentId:
private readonly Timer timer =
Metric.Timer("Requests", Unit.Requests);
public void Process(string documentId)
{
using (var context = timer.NewContext(documentId))
{
ActualProcessingOfTheRequest(documentId);
// if needed elapsed time is available in context.Elapsed
}
}
由timer.NewContext()返回的上下文可以提供执行时间,这对于中间记录日志是有用的。 timer.NewContext()方法允许你传入一个在总处理时间内被执行的动作。这对于记录最后的时间也是有用的。
运行几个请求后,文本格式的计时器的输出如下所示:
Requests
Count= 14 Requests
Mean Value= 1.86 Requests/s
1 Minute Rate= 1.80 Requests/s
5 Minute Rate= 1.80 Requests/s
15 Minute Rate= 1.80 Requests/s
Count= 14 Requests
Last= 869.03 ms
Last User Value= document-1
Min= 59.90 ms
Min User Value= document-6
Max= 869.03 ms
Max User Value= document-1
Mean= 531.81 ms
StdDev= 212.98 ms
Median = 594.83 ms
75%<= 670.18 ms
95%<= 869.03 ms
98%<= 869.03 ms
99%<= 869.03 ms
99.9%<= 869.03 ms
正如您所看到的,计时器记录的最快的文档是文档-6(59.90毫秒),最慢的是文档-1(869.03毫秒)。