2 回答
TA贡献1847条经验 获得超7个赞
来自普罗米修斯的参考
A gauge is a metric that represents a single numerical value that can arbitrarily go up and down. A histogram samples observations (usually things like request durations or response sizes) and counts them in configurable buckets.
Gauge
用于我们关心的一个值,不关心时间戳。像当前温度,而不是前一天的温度。
Gauge
不是您要查找的指标类型。或者,prometheus 可能不是您想要的。
当我们想要监控温度时,我们使用histogram
. 您可以在短时间内计算平均温度、最低温度或最高温度。但是,当你想使用自己的时间戳时,你需要自己实现一个直方图收集器。您可以从prometheus/client_golang/histogram.go检查文件。一点都不简单。
你真正需要的是 A time series database
,比如 influxdb。您可以将数据推送到接受自定义时间戳的 influxdb 中,就像将 json 发布到 http 一样简单,然后使用grafana
.
希望对您有所帮助。
TA贡献2016条经验 获得超9个赞
如果仔细观察,您会发现 JSON 数据格式在度量收集的上下文中略有冗余,因为时间戳在每个设备内部,而不是作为父键并且具有作为设备 ID 和值数组的值。只有这样你才能循环实时序列数据,然后你的标签不会像现在一样在循环中是静态的。标签唯一性是标签名称 + 标签值散列在一起。
我认为首选的方法是制作一个量规向量。用于WithLabelValues获取Gauge对象并调用Set它来设置值
deviceTempGaugeVector := prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Name: "my_temperature_celsius",
},
[]string{
"device_id" // Using single label instead of 2 labels "id" and "value"
},
)
prometheus.MustRegister(deviceTempGaugeVector)
for _, point := range dp.TimeStamps {
for _, measurements := range point {
deviceId := measurements.DatapointID
value := measurements.V
metric := deviceTempGaugeVector.WithLabelValues(deviceId).Set(value)
ch <- prometheus.NewMetricWithTimestamp(time.Unix(measurements.T, 0),metric)
}
}
参考:https ://godoc.org/github.com/prometheus/client_golang/prometheus#NewGaugeVec
- 2 回答
- 0 关注
- 364 浏览
添加回答
举报