【prometheus上报和使用】

prometheus

Prometheus是由SoundCloud开发的开源监控系统,由GO语言编写而成,采用Pull的方式来获取监控信息,并且提供了多维度的数据模型和灵活的查询接口。Prometheus既支持通过静态文件配置监控对象,还支持自动发现机制,能通过Kubernetes、Consl、DNS等多种方式动态获取监控对象。

环境搭建

接下来先通过docker-compose搭建一个环境,有需要的同学可以私聊我,如下:
在这里插入图片描述
这个是启动之后在本地启动的服务,也是默认的前端,可以在搜索栏中搜索自己上报的指标。

进行上报

然后就是进行上报了,prometheus 使用的metric然后语法是PromQL的语法。然后基于时间维度进行聚合。
然后metric总共分为四种指标,Counter,Gauge,Histogram,Summary。接下来把这些指标都进行上报,看一下演示的代码:

var httpRequestCount = prometheus.NewCounterVec(
	prometheus.CounterOpts{
		Name:      "http_request_count",
		Subsystem: "req",
		Help:      "http request count"},
	[]string{"endpoint"})

var httpRequestGauge = prometheus.NewGauge(
	prometheus.GaugeOpts{
		Name:      "http_request_gauge",
		Subsystem: "req",
		Help:      "http request gauge"})

var httpRequestHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
	Name:      "http_request_duration_histogram",
	Subsystem: "req",
	Help:      "http request duration",
	Buckets:   []float64{10, 40, 50, 70, 100},
}, []string{"endpoint"})

var httpRequestDuration = prometheus.NewSummaryVec(
	prometheus.SummaryOpts{
		Name:       "http_request_duration",
		Subsystem:  "req",
		Help:       "http request duration",
		Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.95: 0.005, 0.99: 0.001},
	},
	[]string{"endpoint"},
)

func init() {
	prometheus.MustRegister(httpRequestCount)
	prometheus.MustRegister(httpRequestGauge)
	prometheus.MustRegister(httpRequestDuration)
	prometheus.MustRegister(httpRequestHistogram)
}

func main() {
	http.Handle("/metrics", promhttp.Handler())
	http.HandleFunc("/request", request)
	http.HandleFunc("/request1", request1)
	fmt.Println("服务器启动 :9101")
	err := http.ListenAndServe(":9101", nil)
	if err != nil {
		fmt.Println(err)
	}
}

func request(w http.ResponseWriter, r *http.Request) {
	httpRequestCount.With(map[string]string{"endpoint": r.URL.Path}).Inc()
	start := time.Now()
	n := rand.Intn(100)
	if n >= 90 {
		httpRequestGauge.Dec()
		time.Sleep(100 * time.Millisecond)
	} else {
		httpRequestGauge.Inc()
		time.Sleep(50 * time.Millisecond)
	}

	elapsed := (float64)(time.Since(start) / time.Millisecond)
	httpRequestDuration.WithLabelValues(r.URL.Path).Observe(elapsed)
	httpRequestHistogram.WithLabelValues(r.URL.Path).Observe(elapsed)
	w.Write([]byte("ok"))
}

func request1(w http.ResponseWriter, r *http.Request) {
	httpRequestCount.With(map[string]string{"endpoint": r.URL.Path}).Inc()
	start := time.Now()
	n := rand.Intn(100)
	if n >= 90 {
		httpRequestGauge.Dec()
		time.Sleep(100 * time.Millisecond)
	} else {
		httpRequestGauge.Inc()
		time.Sleep(50 * time.Millisecond)
	}

	elapsed := (float64)(time.Since(start) / time.Millisecond)
	httpRequestDuration.WithLabelValues(r.URL.Path).Observe(elapsed)
	httpRequestHistogram.WithLabelValues(r.URL.Path).Observe(elapsed)
	w.Write([]byte("ok"))
}

这里监听了2个路由,分别是request和request1这两个路由,然后每个指标都会上报四种指标,分别是httpRequestCount,httpRequestGauge,httpRequestHistogram,httpRequestDuration,然后对应的metric的指标分别是Count,Gauge,Histogram,Summary。

