exporter标准样例项目
可直接fork,在此基础上进行开发即可
目录结构
exporter/
├── collector
│ └── node.go #采集器位置
├── go.mod
└── main.go #入口
collector/node.go 文件涵盖了Counter、Gauge、Histogram、Summary四种情况
格式:
<metric name>{<label name>=<label value>, ...}
例如:
api_http_requests_total{method="POST", handler="/messages"}
metric name :唯一标识,命名遵循 [a-zA-Z_:][a-zA-Z0-9_:]*.
Counter
一个 Counter 表示一个累计度量,只增不减,重启后恢复为 0。适用于访问次数统计,异常次数统计等场景。
Gauge
Gauge 表示可变化的度量值,适用于 CPU , 内存使用率等
Histogram
Histogram 对指标的范围性(区间)统计。比如内存在 0%-30%,30%-70%之间的采样次数。
Histogram 包含三个指标:
<basename>:度量值名称<basename>_count: 样本反正总次数<basename>_sum:样本发生次数中值得综合<basename>_bucket{le="+Inf"}: 每个区间的样本数
Summary
和 histogram 类似,提供次数和总和,同时提供每个滑动窗口中的分位数。
| 序号 | histogram | Summary |
|---|---|---|
| 配置 | 区间配置 | 分位数和滑动窗口 |
| 客户端性能 | 只需增加 counters 代价小 | 需要流式计算代价高 |
| 服务端性能 | 计算分位数消耗大,可能会耗时 | 无需计算,代价小 |
| 时序数量 | _sum、_count、bucket | _sum、_count、quantile |
| 分位数误差 | bucket 的大小有关 | φ 的配置有关 |
| φ 和滑动窗口 | Prometheus 表达式设置 | 客户端设置 |
| 聚合 | 根据表达式聚合 | 一般不可聚合 |
pushgateway的样例
func (p *PushGateway) Push(name string, help string, labels map[string]string, value float64) {
collectDurabilityPercent := prometheus.NewGauge(prometheus.GaugeOpts{
Name: name,
Help: help,
})
collectDurabilityPercent.Set(value)
pusher := push.New(p.QueryAddress, p.JobName).BasicAuth(p.Username, p.Password)
pusher.Collector(collectDurabilityPercent)
for k, v := range labels {
pusher.Grouping(k, v)
}
if err := pusher.Push(); err != nil {
fmt.Println("Could not push completion time to Pushgateway:", err)
}
}