jjzjj

【可能是全中文网最全】pushgateway入门笔记

Initial-T 2023-04-19 原文

参考链接: 官方文档 中文类官方文档 prometheus官方指南 博客

一 概念

Pushgateway 是一种中介服务,它允许从无法抓取的作业中推送指标

其为了允许临时和批处理作业向 Prometheus 公开其指标。由于这些类型的job可能存在的时间不够长而无法被抓取,因此他们可以将指标推送到 Pushgateway。然后 Pushgateway 将这些指标公开给 Prometheus。

通常,Pushgateway 唯一有效的用例是用于捕获服务级批处理作业的结果, “服务级别”批处理作业是与特定机器或作业实例在语义上不相关的作业。此类作业的指标不应包含机器或实例标签,以将特定机器或实例的生命周期与推送的指标分离。这减轻了在 Pushgateway 中管理陈旧指标的负担。

优缺点

使用它的原因主要是

  • Prometheus 采用 pull 模式,可能由于不在一个子网或者防火墙原因,导致 Prometheus 无法直接拉取各个 target 数据。
  • 在监控业务数据的时候,需要将不同数据汇总, 由 Prometheus 统一收集。

缺点有:

  • 将多个节点数据汇总到 pushgateway, 如果 pushgateway 挂了,受影响比多个 target 大。
  • Prometheus 拉取状态 up 只针对 pushgateway, 无法做到对每个节点有效。
  • Pushgateway 可以持久化推送给它的所有监控数据。因此,即使你的监控已经下线,prometheus 还会拉取到旧的监控数据,需要手动清理 pushgateway 不要的数据。Pushgateway 作为指标缓存的生命周期与将指标推送给它的进程的生命周期根本上是分开的。将此与 Prometheus 通常的pull式监控进行对比:当一个实例消失(有意或无意)时,它的指标将自动随之消失。使用 Pushgateway 时,情况并非如此,您现在必须手动删除任何过时的指标或自己自动执行此生命周期的同步。

二 配置与使用

1 安装pushgateway

可以直接访问官网下载其二进制文件: https://github.com/prometheus/pushgateway/releases,下面演示以最新版本的1.4.3为例:

最简单的执行,可以直接解压并运行:

./pushgateway

默认监听的是9091端口。可以通过以下配置进行更改:

usage: pushgateway [<flags>]
Flags:
      --web.listen-address=":9091"  		监听Web界面,API和遥测的地址。
      --web.telemetry-path="/metrics"  		公开metrics的路径。
      --web.external-url=        			可从外部访问Pushgateway的URL.
      --web.route-prefix=""      			Web端点内部路由的前缀。 默认为--web.external-url的路径.
      --persistence.file=""      			归档以保留metrics。 如果为空,则metrics仅保留在内存中.
      --persistence.interval=5m  			写入持久性文件的最小间隔。
      --log.level="info"         			仅记录具有给定严重性或更高严重性的消息。 有效级别:[debug, info, warn, error, fatal]
      --log.format="logger:stderr"  		设置日志目标和格式。 示例:“ logger:syslog?appname = bob&local = 7”或“ logger:stdout?json = true”
      --version                  			显示应用程序版本。

本机测试改为9095端口(不知道为啥9091的web界面访问不了),将pushgateway移到/usr/local/bin下,启动命令为

/usr/local/bin/pushgateway --web.listen-address=:9095

此时访问网页 ip:9095 即可看到前端页面

访问 ip:9095/metrics,可以看到其指标页面

2 接入prometheus

更改prometheus配置文件,增加

  - job_name: 'pushgateway_name' 
    scrape_interval: 30s 
    honor_labels: true  #加上此配置,exporter节点上传数据中的一些标签将不会被pushgateway节点的相同标签覆盖 
    static_configs: 
        - targets: ["127.0.0.1:9095"] 
          labels: 
              instance: pushgateway_instance               
# pushgateway 中的数据我们通常按照 job 和 instance 分组分类,所以这两个参数不可缺少。

