当前位置: 首页 > news >正文

12.2 使用prometheus-sdk向pushgateway打点

本节重点介绍 :

  • 使用golang sdk打prometheus4种指标,推送到pushgateway
    • gauge、counter、histogram、summary的初始化
    • 4种类似的设置值的方法
    • 推送到pushgateway的方法
  • prometheus配置采集pushgateway,grafana上配大盘

golang-sdk

  • 项目地址 https://github.com/prometheus/client_golang

使用sdk打点并推送到pushgateway

首先导入包,初始化pusher 推送对象

import (
"github.com/prometheus/client_golang/prometheus/push"
)
var (// pusher对象pusher *push.Pusher
)

初始化4种数据metrics对象

	// 带标签的gaugeTestMetricGauge01 = prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: "test_metric_gauge_01",Help: "gauge metic test 01",}, []string{"idc", "ip"})// 带标签的counterTestMetricCounter01 = prometheus.NewCounterVec(prometheus.CounterOpts{Name: "test_metric_counter_01",Help: "gauge metic counter 01",}, []string{"path", "code"})// histogramhisStart        = 0.1histWidth       = 0.2TestHistogram01 = prometheus.NewHistogram(prometheus.HistogramOpts{Name:    "test_histogram_01",Help:    "RPC latency distributions.",// histogram 需要传入 bucket的start 和width参数Buckets: prometheus.LinearBuckets(hisStart, histWidth, 20),})// summaryTestSummary01 = prometheus.NewSummaryVec(prometheus.SummaryOpts{Name:       "test_summary_01",Help:       "RPC latency distributions.",// summary需要固定好最后的分位值结果Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},},[]string{"service"},)

编写初始化pusher对象和注册metrics的Init函数

