prometheus + grafana配置统计图
配置普通折线图
在代码中添加metrics
例如我们想要展示耗时的统计图,需要在代码中记录开始处理和结束处理的时间点,得出时间差
start := time.Now()
resp, err := cli.DoSth(ctx, req)
gap := time.Since(start)
log.Infof("key:%+v, do sth cost:%+v", sha1, gap.Nanoseconds()/1000000)
DoSthSummary.With(prometheus.Labels{"target": "do_sth"}).Observe(float64(gap))
if err != nil {
return nil, err
}
metrics部分的代码:
DoSthSummary = prometheus.NewSummaryVec(prometheus.SummaryOpts{
Name: "do_sth_cost_summary",
Help: "do sth request cost time summary. unit: ns",
Objectives: map[float64]float64{0.5: 0.05, 0.75: 0.05, 0.9: 0.01, 0.99: 0.001},
MaxAge: time.Minute,
}, []string{"target"})
func init() {
prometheus.MustRegister(DoSthSummary)
}
至此,代码中的metrics添加完毕了
在grafana中添加prometheus数据源
- 添加新的panel
- 选择prometheus数据源
- 选择metrics
使用代码中summary的Name字段即可
注意,target一定要与代码中的target一致
- 配置图例的显式方式 host-分位数
- 配置坐标轴
Left Y指的是最左侧纵坐标的相关配置
Right Y指的是最右侧纵坐标的相关配置
X-Axis指的是横坐标的相关配置
- 配置最右侧的图例
- 最后配置标题,描述等信息
配置按小时划分的增量图
- 代码中添加metrics:
common.SampleSizeCounter.With(prometheus.Labels{"sample_type": "raw"}).Add(float64(intSize) / 1024)
common.SampleSizeCounter.With(prometheus.Labels{"sample_type": "zip"}).Add(float64(intZipSize) / 1024)
SampleSizeCounter = prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "size_counter",
Help: "sample size total.(KB)",
},
[]string{"sample_type"},
)
- 统计zip每小时增量的语句:
sum(increase(size_counter{sample_type="zip"}[1h]))
注意,Min step一定要填1h,否则不会按小时聚合,会默认按分钟聚合
- 配置图形为直方图
- 成功
大功告成,之后有时间再系统学习从零开始的部署以及各种高级语句。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。