重启Prometheus服务,或进行热加载

curl -X POST http://127.0.0.1:9090/-/reload

此时访问prometheus界面,即可看到targets中出现了 pushgateway相关信息,其中 instance 与 job 都是在配置文件中规定的。job必填,instance没有就为 “” 空字符串。

3 推送数据

推送的指标按组进行管理,由任意数量标签的分组键标识,其中第一个必须是job标签。

curl发送形式说明

–data-binary 与-d, --data类似,如果以@开头,则后面必须跟着文件名,并且文件中的换行符,回车符会保留,也不会做将要发送的数据写入文件“名字”,作用是将文件中的数据发送到指定地方

示例1 :简单推送

单个样本推入由 标识的组中 {job="example_job"}:

echo "example_metric 3.14" | curl --data-binary @- http://127.0.0.1:9095/metrics/job/example_job

可以看到有个 UNTYPED 。因为没有提供了类型信息,所以some_metric将类型的无类型。因为我们只写了job的名称,所以可以看到instance那一列为 空字符串。

示例2:加lable

echo "example_metric 3.14" | curl --data-binary @- http://127.0.0.1:9095/metrics/job/example_job/lable1/example_lable

示例3:复杂推送

cat <<EOF | curl --data-binary @- http://127.0.0.1:9095/metrics/job/some_job/instance/some_instance # TYPE some_metric counter some_metric{label="val1"} 42 # TYPE another_metric gauge # HELP another_metric Just an example. another_metric 2398.283 EOF

示例4: 删除

删除由标识的组中的所有指标 ,{job="some_job",instance="some_instance"}

curl -X DELETE http://127.0.0.1:9095/metrics/job/some_job/instance/some_instance

删除除由 标识的组中的所有指标{job="some_job"}(请注意,这不包括  {job="some_job",instance="some_instance"}上一个示例中组中的指标,即使这些指标具有相同的作业标签)

curl -X DELETE http://127.0.0.1:9095/metrics/job/some_job

删除所有组的所有指标

curl -X PUT http://127.0.0.1:9095/api/v1/admin/wipe #需要通过命令行标志启用管理 API --web.enable-admin-api

三 分析

1 prometheus配置问题

Pushgateway 必须配置为 Prometheus 抓取的目标,使用其中一种常用方法。但是,您应该始终honor_labels: true 在抓取配置中进行设置

配置前后,在Prometheus抓取数据的格式如下

echo "example_metric 3.15" | curl --data-binary @- http://127.0.0.1:9095/metrics/job/example_job/instance/i123

example_metric{exported_instance="i123", exported_job="example_job", instance="pushgateway_instance", job="pushgateway_name"} 3.15 # 配置前 example_metric{instance="i123", job="example_job"}

即如果不配置的话, job跟instance都是默认的Pushgateway的属性,而不是推送主体的属性.

pushgateway 中的数据我们通常按照 job 和 instance 分组分类,所以这两个参数不可缺少。因为 Prometheus 配置 pushgateway 的时候,也会指定 job 和 instance, 但是它只表示 pushgateway 实例,不能真正表达收集数据的含义。所以在 prometheus 中配置 pushgateway 的时候,需要添加 honor_labels: true 参数,从而避免收集数据本身的 job 和 instance 被覆盖。

2 时间戳问题

Prometheus 每个样本只知道一个时间戳,无法区分“推送时间”和“抓取时间”。没有任何用例可以附加不同的时间戳,并且许多用户试图错误地这样做(尽管没有客户端库支持),Pushgateway 拒绝任何带有时间戳的推送。如果您在时间t1

推送指标,您可能会相信 Prometheus 会使用相同的时间戳 t1抓取它们。相反,Prometheus 作为时间戳附加的是它抓取 Pushgateway 的时间。

3 数据类型问题

所有指标必须保持一致:同名的指标必须具有相同的类型,即使它们被推送到不同的组,并且不能重复,即具有相同名称和完全相同的标签对的指标。会导致不一致的推送被拒绝,状态码为 400。

 text format parsing error in line 1: expected float as value, got "abc"

