我正在努力理解 statsd 中仪表的概念。请解释它是如何工作的,以及一些何时有用的例子。
该文档是不是真的我清楚
设置仪表值。
stat:要设置的仪表的名称。值:仪表的当前值。rate: 一个采样率,一个介于 0 和 1 之间的浮点数。只会在这个百分比的时间内发送数据。statsd 服务器不考虑仪表的采样率。小心使用。delta:是否将其视为 delta 值或绝对值。有关更多详细信息,请参阅仪表类型。
小智 5
Gauge 只是反映您系统的状态,或者您根本不想汇总的一些指标。
让我给你举几个例子。
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)
Run Code Online (Sandbox Code Playgroud)
为简单起见,您可以在代码调用运行时 API 时将这些指标视为内存使用情况。因此,您可以将仪表发送到 StatsD,因为它们中的每一个都可以在 10 秒内完美地向您显示内存使用情况,这是 StatsD 中的默认刷新周期。而且,您不需要对这些指标使用任何聚合方法,因为聚合(如 sum)没有任何意义。
除了上面的例子,它还有很多用例,比如 CPU 使用率、操作系统的系统负载、进程中的线程数、服务器中的在线连接数、当前交易中的活跃交易数系统。
2)有时,我们也可以使用gauge来跟踪某事发生的时间。喜欢,
res, err := something()
if err != nil {
statsd.Gauge("machine01.something.error", time.Now().Unix())
}
Run Code Online (Sandbox Code Playgroud)
因此,一旦发生错误,您可以通过查看 Graphite 仪表板的线条来感知。而且,您可以通过查看线条的形状来分析并获得出现的频率。