Prometheus Exporter开发

news2024/9/21 8:03:57

Prometheus Exporter开发

Exporter数据格式介绍
Exporter徒手开发
Exporter4种指标类型演示
Exporter自定义注册表
Exporter 基于Collector的模块开发

Exporter介绍

 数据格式

通讯协议
        HTTP协议服务端实现了gzip
数据格式

        text/plain:文本协议

数据格式
prometheus是拉取数据的监控模型它对客户端暴露的数据格式要求如下

 Exporter徒手开发

package main

import (
	"fmt"
	"net/http"
)

func HelloHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "lexporter_request_count{user=\"admin\"} 1000")
}

func main() {
	http.HandleFunc("/metrics", HelloHandler)
	http.ListenAndServe(":8050", nil)
}

 SDK 软件开发套件(Software development kit)

Prometheus 提供了专门的Handler

package main

import (
	"net/http"

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

func main() { 
	// Serve the default Prometheus metrics registry over HTTP on /metrics
	http.Handle("/metrics", promhttp.Handler())
	http.ListenAndServe(":8050", nil)
}

 指标类型

 Exporter 4种指标类型演示

Gauges

是最常见的Metric类型,也就是我们说的实时指标,值是什么就返回什么,并不会进行加工处理
SDK提供了该指标的构造函数: NewGauge

	queueLength := prometheus.NewGauge(prometheus.GaugeOpts{
		// Namespace,Subsystem,Name 会拼接成指标的名称: wu123_mcube_demo_queue _length
        // 其中Name是必填参数
		Namespace: "wu123",
		Subsystem: "mcube_demo",
		Name:      "queue_length",
		// 指标的描述信息
		Help: "The number of items in the queue.",
		// 指标的标签
		ConstLabels: map[string]string{
			"module": "http-server",
		},
	})

Set: 设置指定的值
Inc: +1.
Dec:-1
Add: +n
Sub:-n

# HELP wu123_mcube_demo_queue_length The number of items in the queue.

# TYPE wu123_mcube_demo_queue_length gauge

wu123_mcube_demo_queue_length{module="http-server"} 100

// 测试用例
func TestGauge(t *test.T) {
	queueLength := prometheus.NewGauge(prometheus.GaugeOpts{
		// Namespace,Subsystem,Name 会拼接成指标的名称: magedu _mcube_demo_queue _length// 其中Name是必填参数
		Namespace: "magedu",
		Subsystem: "mcube_demo",
		Name:      "queue_length",
		// 指标的描述信息
		Help: "The number of items in the queue.",
		// 指标的标签
		ConstLabels: map[string]string{
			"module": "http-server",
		},
	})

	queueLength.Set(100)
...
}

 Counter

Counters是计算器指标 用于统计次数使用通过 prometheus.NewCounter0 函数来初始化指标对象

	totalRequests := prometheus.NewCounter(prometheus.CounterOpts{
		Name: "http_requests_total",
		Help: "The total number of handled HTTP requests.",
	})

lnc: +1:计数器增加1

Add: +n:计数器增加23.

# HELP http_requests_total The total number of handled HTTP requests.

# TYPE http_requests_total counter

http_requests_total 10

func TestCounter(t *testing.T) {
	totalRequests := prometheus.NewCounter(prometheus.CounterOpts{
		Name: "http_requests_total",
		Help: "The total number of handled HTTP requests.",
	})

	for i := 0; i < 10; i++ {
		totalRequests .Inc()
	}
...
}

 Histogram概念

Histograms 被叫主直方图或者柱状图,主要用于统计指标值的一个分布情况

Bucket: 设置横轴区间只设置上限 不设下限

0~100

0~90

0~80

0~70

0~60 

在监控里面,Histograms 典型的应用场景 就是统计 请求耗时分布,比如

0~100ms 请求个数

0~500ms 请求个数

0~5000ms 请求个数

为什么不用平均值来进行统计? 不合适

Histograms用法

我们使用NewHistogram初始化一个直方图类型的指标:

	requestDurations := prometheus.NewHistogram(prometheus.HistogramOpts{
		Name: "http reguest duration seconds",
		Help: "A histogram of the HTTP request durations in seconds.",
		// Bucket 配置:第一个 bucket 包括所有在 0.05s 内完成的请求,最后一个包括所有在10s内完成的请求。
		Buckets: []float64{0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10},
	})

observe: 加入样板进行统计

Histograms演示

le="+Inf",表示小于正无穷,也就是统计所有的含义
后缀_sum,参加统计的值的求和
后缀_count 参加统计的值得总数

# HELP http_request_duration seconds A histogram of the HTTP request durations in seconds.
# TYPE http_request_duration seconds histogram
http_request_duration_seconds_bucket{le="0.05"} 2
http_request_duration_seconds_bucket{le="0.1"} 2
http_request_duration_seconds_bucket{le="0.25"} 2
http_request_duration_seconds_bucket{le="0.5"} 4
http_request_duration_seconds_bucket{le="1"} 6
http_request_duration_seconds_bucket{le="2.5"} 6
http_request_duration_seconds_bucket{le="5"} 6
http_request_duration_seconds_bucket{le="10"} 7
http_request_duration_seconds_bucket{le="+Inf"} 8
http_request_duration_seconds_sum 18.53
http_request_duration_seconds_count 8

func TestHistogram(t *testing.T) {
	requestDurations := prometheus.NewHistogram(prometheus.HistogramOpts{
		Name: "http_request_duration _seconds",
		Help: "A histogram of the HTTP request durations in seconds.",
		// Bucket 配置:第一个 bucket 包括所有在 0.05 内完成的请求,最后一个包括所有在10s内完成的请求
		Buckets: []float64(0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10),
	})
	//添加值
	for _, v := range []float64(0.01, 0.02, 0.3, 0.4, 0.6, 0.7, 5.5, 11){
		requestDurations.Observe(v)
...
}

Histograms与分位数

 Summaries
Observe,用于统计数据

用NewSummary来构建该类指标
这种类型的指标 就是用于计算分位数(quantile)的,因此他需要配置一个核心参:你需要统计那个(百)分位的数据

	requestDurations := prometheus.NewSummary(prometheus.SummaryOpts{
		Name : "http_request_duration_seconds",
		Help: "A summary of the HTTP request durations in seconds .",
		Objectives: map[float64]float64{
			0.5: 0.05, // 第50个百分位数,最大绝对误差为0.05。
			0.9: 0.01, // 第90个百分位数,最大绝对误差为0.01。
			0.99: 0.001, // 第99个百分位数,最大绝对误差为0.001。
		},
	}

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

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

相关文章

MySQL性能监控全掌握,快来get关键指标及采集方法!

数据库中间件监控实战&#xff0c;MySQL中哪些指标比较关键以及如何采集这些指标了。帮助提早发现问题&#xff0c;提升数据库可用性。 1 整体思路 监控哪类指标&#xff1f; 如何采集数据&#xff1f; 第10讲监控方法论如何落地&#xff1f; 这些就可以在MySQL中应用起来。…

ChatGPT提示词工程(四):Inferring推断

目录 一、说明二、安装环境三、推断&#xff08;Inferring&#xff09;1. 推断情绪&#xff08;正面 / 负面&#xff09;2. 确定情绪的类型3. 识别愤怒4. 从客户评论中提取产品和公司名称5. 一次完成多项任务6. 推断主题7. 主题中是否包含给定的主题 一、说明 这是吴恩达 《Ch…

【栈】的实现

&#x1f58a;作者 : D. Star. &#x1f4d8;专栏 : 数据结构 &#x1f606;今日分享 : —>&#x1f4d6;区块链 &#xff1a; 小明向你借100块钱&#xff0c;说一周后还你&#xff0c;然后你拿个喇叭大喊一声&#xff1a;我是某某&#xff0c;小明向我借了100块&#xff0c…

Redis缓存(双写一致性问题)

Redis缓存&#xff08;双写一致性问题&#xff09; 1 什么是缓存?1.1 为什么要使用缓存1.2 如何使用缓存 2 添加缓存2.1 、缓存模型和思路2.2、代码如下 3 缓存更新策略3.1 、数据库缓存不一致解决方案&#xff1a;3.2 、数据库和缓存不一致采用什么方案 4 实现商铺和缓存与数…

【C生万物】 指针篇 (初级)

欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e;&#x1f49e; &#x1f449; 专栏&#xff1a;《C生万物 | 先来学C》&#x1f448; 前言&#xff1a; 面对C语言&#xff0c;很多童鞋都会高呼&#xff1a;指针难&#xff0c;指针难&#x…

【计算机专业漫谈】【计算机系统基础学习笔记】W2-1十进制数与二进制数,各进制数直接的转换

利用空档期时间学习一下计算机系统基础&#xff0c;以前对这些知识只停留在应试层面&#xff0c;今天终于能详细理解一下了。参考课程为南京大学袁春风老师的计算机系统基础MOOC&#xff0c;参考书籍也是袁老师的教材&#xff0c;这是我的听课自查资料整理后的笔记 W2-1十进制…

ChatGPT背后的技术:人类反馈强化学习RLHF

文章目录 前言Chat GPT是如何基于RLHF进行训练的RLHF 技术分解预训练语言模型训练奖励模型强化学习微调预训练模型 局限性参考 前言 随着OpenAI推出的Chat GPT火热出圈&#xff0c;Chat GPT背后的技术原理之一&#xff0c;人类反馈强化学习RLHF (Reinforcement Learning from …

Matplotlib 网格线

我们可以使用 pyplot 中的 grid() 方法来设置图表中的网格线。 grid() 方法语法格式如下&#xff1a; matplotlib.pyplot.grid(bNone, whichmajor, axisboth, ) 参数说明&#xff1a; b&#xff1a;可选&#xff0c;默认为 None&#xff0c;可以设置布尔值&#xff0c;true…

prometheus实战之二:使用常见指标

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 本文是《prometheus实战》系列的第二篇&#xff0c;在《prometheus实战之一&#xff1a;用ansible部署》一文咱们部署了prometheus服务&#xff0c…

防护服穿戴检测识别算法 yolov8

防护服穿戴检测识别系统基于yolov8网络模型图片数据识别训练&#xff0c;算法模型自动完成对现场人员是否按照要求穿戴行为实时分析。YOLOv8 算法的核心特性和改动可以归结为如下&#xff1a;提供了一个全新的 SOTA 模型&#xff0c;包括 P5 640 和 P6 1280 分辨率的目标检测网…

【开发工具】 我居然可以使用Office Tool Plus 安装上Office 真的是太不可思议了

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

【开发工具】 Office Tool Plus 居然也可以部署 Office 365 我的天 真的是太厉害了

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

人不成熟的五大特征-读后感

原文地址&#xff1a;人不成熟的五大特征-百度经验 1 立即要回报 1 所有简单的快的&#xff0c;别人也能做&#xff0c;这并不能使你超过别人。 2 做出别人做不出来的复杂成果&#xff0c;需要较长的时间和持续的学习&#xff0c;得到就得付出&#xff0c;时间&#xff0c;资源…

Windows10本地搭建网站教程 - 内网穿透发布公网访问

文章目录 概述1. 搭建一个静态Web站点2. 本地浏览测试站点是否正常3. 本地站点发布公网可访问3.1 安装cpolar内网穿透3.2 创建隧道映射公网地址3.3 获取公网URL地址 4. 公网远程访问内网web站点5. 配置固定二级子域名5.1 保留二级子域名5.2 配置二级子域名 6. 测试访问二级子域…

【Java笔试强训 30】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;最难的问…

家乡特色推荐系统~java~mysql

摘 要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括家乡特色推荐的网络应用&#xff0c;在外国家乡特色推荐系统已经是很普遍的方式&#xff0c;不过国内的管理网站可能还处于起步阶段。家乡特色推荐系统采用java技术&…

常用半导体器件

&#xff08;1&#xff09;N 型半导体 在纯净的半导体硅或锗中掺入适量的五价磷元素&#xff0c;可形成带负电 的自由电子&#xff08;又称多数载流子&#xff09;参与导电。 &#xff08;2&#xff09;P 型半导体 在纯净的半导体硅或锗中掺入适量的三价硼元素&#xff0c;可形…

JavaEE初阶 - 文件/IO

一、认识文件 我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备&#xff0c;当我们想要进行数据保存时&#xff0c;往往不是保存成一个整体&#xff0c;而是独立成一个个的单位进行保存&#xff0c;这个独立的单位就被抽象成文件的概念&#xff0c;就类似办公…

Docker持久化固定容器IP

基于Docker引擎创建Docker容器&#xff0c;在默认条件下创建容器是bridge桥接模式&#xff0c;启动容器IP地址是DHCP随机分配并且递增的&#xff0c;而且容器之间可以互相通信&#xff0c;网段也是固定的。 当Docker容器一旦关闭再次启动&#xff0c;就会导致容器的IP地址再次重…

C#,生信软件实践(01)——序列文件(如FASTA)合并工具的源代码

1 生物信息学简介 生物信息学&#xff08;BioInformatics&#xff09;是研究生物信息的采集、处理、存储、传播&#xff0c;分析和解释等各方面的学科&#xff0c;也是随着生命科学和计算机科学的迅猛发展&#xff0c;生命科学和计算机科学相结合形成的一门新学科。它通过综合…