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

image.png

image.png

  • 选择prometheus数据源

image.png

  • 选择metrics

使用代码中summary的Name字段即可
image.png
注意,target一定要与代码中的target一致

  • 配置图例的显式方式 host-分位数

image.png

image.png

  • 配置坐标轴

Left Y指的是最左侧纵坐标的相关配置
Right Y指的是最右侧纵坐标的相关配置
X-Axis指的是横坐标的相关配置
image.png

  • 配置最右侧的图例

image.png

image.png

  • 最后配置标题,描述等信息

image.png

  • 配置按小时划分的增量图

  • 代码中添加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,否则不会按小时聚合,会默认按分钟聚合

image.png

  • 配置图形为直方图

image.png

  • 成功

image.png

大功告成,之后有时间再系统学习从零开始的部署以及各种高级语句。


byte
106 声望13 粉丝