关于golang:Prometheus-的使用

8次阅读

共计 2070 个字符,预计需要花费 6 分钟才能阅读完成。

Prometheus 是什么?
Prometheus 是一套开源的监控 & 报警 & 工夫序列数据库的组合。

Prometheus 数据模型
Prometheus 从根本上所有的存储都是按工夫序列去实现的,每条工夫序列是由惟一的 指标名称 和 一组 标签(key=value)的模式组成。

指标名称
通常代表了监控对象的名称,能够简略了解为数据表的表名

标签
就是对一条工夫序列不同维度的辨认了,能够简略了解为数据表的字段。

四种指标类型

Counter 计数器
一种累加的 metric,典型的利用如:申请的个数,完结的工作数,呈现的谬误数等。随着客户端一直申请,数值越来越大。

Gauge 计量器
与 Counter 不同,Gauge 类型的指标侧重于反馈零碎的以后状态。因而这类指标的样本数据可增可减,比方监控 cpu 使用率,内存占用等提供了增、减相干的办法.

Histogram 累积直方图
直方图,柱状图。罕用于跟踪事件产生 (通常是申请持续时间或响应大小) 的规模,例如:申请耗时、响应大小。它特别之处是能够对记录的内容进行分组,提供 count 和 sum 全副值的性能。

Summary
跟 histogram 相似,summary 也对观测值(相似申请提早或回复包大小)进行采样。同时它会给出一个总数以及所有观测值的总和,它在一个滑动的工夫窗口上计算可配置的分位数。, 典型的利用如:申请持续时间,响应大小。次要做统计用, 设置分位数的值,会实时返回该分位数上的值。

服务端收集监控数据次要有两种形式。
1、Prometheus server 间接到 client 客户端拉取
2、由客户端将 metrics 推送至 push gateway 服务,再由 prometheus server 到 push gateway 拉取

具体实例:

package main

import (
    "github.com/gin-gonic/gin"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

// 定义指标
var (
    requestHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
        Namespace:   "http_server",
        Subsystem:   "",
        Name:        "requests_seconds",
        Help:        "Histogram of response latency (seconds) of http handlers.",
        ConstLabels: nil,
        Buckets:     []float64{0, 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 1, 2, 5, 10},
    }, []string{"userId", "requestType"})
)

// 注册监控指标
func init() {prometheus.MustRegister(requestHistogram)
}
func main() {r := gin.Default()
    r.GET("/metrics", gin.WrapH(promhttp.Handler()))
    
    // 收集数据
    requestHistogram.With(prometheus.Labels{"userId": "11111", "requestType": "商品详情页"}).Observe(1.0)
    r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

间接拜访: 127.0.0.1:8080/metrics 查看 prometheus 的数据

直方图详解:
1. 什么是 Histogram?
Histogram 会在一段时间范畴内对数据进行采样(通常是申请持续时间或响应大小等),并将其计入可配置的存储桶(bucket)中。但这句话还是不太好了解,上面通过具体的示例来阐明。

假如咱们想监控某个利用在一段时间内的响应工夫,最初监控到的样本的响应工夫范畴为 0s~10s。当初咱们将样本的值域划分为不同的区间,即不同的 bucket,每个 bucket 的宽度是 0.2s。那么第一个 bucket 示意响应工夫小于等于 0.2s 的申请数量,第二个 bucket 示意响应工夫大于 0.2s 小于等于 0.4s 的申请数量,以此类推。

Prometheus 的 histogram 是一种 累积直方图,与下面的区间划分形式是有差异的,它的划分形式如下:还假如每个 bucket 的宽度是 0.2s,那么第一个 bucket 示意响应工夫小于等于 0.2s 的申请数量,第二个 bucket 示意响应工夫小于等于 0.4s 的申请数量,以此类推。也就是说,每一个 bucket 的样本蕴含了之前所有 bucket 的样本,所以叫累积直方图。

参考:
https://blog.csdn.net/weixin_…
http://www.45fan.com/article….
https://blog.csdn.net/kunyus/…

正文完
 0