func Init(url string, jobName string) {pusher = push.New(url, jobName)// collector 注册metricspusher.Collector(TestMetricGauge01)pusher.Collector(TestMetricCounter01)pusher.Collector(TestHistogram01)pusher.Collector(TestSummary01)}

编写设置gauge和counter值的函数 setValueGaugeAndCounter

  • counter 只能恒增,需要使用Add函数
// gauge和counter设置值的方法
func setValueGaugeAndCounter() {for {TestMetricGauge01.With(prometheus.Labels{"idc": "bj", "ip": "1.1"}).Set(float64(rand.Intn(100)))TestMetricCounter01.With(prometheus.Labels{"path": "/login", "code": "200"}).Add(float64(rand.Intn(100)))time.Sleep(5 * time.Second)}
}

编写设置histogram值的函数 setValueHistogram

  • histogram 使用Observe函数设置bucket的值
func setValueHistogram() {for {v := rand.NormFloat64()TestHistogram01.Observe(v)time.Sleep(100 * time.Millisecond)}
}

编写设置summary值的函数 setValueGaugeAndCounter

  • summary使用Observe设置值
// Summary设置值的方法
func setValueSummary() {for {v := rand.Float64()TestSummary01.WithLabelValues("uniform").Observe(v)time.Sleep(100 * time.Millisecond)}
}

编写推送到pushgateway的函数

func PushWork() {for {err := pusher.Push()if err != nil {fmt.Println("Could not push completion time to Pushgateway:", err)}time.Sleep(5 * time.Second)}}

main函数启动任务

  • 依次启动设置值的协程
  • 启动push的协程
func main() {rand.Seed(time.Now().UnixNano())Init("http://172.20.70.205:9091/", "my_job")go setValueGaugeAndCounter()go setValueHistogram()go setValueSummary()go PushWork()select {}
}

pushgateway中查看对应指标

  • 举例图片
  • image.png

将单个pushgateway加入prometheus采集job中

  - job_name: 'pushgateway'honor_timestamps: truescrape_interval: 15sscrape_timeout: 10smetrics_path: /metricsscheme: httpstatic_configs:- targets:- 172.20.70.205:9091- 172.20.70.215:9091

在prometheus查询相关指标

promql

  • histogram histogram_quantile(0.95, sum by(le) (rate(test_histogram_01_bucket[5m])))
  • image.png
  • summary test_summary_01
  • counter rate(test_metric_counter_01[1m])
  • image.png
  • gauge test_metric_gauge_01

在grafana上设置相关图表

举例图片

image.png

grafana json

{"annotations": {"list": [{"builtIn": 1,"datasource": "-- Grafana --","enable": true,"hide": true,"iconColor": "rgba(0, 211, 255, 1)","name": "Annotations & Alerts","type": "dashboard"}]},"editable": true,"gnetId": null,"graphTooltip": 0,"id": 11,"links": [],"panels": [{"aliasColors": {},"bars": false,"dashLength": 10,"dashes": false,"datasource": null,"fieldConfig": {"defaults": {},"overrides": []},"fill": 1,"fillGradient": 0,"gridPos": {"h": 9,"w": 12,"x": 0,"y": 0},"hiddenSeries": false,"id": 2,"legend": {"avg": false,"current": false,"max": false,"min": false,"show": true,"total": false,"values": false},"lines": true,"linewidth": 1,"nullPointMode": "null","options": {"alertThreshold": true},"percentage": false,"pluginVersion": "7.5.1","pointradius": 2,"points": false,"renderer": "flot","seriesOverrides": [],"spaceLength": 10,"stack": false,"steppedLine": false,"targets": [{"exemplar": true,"expr": "test_metric_gauge_01","interval": "","legendFormat": "","refId": "A"}],"thresholds": [],"timeFrom": null,"timeRegions": [],"timeShift": null,"title": "test_metric_gauge_01","tooltip": {"shared": true,"sort": 0,"value_type": "individual"},"type": "graph","xaxis": {"buckets": null,"mode": "time","name": null,"show": true,"values": []},"yaxes": [{"format": "short","label": null,"logBase": 1,"max": null,"min": null,"show": true},{"format": "short","label": null,"logBase": 1,"max": null,"min": null,"show": true}],"yaxis": {"align": false,"alignLevel": null}},{"aliasColors": {},"bars": false,"dashLength": 10,"dashes": false,"datasource": null,"fieldConfig": {"defaults": {},"overrides": []},"fill": 1,"fillGradient": 0,"gridPos": {"h": 9,"w": 12,"x": 12,"y": 0},"hiddenSeries": false,"id": 3,"legend": {"avg": false,"current": false,"max": false,"min": false,"show": true,"total": false,"values": false},"lines": true,"linewidth": 1,"nullPointMode": "null","options": {"alertThreshold": true},"percentage": false,"pluginVersion": "7.5.1","pointradius": 2,"points": false,"renderer": "flot","seriesOverrides": [],"spaceLength": 10,"stack": false,"steppedLine": false,"targets": [{"exemplar": true,"expr": "rate(test_metric_counter_01[1m])","interval": "","legendFormat": "","refId": "A"}],"thresholds": [],"timeFrom": null,"timeRegions": [],"timeShift": null,"title": "qps","tooltip": {"shared": true,"sort": 0,"value_type": "individual"},"type": "graph","xaxis": {"buckets": null,"mode": "time","name": null,"show": true,"values": []},"yaxes": [{"format": "short","label": null,"logBase": 1,"max": null,"min": null,"show": true},{"format": "short","label": null,"logBase": 1,"max": null,"min": null,"show": true}],"yaxis": {"align": false,"alignLevel": null}},{"aliasColors": {},"bars": false,"dashLength": 10,"dashes": false,"datasource": null,"fieldConfig": {"defaults": {},"overrides": []},"fill": 1,"fillGradient": 0,"gridPos": {"h": 9,"w": 12,"x": 0,"y": 9},"hiddenSeries": false,"id": 4,"legend": {"avg": false,"current": false,"max": false,"min": false,"show": true,"total": false,"values": false},"lines": true,"linewidth": 1,"nullPointMode": "null","options": {"alertThreshold": true},"percentage": false,"pluginVersion": "7.5.1","pointradius": 2,"points": false,"renderer": "flot","seriesOverrides": [],"spaceLength": 10,"stack": false,"steppedLine": false,"targets": [{"exemplar": true,"expr": "histogram_quantile(0.95, sum by(le) (rate(test_histogram_01_bucket[5m])))","interval": "","legendFormat": "","refId": "A"}],"thresholds": [],"timeFrom": null,"timeRegions": [],"timeShift": null,"title": "histogram 分位置","tooltip": {"shared": true,"sort": 0,"value_type": "individual"},"type": "graph","xaxis": {"buckets": null,"mode": "time","name": null,"show": true,"values": []},"yaxes": [{"format": "short","label": null,"logBase": 1,"max": null,"min": null,"show": true},{"format": "short","label": null,"logBase": 1,"max": null,"min": null,"show": true}],"yaxis": {"align": false,"alignLevel": null}},{"aliasColors": {},"bars": false,"dashLength": 10,"dashes": false,"datasource": null,"fieldConfig": {"defaults": {},"overrides": []},"fill": 1,"fillGradient": 0,"gridPos": {"h": 9,"w": 12,"x": 12,"y": 9},"hiddenSeries": false,"id": 5,"legend": {"avg": false,"current": false,"max": false,"min": false,"show": true,"total": false,"values": false},"lines": true,"linewidth": 1,"nullPointMode": "null","options": {"alertThreshold": true},"percentage": false,"pluginVersion": "7.5.1","pointradius": 2,"points": false,"renderer": "flot","seriesOverrides": [],"spaceLength": 10,"stack": false,"steppedLine": false,"targets": [{"exemplar": true,"expr": "test_summary_01","interval": "","legendFormat": "","refId": "A"}],"thresholds": [],"timeFrom": null,"timeRegions": [],"timeShift": null,"title": "summary 分位值","tooltip": {"shared": true,"sort": 0,"value_type": "individual"},"type": "graph","xaxis": {"buckets": null,"mode": "time","name": null,"show": true,"values": []},"yaxes": [{"format": "short","label": null,"logBase": 1,"max": null,"min": null,"show": true},{"format": "short","label": null,"logBase": 1,"max": null,"min": null,"show": true}],"yaxis": {"align": false,"alignLevel": null}}],"refresh": "10s","schemaVersion": 27,"style": "dark","tags": [],"templating": {"list": []},"time": {"from": "now-30m","to": "now"},"timepicker": {},"timezone": "","title": "自打点pushgatway指标","uid": "Kqdgmyn7k","version": 2
}

全量代码

package mainimport ("fmt""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/push""math/rand""time"
)var (// 带标签的gaugeTestMetricGauge01 = prometheus.NewGaugeVec(prometheus.GaugeOpts{Name: "test_metric_gauge_01",Help: "gauge metic test 01",}, []string{"idc", "ip"})// 带标签的counterTestMetricCounter01 = prometheus.NewCounterVec(prometheus.CounterOpts{Name: "test_metric_counter_01",Help: "gauge metic counter 01",}, []string{"path", "code"})// histogramhisStart        = 0.1histWidth       = 0.2TestHistogram01 = prometheus.NewHistogram(prometheus.HistogramOpts{Name:    "test_histogram_01",Help:    "RPC latency distributions.",Buckets: prometheus.LinearBuckets(hisStart, histWidth, 20),})// summaryTestSummary01 = prometheus.NewSummaryVec(prometheus.SummaryOpts{Name:       "test_summary_01",Help:       "RPC latency distributions.",Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},},[]string{"service"},)// pusher对象pusher *push.Pusher
)func Init(url string, jobName string) {pusher = push.New(url, jobName)// collector 注册metricspusher.Collector(TestMetricGauge01)pusher.Collector(TestMetricCounter01)pusher.Collector(TestHistogram01)pusher.Collector(TestSummary01)}// Summary设置值的方法
func setValueSummary() {for {v := rand.Float64()TestSummary01.WithLabelValues("uniform").Observe(v)time.Sleep(100 * time.Millisecond)}
}// gauge和counter设置值的方法
func setValueGaugeAndCounter() {for {TestMetricGauge01.With(prometheus.Labels{"idc": "bj", "ip": "1.1"}).Set(float64(rand.Intn(100)))TestMetricCounter01.With(prometheus.Labels{"path": "/login", "code": "200"}).Add(float64(rand.Intn(100)))time.Sleep(5 * time.Second)}
}func setValueHistogram() {for {v := rand.NormFloat64()TestHistogram01.Observe(v)time.Sleep(100 * time.Millisecond)}
}func PushWork() {for {err := pusher.Push()if err != nil {fmt.Println("Could not push completion time to Pushgateway:", err)}time.Sleep(5 * time.Second)}}
func main() {rand.Seed(time.Now().UnixNano())Init("http://172.20.70.205:9091/", "my_job")go setValueGaugeAndCounter()go setValueHistogram()go setValueSummary()go PushWork()select {}
}

本节重点总结 :

  • 使用golang sdk打prometheus4种指标,推送到pushgateway
    • gauge、counter、histogram、summary的初始化
    • 4种类似的设置值的方法
    • 推送到pushgateway的方法
  • prometheus配置采集pushgateway,grafana上配大盘

相关文章:

12.2 使用prometheus-sdk向pushgateway打点

本节重点介绍 : 使用golang sdk打prometheus4种指标,推送到pushgateway gauge、counter、histogram、summary的初始化4种类似的设置值的方法推送到pushgateway的方法 prometheus配置采集pushgateway,grafana上配大盘 golang-sdk 项目地址 https://git…...

HTTPS 详解

HTTPS 是以安全为目标的 HTTP 通道,它在 HTTP 中加入 SSL 层以提高数据传输的安全性。HTTP 被用于在 Web 浏览器和网站服务器之间传递信息,但以明文形式发送内容,不提供任何方式的数据加密,如果攻击者截取了 Web 浏览器和网站服务…...

Microsoft Edge 使用方法与秘诀概览

目录 ​编辑引言 Microsoft Edge 功能与技巧概览 掌握这些设置技巧,让 Edge 浏览器的体验更干净 1. 使用阅读视图 2. 开启广告过滤 3. 管理扩展 4. 个性化新标签页 5. 使用网页截图 6. 清理浏览器缓存 7. 管理启动设置 8. 自定义地址栏建议 9. 使用内置笔…...

【视频】onvif、RTP、RTCP、SDP、RTSP、gb21818区别

ONVIF (Open Network Video Interface Forum): ONVIF是一个全球性的开放网络视频接口论坛,致力于发展基于IP网络的物联网设备的标准化。它提供了一个通用的标准接口,使不同厂商生产的网络视频产品能够互相兼容。 RTP (Real-time Transport Protocol): R…...

8-4 循环神经网络

对于 (8.4.2)中的函数 f f f,隐变量模型不是近似值。 毕竟 h t h_{t} ht​是可以仅仅存储到目前为止观察到的所有数据, 然而这样的操作可能会使计算和存储的代价都变得昂贵。 回想一下,我们在前面讨论过的具有隐藏单元的隐藏层。 值得注意的…...

Linux系统编程 --- 多线程

线程:是进程内的一个执行分支,线程的执行粒度,要比进程要细。 一、线程的概念 1、Linux中线程该如何理解 地址空间就是进程的资源窗口。 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是&#xff1…...

Grafana中的rate与irate以及histogram

用法 rate rate函数用于计算一个时间序列在给定时间范围内的平均速率。它对每个数据点进行线性插值来计算速率,因此对于平滑和稳定的数据来说,rate是一个不错的选择。语法如下: rate(metric_name[time_range])metric_name: 指标名称。time…...

什么是网络安全态势感知

态势感知是一种基于环境的、动态、整体地洞悉安全风险的能力,是以安全大数据为基础,从全局视角提升对安全威胁的发现识别、理解分析、响应处置能力的一种方式、最终是为了决策与行动,是安全能力的落地 态势感知的重要性 随着网络与信息技术的…...

php 在app中唤起微信app进行支付,并处理回调通知

<?phpnamespace app\api\controller;use think\facade\Db; use think\facade\Log;class Wxzf {...

高效同步与处理:ADTF流服务在自动驾驶数采中的应用

目录 一、ADTF 流服务 1、流服务源&#xff08;Streaming Source&#xff09; 2、流服务汇&#xff08;Streaming Sink&#xff09; 二、数据链路 1、数据管道&#xff08;Data Pipe&#xff09; 2、子流&#xff08;Substreams&#xff09; 3、触发管道&#xff08;Tri…...

【Arduino】ATmega328PB 连接 LSM6DS3 姿态传感器,并读数据(不确定 ESP 系列是否可行,但大概率是可行的)

总览 1.初始化 ATmega328PB&#xff0c;默认大家已经完成了 328 的配置准备工作&#xff0c;已经直接能够向里面写入程序 2.接线&#xff0c;然后验证 mega328 的 I2C 设备接口能否扫描到 LSM6DS3 3.编写代码&#xff0c;上传&#xff0c;查看串口数据。完成。 一、初始化 AT…...

live2d + edge-tts 优雅的实现数字人讲话 ~

震惊&#xff01;live2d数字人竟开口说话 ~ 之前有想做数字人相关项目&#xff0c;查了一些方案。看了一些三方大厂的商用方案&#xff0c;口型有点尴尬&#xff0c;而且很多是采用视频流的方案&#xff0c;对流量的消耗很大。后来了解了live2d 技术&#xff0c;常在博客网页上…...

二进制安装php

下载php二进制包&#xff1a; 官网地址&#xff1a;https://www.php.net/releases/ PHP: Releaseshttps://www.php.net/releases/在里边可以选择自己要下载的包进行下载&#xff1b; 下载完成后进行解压&#xff1a; tar xvzf php-7.3.12.tar.gz 解压后 进入目录进行预编…...

旧版Pycharm支持的python版本记录

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;旧版Pycharm支持的python版本记录-CSDN博客 前言&#xff1a;近期由于打算研究GitHub上一个开源量化交易平台开发框架&#xff0c;但是该框架是基于python3.10的版本开发&#xff0c;所…...

java实现七牛云内容审核功能,文本、图片和视频的内容审核(鉴黄、鉴暴恐、敏感人物)

目录 1、七牛云内容审核介绍 2、查看内容审核官方文档 2.1、文本内容审核 2.1.1、文本内容审核的请求示例 2.1.2、文本内容审核的返回示例 2.2、图片内容审核 2.2.1、请求参数 2.2.2、返回参数 2.3、视频内容审核 3、代码实现 3.1、前期代码准备 3.2、文本内容审核…...

C++面试基础系列-struct

系列文章目录 文章目录 系列文章目录C面试基础系列-struct1.C中struct2.C中struct2.1.同名函数2.2.typedef定义结构体别名2.3.继承 3.总结3.1.C和C中的Struct区别 4.struct字节对齐5.struct与const 关于作者 C面试基础系列-struct 1.C中struct struct里面只能放数据类型&#…...

代码随想录算法训练营 | 动态规划 part05

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 例子&#xff1a; 背包可容纳重…...

英特尔XPU大模型应用创新

...

仿Muduo库实现高并发服务器——socket网络通信模块

本项目就是基于TCP网络通信搭建的。 TCP: 客户端&#xff1a;socket(),connect(). 服务端&#xff1a;socket(),bind(),listen(),accept(). 下面代码就是对原生API网络套接字的封装。需要熟悉原生API网络套接字接口。 下面这段代码&#xff0c;没什么好讲的&#xff0c;就不…...

模型 神经网络(通俗解读)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。仿脑智能&#xff0c;深度学习&#xff0c;精准识别。 1 神经网络的应用 1.1 鸢尾花分类经典问题 神经网络的一个经典且详细的经典应用是鸢尾花分类问题 。主要是通过构建一个神经网络模型来自动区分…...

事务的使用

1.如何使用事务: 1.1.事务的完成过程&#xff1a; 1.步骤1&#xff1a;开启事务2.步骤2&#xff1a;一系列的DML操作3.步骤3&#xff1a;事务结束状态&#xff1a;提交事务(COMMIT)&#xff0c;中止事务&#xff08;事务回滚ROLLBACK&#xff09; 1.2.事务分类&#xff1a; …...

【免费】企业级大模型应用推荐:星环科技无涯·问知

无涯问知是星环科技发布的大模型应用系统&#xff0c;那么我们先简单了解下星环科技吧&#xff01; 星环科技&#xff08;股票代码&#xff1a;688031&#xff09;致力于打造企业级大数据和人工智能基础软件&#xff0c;围绕数据的集成、存储、治理、建模、分析、挖掘和流通等数…...

从〇 搭建PO模式的Web UI自动化测试框架

Page Object模式简介 核心思想 将页面元素和操作行为封装在独立的类中&#xff0c;形成页面对象&#xff08;Page Object&#xff09;。每个页面对象代表应用程序中的一个特定页面或组件。 优点&#xff1a; 代码复用性高 页面对象可以在多个测试用例中复用。 易于维护 …...

在Ubuntu中重装Vscode(没有Edit Configurations(JSON)以及有错误但不标红波浪线怎么办?)

在学习时需要将vscode删除重装&#xff0c;市面上很多方法都不能删干净&#xff0c;删除之后拓展都还在。因此下面的方法可以彻底删除。注意&#xff0c;我安装时使用的是snap方法。 如果你的VScode没有Edit Configurations(JSON)&#xff0c;以及有错误但不标红波浪线的话&…...

Oracle 用户-表空间-表之间关系常用SQL

问题&#xff1a; 当某一个表数据量特别大&#xff0c;突然插入数据一直失败&#xff0c;可能是表空间不足&#xff0c;需要查看表的使用率 用户-表空间-表之间关系&#xff1a;用户可以有多个表空间&#xff0c;表空间可以有多个表&#xff0c;表只能拥有一个表空间和用户 1.…...

家政服务管理系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;管理阿姨管理&#xff0c;家政公司管理&#xff0c;服务项目管理&#xff0c;家政预约管理&#xff0c;评价管理&#xff0c;留言板管理&#xff0c;系统管理 微信端账号功能包括…...

【算法】并查集的介绍与使用

1.并查集的概论 定义&#xff1a; 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题&#xff08;即所谓的并、查&#xff09;。比如说&#xff0c;我们可以用并查集来判断一个森林中有几棵树、某个节点是否属于某棵树等。 主要构成&#xff1a; …...

Shell——运算符

在 Shell 编程中&#xff0c;运算符用于执行各种类型的操作&#xff0c;如算术运算、字符串比较、文件测试等。以下是 Shell 中常用的运算符分类和示例&#xff1a; 1. 算术运算符 Shell 中使用 expr 或 $(( ... )) 来进行算术运算。 : 加法-: 减法*: 乘法/: 除法%: 取余**:…...

SweetAlert2

1. SweetAlert2 SweetAlert2是一个基于JavaScript的库, 用于在网页上替换标准的警告框(alert), 确认框(confirm)和提示框(prompt), 并提供更加美观和用户友好的界面.需要在项目中引入SweetAlert2, 可以通过CDN链接或者将库文件下载到你的项目中来实现这一点. 通过CDN引入:<…...

c语言中比较特殊的输入函数

目录 一.getchar()函数 1.基本功能 2.使用方法 (1).读取单个字符 (2).读取多个字符&#xff08;直到遇到换行符&#xff09; (3).处理输入中的空白字符 3.返回值 4.应用场景 5.注意事项 二.fgets()函数 1.函数原型 2.工作原理 3.使用示例 (1).从标准输入读取一行…...