Count

请求几次看看这个效果。
在这里插入图片描述
在这里插入图片描述
注意第一个是时间分配图,然后第二个是具体的打点分布图,然后取的是当前的时间也就是选中的时间的点。然后endpoint=“/request”,env=“test”,instance=“127.0.0.1:9101”,job=“metrics”,endpoint是请求的路由,后面的分别是在启动prometheus中指定的参数,如下在这里插入图片描述
因为counte是增长,不会降低,看一下counter的常规用法,需要配合函数一起使用。先简单介绍一下几个相关的函数

rate

rate函数是计算一定范围方向内容内的平均增长率,对应的该时间范围内第一个和最后一个点。看个例子,取5分钟的数据,如下,在这里插入图片描述
在这里插入图片描述
第一个点是22,最后一个点是30,那么平均增长率=(30-22)%30 =0.0266666。然后看一下结果
在这里插入图片描述
然后因为时间和精度问题有一点差距,但是总体是对的上的。

irate

rate可以反应一段时间的平均增长率,但是对于方差过大的数据,存在被平均的情况,比如对于5分钟内的点,第一分钟和第五分钟的这两个点,分别是1,100,那么就会被平均下去,那么irate就登场了。
irate计算范围向量中时间序列的每秒瞬时增加率。这基于最后两个数据点。还是一样举个例子。
可以看出来irate在14:09:26的irate的点是1对应下面,然后对应的值最近的两个点,分别是图二的103和图三的101,平均下就是1了。
图一

图二
图三

increase

increase计算的是一段时间内的差值,例如接下来是increase的值是20如下面图一,然后在15分钟的第一个点107,然后第二个是127,对应的值就20
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Gauge

这个是可以增加或者减少,和counter相比就是可以减少。
往往计算动态变化的,例如温度变化、内存使用变化。

histogram

这个是柱状图,可以分析当前值的分布图。我们这边上面的代码分为了10, 40, 50, 70, 100这四个桶。然后histogram分为了_bucket,记录的是每个桶里面的值,_sum所有的值的和,_count所有值的数量。
下面的分为别是记录了bucket,sum,count对应的图。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分位线

然后看一下经常所有的99线的语法,一般就是请求耗时。如下因为手动请求样本较少,使用了90线.这个如果就是取的样本就是90%的值是多少
在这里插入图片描述

summary

summary其实有点类似上面的histogram_quantile函数,可以在生成指标的时候指定默认分位数。也就是指定不同的分位所对应的值,举个例子,如图,在这张图中50%的值小于53,90%小于104等等。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Prometheus是一个开源的监控系统,它通过拉取方式从各个目标(例如应用程序、服务、数据库等)收集指标数据,并提供了强大的查询语言和可视化界面。要上报自定义数据到Prometheus,你可以按照以下步骤进行操作: 1. 在你的应用程序中,引入Prometheus客户端库。Prometheus提供了多种语言的客户端库,你可以选择适合你应用程序的库进行使用。 2. 在应用程序中定义自定义指标。你可以使用Prometheus客户端库提供的API来创建和注册自定义指标。自定义指标可以是计数器(Counter)、测量值(Gauge)、直方图(Histogram)或摘要(Summary)等类型。 3. 在适当的位置,根据业务逻辑更新自定义指标的值。例如,在某个请求处理函数中,你可以增加计数器的值,记录某个操作的耗时等。 4. 配置和启动Prometheus服务器。在Prometheus的配置文件中,你需要添加你的应用程序作为一个目标,并配置抓取间隔等参数。 5. 在Prometheus服务器中配置和定义你的自定义指标。在Prometheus的配置文件中,你可以添加你的自定义指标的名称、标签等信息。 6. 启动Prometheus服务器,并访问Prometheus的Web界面。在Web界面中,你可以使用PromQL查询语言来查询和可视化你的自定义指标。 通过以上步骤,你就可以成功上报自定义数据到Prometheus,并通过Prometheus的查询和可视化功能来监控和分析这些数据了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值