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

这篇具有很好参考价值的文章主要介绍了【可能是全中文网最全】pushgateway入门笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考链接: 官方文档 中文类官方文档 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 即可看到前端页面

pushgateway 日志,Go语言开发笔记,linux,运维,云计算

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

pushgateway 日志,Go语言开发笔记,linux,运维,云计算

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没有就为 “” 空字符串。

pushgateway 日志,Go语言开发笔记,linux,运维,云计算

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

pushgateway 日志,Go语言开发笔记,linux,运维,云计算

可以看到有个 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

pushgateway 日志,Go语言开发笔记,linux,运维,云计算

示例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

pushgateway 日志,Go语言开发笔记,linux,运维,云计算

示例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上来的数据。

pushgateway 日志,Go语言开发笔记,linux,运维,云计算

5 推送链接

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

其中job是必填项,为 job 标签值,后边可以跟任意数量的标签对,一般我们会添加一个 instance/ 实例名称标签,来方便区分各个指标。文章来源地址https://www.toymoban.com/news/detail-785135.html

附: 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入门笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 可能是最全的:虚拟机使用失败解决方案汇总

    目录 前言  简单说说 1、安装时报错/安装后无法启用虚拟机  如何解决 方法一:移除Hype-V,成功率:40% 方法二:安装WHP,成功率:99% 方法三:恢复出厂设置,成功率:100% VBX:想滥竽充数?不好意思 补充  2、无法读取键盘输入且无法安装tool(灰色) 方法一:切换至微软默

    2024年02月20日
    浏览(39)
  • 这可能是最全面的MySQL面试八股文了

    MySQL是一个关系型数据库,它采用表的形式来存储数据。你可以理解成是Excel表格,既然是表的形式存储数据,就有表结构(行和列)。行代表每一行数据,列代表该行中的每个值。列上的值是有数据类型的,比如:整数、字符串、日期等等。 第一范式1NF 确保数据库表字段的

    2023年04月25日
    浏览(48)
  • 【PracticalAI丨从0到1】这可能是2023最全面的人工智能学习路线

    现在人工智能可以说是非常的火热,很多同学也想学习。但刚开始时总会觉得比较迷茫,不知道如何开始学,也担心人工智能太难,自己可能学不会。所以这篇文章对如何去学习人工智能,给出一份学习路线。 在人工智能领域,入门阶段的学习重点是掌握基本的数学和编程知

    2024年02月11日
    浏览(49)
  • Unity跨平台UI解决方案:可能是最全的FairyGUI系列教程

    FairyGUI的项目文件结构 .objs 内部数据目录。注意:不要加入版本管理,因为这里的内容是不需要共享的。 assets 包内容放置目录,资源内容都在这里面,里面还可以分不同的包,便于区分管理(看下图) settings 配置文件放置目录。 ****.fairy 项目识别文件,也就是项目名称 目录

    2024年04月14日
    浏览(49)
  • 你可能用得上的 N 款免费/开源中文字体

    除了电脑中那些默认的千篇一律的字体以外,你还知道什么字体?有好用的吗?在网上下载的字体,怕不怕一不小心就侵权了? 现在不用怕了,本文收集了一些免费/开源的中文字体,都是个人免费使用的,供大家参考。如需商用,还请去官网自行查看细则。 2020 年 12 月,日

    2024年02月11日
    浏览(38)
  • 如何解决在Flutter中使用TextField输入框输入中文时可能会出现键盘输入不了中文的问题。

    在Flutter中使用TextField输入框输入中文时可能会出现键盘输入不了中文的问题。 解决方法有以下几种: 在TextField中指定输入类型为TextInputType.text TextField(   keyboardType: TextInputType.text,   ... ) 2.在TextField中指定输入工具为中文输入法: TextField(   inputFormatters: [WhitelistingTextInputFor

    2023年04月22日
    浏览(44)
  • 一文教会你使用AI绘画利器Stable Diffusion!这可能是CSDN最全的AI绘画使用教程,建议收藏!

    大家好,我是程序员晓晓 随着 stable-diffusion 的开源,让更多人有机会直接参与到 AI 绘画的创作中,相关的教程也如雨后春笋般的出现。可是目前我看到的教程同质性较高,通常只能称作为\\\"使用流程讲解\\\",但是通常没有对其原理和逻辑进行深入说明。 所以本文的目的,是用

    2024年01月25日
    浏览(51)
  • 玩转 ChatGPT,看这条就够了,Prompt 最全中文合集

    Prompt 最全中文合集 玩转 ChatGPT,看这条就够了! 🚀 简化流程:ChatGPT Shortcut 提供了快捷指令表,可以快速筛选和搜索适用于不同场景的提示词,帮助用户简化使用流程。 💻 提高生产力:通过使用优化过的提示词,用户可以获得更加准确、有用的回复,从而提高生产力。

    2024年02月07日
    浏览(35)
  • cloud-init 中文手册,最全手册,比官网讲得好

    摘要 您可以使用 cloud-init 自动初始化云实例。您可以在虚拟机上安装 cloud-init 软件包,也可以选择包含 cloud-init 的 Red Hat Enterprise Linux 镜像。您可以在多个红帽产品中使用 cloud-init。 红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:m

    2024年02月13日
    浏览(37)
  • Linux下安装ElasticSearch-analysis-ik中文分词器插件,以及可能出现的异常处理

            注意:安装可以采用在线方式、离线方式,但是不建议在线安装,速度超级慢,本文只介绍离线安装方式                 下载地址:https://github.com/medcl/elasticsearch-analysis-ik                 切记选择版本需要跟ElasticSearch保持一致,否则可能会出现一些未知的异

    2024年02月07日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包