计量器只是反映您系统的状态或者一些不想被聚合的指标。
让我给您举几个例子。
1)在您的程序中,您可以使用某些特定于语言的API来了解此进程正在使用多少内存。例如,在Golang中,我们可以这样做:
var stat runtime.MemStats
runtime.ReadMemStats(&stat)
heapAlloc := memStat.HeapAlloc
heapInuse := memStat.HeapInuse
heapObjects := memStat.HeapObjects
statsd.Gauge("machine01.memory.heap.alloc", heapAlloc)
statsd.Gauge("machine01.memory.heap.inuse", heapInuse)
statsd.Gauge("machine01.memory.heap.objects, heapObjects)
为了简单起见,您可以将这些指标视为代码调用运行时API时的内存使用情况。因此,您可以使用计量表将其发送到StatsD,因为每个计量表都可以完美地显示在10秒内的内存使用情况,这是StatsD中默认的刷新周期。此外,对于这些指标,您不需要使用任何聚合方法,因为聚合(如求和)没有任何意义。
除了上述情况外,还有许多用例可用,例如CPU使用率、操作系统的系统负载、进程中的线程数、服务器上的在线连接数以及交易系统中当前活动事务的数量。
2) 有时,我们还可以使用计量表来跟踪某件事情发生的时间。例如,
res, err := something()
if err != nil {
statsd.Gauge("machine01.something.error", time.Now().Unix())
}
一旦出现错误,您可以通过查看Graphite仪表板上的行来感知。此外,您还可以通过查看线条的形状来分析和获取发生频率。