statsd 仪表的用例是什么?

Jer*_*rry 5 python statsd

我正在努力理解 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 仪表板的线条来感知。而且,您可以通过查看线条的形状来分析并获得出现的频率。