4 数据有效性

pushgateway并不是将Prometheus的pull改成了push,它只是允许用户向他推送指标信息并记录。

而Prometheus每次从pushgateway拉取的数据是最后一次push上来的数据,并不是期间用户推送上来的所有数据。所以设置推送时间与Prometheus拉取的时间相同(

如果客户端一直没有推送新的指标到pushgateway,那么Prometheus将始终拉取最后push上来的数据。

5 推送链接

默认 URL 地址为:http://:9091/metrics/job/{/<LABEL_NAME>/<LABEL_VALUE>}

其中job是必填项,为 job 标签值,后边可以跟任意数量的标签对,一般我们会添加一个 instance/ 实例名称标签,来方便区分各个指标。

附: pgw推送golang例程

// 模拟推送裸金属物理机数据
package main

import (
   "flag"
   "math/rand"
   "time"

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

func main() {
   ExamplePusher_Push()
}

var url string
var uuids = []string{"ss-xldtvkrd6itigznov4howgomidmc"}
var itemKeys = []string{"cpu_util", "mem_util", "disk_util_inband", "disk_read_bytes_rate", "disk_read_requests_rate",
   "disk_write_bytes_rate", "disk_write_requests_rate", "network_incoming_bytes_rate_inband", "network_outing_bytes_rate_inband"}

func ExamplePusher_Push() {

   flag.StringVar(&url, "url", "http://xx.xx.xxx.xxx:9091", "pgw url")
   flag.Parse()

   for _, uuid := range uuids {
      pusher := push.New(url, "bare_metal")
      for _, itemKey := range itemKeys {

         completionTime := prometheus.NewGauge(prometheus.GaugeOpts{
            Name: itemKey,
            Help: itemKey + "_help",
         })

         // 设定推送值
         completionTime.SetToCurrentTime()
         rand.Seed(time.Now().UnixNano())
         value := rand.Intn(100)
         completionTime.Set(float64(value))

         pusher.Collector(completionTime)
      }

      // 在循环外推送,避免重复的label发生覆盖
      err := pusher.Grouping("uuid", uuid).Push()

      if err != nil {
         panic(err)
      }
   }
}

有关【可能是全中文网最全】pushgateway入门笔记的更多相关文章

  1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  2. 亚特兰蒂斯的回声(中文版): chatGPT 的杰作 - 2

    英文版英文链接关注公众号在“亚特兰蒂斯的回声”中踏上一段难忘的冒险之旅,深入未知的海洋深处。足智多谋的考古学家AriaSeaborne偶然发现了一件古代神器,揭示了一张通往失落之城亚特兰蒂斯的隐藏地图。在她神秘的导师内森·兰登教授的指导和勇敢的冒险家亚历克斯·默瑟的帮助下,阿丽亚开始了一段危险的旅程,以揭开这座传说中城市的真相。他们的冒险之旅带领他们穿越险恶的大海、神秘的岛屿和充满陷阱和谜语的致命迷宫。随着Aria潜在的魔法能力的觉醒,她被睿智勇敢的QueenNeria的幻象所指引,她让她为即将到来的挑战做好准备。三人组揭开亚特兰蒂斯令人惊叹的隐藏文明,并了解到邪恶的巫师马拉卡勋爵试图利用其古

  3. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  4. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  5. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  6. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  7. Ruby Regex,获取所有可能的匹配项(不截断字符串) - 2

    我遇到了ruby​​正则表达式的问题。我需要找到所有(可能重叠的)匹配项。这是问题的简化:#Simpleexample"Hey".scan(/../)=>["He"]#Actualresults#Withoverlappingmatchestheresultshouldbe=>["He"],["ey"]我尝试执行并获得所有结果的正则表达式如下所示:"aaaaaa".scan(/^(..+)\1+$/)#Thislooksformultiplesof(here)"a"biggerthanonethat"fills"theentirestring."aa"*3=>true,"aaa"*2=

  8. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  9. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

  10. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

随机推荐