3. 【prometheus 学习】prometheus数据类型

news2025/1/23 0:54:01

prometheus 四种数据类型学习及测试

安装

1)从官网下载对应版本的二进制压缩包并解压
2)新建prometheus.yml 文件,静态指定抓取本机的9091端口,设置采样时间2秒1次,方便一会测试。

scrape_configs:
  - job_name: 'definejob'
    scrape_interval: 2s
    static_configs:
    - targets: ['localhost:9091']

3)执行 ./prometheus --config.file=./prometheus.yml, config路径是上一步编写的文件。

四种数据类型

1)Counter

单调递增的数据,可用于统计API的调用次数,在服务重启后,变为0。编写测试用例,每两秒钟增加一次Counter。

package main

import (
	"net/http"
	"time"

	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promauto"
	"github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
	api_request = promauto.NewCounter(
		prometheus.CounterOpts{
			Name:        "api_request",
		})
)

func main() {
	http.HandleFunc("/", func(res http.ResponseWriter, req *http.Request){
		api_request.Inc()
		res.Write([]byte("it's ok!"))
	})

	go func() {
		// 模拟访问浏览器
		time.Sleep(time.Second)
		client := &http.Client{Timeout: time.Duration(10 * time.Second)}
		for i := 0;i < 2000; i++{
			req, err := http.NewRequest("GET", "http://127.0.0.1:9091", nil)
			if err != nil {
				panic(err)
			}

			response, err := client.Do(req)
			if err != nil {
				panic(err)
			}

			if response != nil {
				response.Body.Close()
			}
			time.Sleep(2 * time.Second)
		}
	}()

	http.Handle("/metrics", promhttp.Handler())
	http.ListenAndServe(":9091", nil)
}

访问localhost:9090,Status->Targets
在这里插入图片描述
可以看到应用被成功监控到。
在这里插入图片描述
查询api_request Counter正在逐渐增长
在这里插入图片描述
使用瞬时向量绘制图标
在这里插入图片描述
查看变化率,可以看出基本在0.5 上下波动,我们每两秒Counter+1, 平均一秒增加0.5
在这里插入图片描述

2)Gauge

仪表盘,用于统计一组变化的数字,例如内存使用、CPU使用率等。这里举例统计服务端维护的session个数。

package main

import (
	"math/rand"
	"net/http"
	"time"

	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promauto"
	"github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
	session_count = promauto.NewGauge(
		prometheus.GaugeOpts{
			Name:        "session_count",
		})
)

func main() {
	go func() {
		for i := 0;i < 2000; i++{
			session_count.Set(float64(rand.Intn(1000)))
			time.Sleep(2 * time.Second)
		}
	}()

	http.Handle("/metrics", promhttp.Handler())
	http.ListenAndServe(":9091", nil)
}

查看一分钟内session变化
在这里插入图片描述
将上面的各瞬时向量绘制成曲线
在这里插入图片描述
查看增长率,由于随机数据,增长率变化很大
在这里插入图片描述

3)Histogram

直方图,将数据范围划分成多个桶bucket,每个桶存储指定范围的数据。案例桶记录请求响应时间,分成100毫秒以下,100 ~ 800毫秒,800 ~ 1000毫秒,1000毫秒以上

package main

import (
	//"fmt"
	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promauto"
	"math/rand"
	"net/http"
	"time"

	"github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
	http_request_duration_seconds = promauto.NewHistogram(
		prometheus.HistogramOpts{
		Name:		"http_request_duration_seconds",
		Buckets:	[]float64{.1, .8, 1},
		})
)

func main() {
	http.HandleFunc("/", func(res http.ResponseWriter, req *http.Request){
		now := time.Now()

		time.Sleep(time.Duration(rand.Intn(1000)) * time.Millisecond)
		http_request_duration_seconds.Observe(time.Since(now).Seconds())
		res.Write([]byte("it's ok!"))
		//res.WriteHeader(http.StatusOK)
	})

	go func() {
		// 模拟访问浏览器
		time.Sleep(time.Second)
		client := &http.Client{Timeout: time.Duration(10 * time.Second)}
		for i := 0;i < 2000; i++{
			req, err := http.NewRequest("GET", "http://127.0.0.1:9091", nil)
			if err != nil {
				panic(err)
			}

			response, err := client.Do(req)
			if err != nil {
				panic(err)
			}

			if response != nil {
				response.Body.Close()
			}
			time.Sleep(2 * time.Second)
		}
	}()

	http.Handle("/metrics", promhttp.Handler())
	http.ListenAndServe(":9091", nil)
}

Histogram会生成三类汇总数据

  • 指标名字_bucket bucket 的累计计数器
  • 指标名字_sum 观测值总和
  • 指标名字_count 抓取总样本量

查看桶数据
在这里插入图片描述
查看抓取总数
在这里插入图片描述

查看每秒钟平均响应时间

rate(http_request_duration_seconds_sum[5m])/rate(http_request_duration_seconds_count[5m])

在这里插入图片描述

分位数

通过上面我们我们了解到,每个桶内的数据总量,很容易可以得出我们要的99%的请求响应时间在哪个桶里,假设有100个请求,其中第99个在最后一个桶,可是这个桶是记录800 ~ 1000毫秒范围,可我们并不知道排序第99的请求具体是多少毫秒,直方图假设800 ~ 1000毫秒桶是线性存储,来估算响应时间。

统计95分位,即95%的请求的响应时间。

 histogram_quantile(0.95,sum(rate(http_request_duration_seconds_bucket[10m])) by (le))

在这里插入图片描述

4)Summary

摘要,专门为精确计算分位存在。这里不详述,详情可见https://blog.csdn.net/hanjinjuan/article/details/121228892。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/151503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单细胞UMAP图只标记特定细胞群、圈定细胞群及坐标轴修改

最近有小伙伴私信我&#xff0c;如下的单细胞UMAP图怎么做&#xff1f;是啥样的图呢&#xff1f;就是UMAP图上其他群是灰色的&#xff0c;只有某个群或者某几个群是标记颜色的&#xff0c;比较突出。其实很简单&#xff0c;一种办法可参考我们之前写过的ggplot做UMAP图&#xf…

uni-app使用蓝牙

目录 前言 连接蓝牙 开启蓝牙适配器 发现蓝牙 连接蓝牙 收发蓝牙数据 获取服务ID 获取特征值 读取蓝牙数据 写蓝牙数据 遇到的坑 获取serviceId的坑 特征值不支持读写 notify成功后立刻写蓝牙数据 工具方法 前言 原因是公司要搞个共享单车给内部员工使用&#…

32位浮点数表示方法

今天开始给大家介绍计算机组成原理课程&#xff0c;本文主要内容是32位浮点数表示方法。 一、32位浮点数构成 32位浮点数是计算机中常见的一种数据类型&#xff0c;该数占据32bit空间&#xff0c;可以表示较大范围内的整数和小数。32位浮点数由三部分组成&#xff0c;分别是符…

Java集合List、Set、Map底层源码解析

目录集合介绍MapHashMapLinkedHashMapHashTablePropertiesCollectionListArrayListVectorLinkedListSetHashSetLinkedHashSetTreeSet集合介绍 为什么使用集合&#xff1f; 当我们想要保存一组数据时&#xff0c;可以使用到的变量类型有集合和数组。那么就像说一下数组的局限性…

1.9

完善案例 ​ this.$nextTick(function () {this.$refs.input.focus()})}​ //点击编辑直接获取焦点 this.$refs.input.focus() //但是这种写法 由于input是用v-show控制的 所以执行了上面代码 改变了isEdit值 但是不会立马去重新解析模板 input框还没有出来 //将handleedit回调…

springboot+xxl-job初体验

在日常开发中经常遇到任务调度的需求&#xff0c;下面体验一下分布式调度xxl-job。 1、常见定时任务的实现方式 Java自带的java.util.Timer类ScheduledExcutorServiceSpringboot自带的EnableScheduling注解Quartz框架Elastic-job框架XXL-JOB框架 下面对xxl-job实现任务调度尝…

【TypeScript】TS进阶-函数重载(七)

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、华为云享专家、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff…

一文读懂电商数字员工究竟是什么?| RPA铺第1期

百度的曦灵&#xff0c;中核的核小智、万科集团数字员工“崔筱盼”都曾在2022年度爆火&#xff0c;数字员工一夜之间成为众多行业追捧的对象&#xff0c;那么&#xff0c;他/她们究竟代表着什么&#xff0c;对企业而言&#xff0c;是噱头大于收益&#xff0c;还是收益大于噱头呢…

简单的客户端服务器(多线程)基于json通信

这是一个客户端和服务器通信的小项目&#xff0c;小编自己手写了一个json工具&#xff0c;测试比jsoncpp&#xff0c;protobuf "效率更高"&#xff08;浅拷贝&#xff09;&#xff0c;改写成深拷贝效率会急剧下降&#xff08;小编能力有限&#xff0c;知识点&#xf…

技术分享 | Spring Boot 异常处理

说到异常处理&#xff0c;我们都知道使用 try-catch 可以捕捉异常&#xff0c;可以 throws 抛出异常。那么在 Spring Boot 中我们如何处理异常&#xff0c;如何更优雅的处理异常&#xff0c;如何全局处理异常。是本章讨论解决的问题。Java 异常类首先让我们简单了解或重新学习下…

Android开发-AS学习(一)

完整项目最精简流程&#xff1a;Android <-> 接口 <-> 数据库Android开发工具&#xff1a;Android Studio项目目录信息&#xff1a;一、控件1.1 TextView基础属性描述layout_width组件的宽度layout_height组件的高度id为TextView设置一个组件idtext设置显示的文本内…

Linux 学习笔记(借鉴黑马程序员Linux课程)

Linux视频课程 简介 Linux诞生于1991年&#xff0c;由林纳斯托瓦兹在21岁时完成。此后成为最为流行的服务器操作系统之一。 Linux内核和系统发行版 由Linux系统内核和系统级应用程序两部分组成。 内核提供系统最核心的功能&#xff0c;如&#xff1a;调度CPU、调度内存、调…

【笑小枫的按步照搬系列】Redis多系统安装(Windows、Linux、Ubuntu)

笑小枫&#x1f495; 欢迎来到笑小枫的世界&#xff0c;喜欢的朋友关注一下我呦&#xff0c;大伙的支持&#xff0c;就是我坚持写下去的动力。 微信公众号&#xff1a;笑小枫 笑小枫个人博客&#xff1a;https://www.xiaoxiaofeng.com Windows 下安装 方式一&#xff1a;https…

HCL(新华三模拟器)如何连接CRT及改界面颜色

我使用的HCL版本是2.1.1官网下载连接&#xff1a;https://www.h3c.com/cn/Service/Document_Software/Software_Download/Other_Product/H3C_Cloud_Lab/Catalog/HCL/&#xff0c;一键直达下载官网这个版本可以适配virtualbox的5.2.44的版本&#xff0c;同时支持华为的ensp模拟器…

Spring Security 表单配置(一)

Spring Security 表单配置&#xff08;一&#xff09;工具版本及环境参考资源配置详细说明工具版本及环境 工具&#xff1a; IDEA 2021.3 Maven 3.8.6 JDK 8 Spring Boot 2.7.7 Spring Securiity 5.7.6 参考资源 Spring Security官网: https://docs.spring.io/spring-security…

javaEE 初阶 — 常见的锁策略

文章目录1. 乐观锁 vs 悲观锁2. 互斥锁 vs 读写锁3. 重量级锁 vs 轻量级锁4. 自旋锁 vs 挂起等待锁5. 公平锁 vs 非公平锁6. 可重入锁 vs 不可重入锁7. synchronized 是哪种锁8. 相关面试题1. 乐观锁 vs 悲观锁 乐观锁 指的是预测锁竞争不是很激烈&#xff0c;也就是指这里做的…

排列组合两个列表中的元素 product(a,b)

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】排列组合两个列表中的元素product(a,b)关于以下python代码表述错误的一项是?from itertools import producta [1,2,3]b [4,5,6]print("【显示】a",a)print("【显示】b",…

修改Keil开发环境背景(修改为黑色主题)

修改Keil开发背景&#xff08;修改为黑色主题&#xff09;引言步骤总结引言 我们平时在Keil uVision5下开发单片机/嵌入式程序的时候&#xff0c;如果始终用的是官方的主题背景&#xff0c;往往会因为背景太白了&#xff0c;而导致视疲劳。我们使用VSCode往往不会有这种困扰&a…

Python处理字符串 中文(汉字)编码示例

在实际开发中&#xff0c;发现打印Python打印经常出现乱码&#xff0c;大部分都是编码引起&#xff0c;这里只是简单说一下utf-8/ gbk/ unicode编码之间的相互转换问题&#xff1a; utf-8是Unix下的一种通用编码&#xff0c;gbk是win环境下的一种汉字编码&#xff0c;unicode是…

计算机组成原理_总线仲裁

计算机组成原理总目录总线仲裁 由于总线连接着多个设备&#xff0c;那么在同一时刻多个设备想要占用总线时&#xff0c;就会发生冲突问题 为了解决冲突问题&#xff0c;就需要规定好所有设备使用设备的优先权&#xff0c;仲裁也就是判断设备占用总线的优先权 例如设备A的任务比…