普罗米修斯监控系统_一步步教你用Prometheus搭建实时监控系统系列(二)——详细分析拉取和推送两种不同模式…

普罗米修斯监控系统_一步步教你用Prometheus搭建实时监控系统系列(二)——详细分析拉取和推送两种不同模式…前言本系列着重介绍Prometheus以及如何用它和其周边的生态来搭建一套属于自己的实时监控告警平台。本系列受众对象为初次接触Prometheus的用户,大神勿喷,偏重于操作和实战,但是重要的概念也会精炼出提及下。系列主要分为以下几块Prometheus各个概念介绍和搭建,如何抓取数据(一步步教你用Prometheus搭建实时监控系统系列(一)——上帝之火,普罗米修斯的崛起)如何推送数据…

大家好,又见面了,我是你们的朋友全栈君。

前言

本系列着重介绍Prometheus以及如何用它和其周边的生态来搭建一套属于自己的实时监控告警平台。

本系列受众对象为初次接触Prometheus的用户,大神勿喷,偏重于操作和实战,但是重要的概念也会精炼出提及下。系列主要分为以下几块

  • Prometheus各个概念介绍和搭建,如何抓取数据(一步步教你用Prometheus搭建实时监控系统系列(一)——上帝之火,普罗米修斯的崛起)
  • 如何推送数据至Prometheus,推送和拉取分别用于什么样的场景(本次分享内容)
  • Prometheus数据的结构以及查询语言PromQL的使用
  • Java应用如何和Prometheus集成,如何启用服务发现,如果自定义业务指标
  • Prometheus如何和Grafana可视化套件进行集成和设置告警
  • 教你如何手写一个集成了监控Dubbo各个指标的java套件
  • 实际案例分享,如何做各个业务端和系统端的监控大盘

抓取和推送

拉取模式:

Prometheus获取数据的方式只有拉取(PULL),即Prometheus会以固定频率去请求每个target所提供的http url来获取数据。这就需要每个服务端点提供http的接口来获取实时的数据。

940ae7af31c5bfe11e99cc5dd3a118c4.png

推送模式:

Prometheus也变相的实现了推送数据的方式。

为什么说是变相呢。因为Prometheus获取数据的方式一直是拉取方式,官方并没有提供推送数据的功能。但是官方为了兼容推送这种方式,增加了一个PushGateway组件。

这个组件相当于一个代理服务,独立部署。它没有数据抓取功能,只能被动的等待数据推送。应用把数据推送到PushGateway后,Prometheus再从PushGateway抓取。

79dc3cb689013223d0e465c8dff92f46.png

推送模式要注意的点

即便客户端推了全量的数据到了PushGatewayPrometheus也不是每次拉取这个期间用户推上来的所有数据。

事实上Prometheus只拉取用户最后一次push上来的数据。

在这个系列一的时候,曾经提到过Prometheus其实并不需要每一个精确的数据,长期保存的是中等或者低精度的数据。它每次只抓取一个数据,在固定的频率下。也能形成某种数据的趋势。

如果客户端一直没有推送新的指标到PushGateway,那么Prometheus将始终拉取最后推送上的数据,直到指标消失,默认是5分钟。

Pushgateway本意是不会存储指标的,但是为了让pushgateway意外重启一类的故障之后能够重新读取到原来的指标,添加了一个将指标暂时存储到本地的功能,参数--persistence.interval=5m就是默认保持5分钟,5分钟后,本地存储的指标会删除。可以通过调节这个值来修正发现异常的时间。

通过单个Pushgateway监控多个实例时,Pushgateway有可能成为单点故障和潜在瓶颈

如果要用Pushgateway的话,建议多点部署。然后前面通过nginx进行反向代理多个节点,进行负载均衡。

推送模式适用的场景

  • Prometheus 采用定时拉取模式,可能由于子网络或者防火墙的原因,不能直接拉取各个Target的指标数据,此时可以采用各个TargetPushGateway上推送数据,然后PrometheusPushGateway上定时拉取
  • 在监控各个业务数据时,需要将各个不同的业务数据进行统一汇总,此时也可以采用PushGateway来统一收集,然后Prometheus来统一拉取

搭建

Pushgatewaydocker安装和普通安装两种,这里才用普通安装

先上prometheus的github release主页

https://github.com/prometheus/pushgateway/releases

按照需要下载对应的包,我这里是需要部署在linux服务器上,所以下载这个

1ad1b84302f52e6190714fb49aaff72f.png

下载好,解压。运行:

nohup ./pushgateway &

启动起来后,默认端口为9091

在浏览器上根据ip+port可以访问到如下页面,就算启动成功了:

30606725f56c4368e1d1f78699dfd3c6.png

除此之外还要在Prometheus的配置文件里设置Target:

- job_name: 'pushgateway'
    scrape_interval: 10s # 每过10秒拉取一次
    honor_labels: true
    static_configs:
    - targets: ['localhost:9091']
      labels:
          instance: pushgateway

设置完毕后重启Prometheus,然后会在Target选项卡里看到状态为UPPushgateway

设置阶段就完成了。

URL推送测试

我这里用postman软件进行推送测试,推送url的格式为:

/metrics/job/{//}

016a3213a2b25b88b659d9f6cede4dc4.png

这个测试用例为意思是,推送一个指标aaa,标签为bbb=BBB,ccc=CCC,值为111.1到一个组上,这个组为job=pushgateway,instance=demo

其实你可以简单的理解为这个指标aaa带有4个标签:job,instance,bbb,ccc。只是job和instance是属于组上的标签。

同一个组里的相同的指标,Prometheus每次只取最新的,不同组内可以有相同的指标。

关于数据结构和标签结构系列的下一篇文章会详细介绍。

总之,你提交这个POST请求后,可以在http://ip:9091上看到如下数据:

aeb39a491450b66ccfc7fffb4a9ce4ca.png

可以看到,aaa这个标签已经成功的被提交到Pushgateway里了。

接下来,我们在Prometheus里查询这个指标:

3d4168a4874f9c7c81fe0505f8459065.png

可以看到,Prometheus也成功的拉取到了这个指标。

Java端利用SDK进行推送

虽然我们在java服务端也能利用httpclient等工具进行提交,但是需要自行组装很多请求体。Prometheus官方提供了一个SDK。

首先在Maven中引入依赖包:

<dependency>
   <groupId>io.prometheusgroupId>
   <artifactId>simpleclient_pushgatewayartifactId>
   <version>0.9.0version>
dependency>

Gauge,Timer,Counter,Summary四种常见的指标进行推送示例:

public void run(String... args) throws Exception { 
     
      Gauge guage = Gauge.build("my_custom_metric", "This is my custom metric.")
                 .labelNames("aaa","bbb").register();
      Gauge.Child child = guage.labels("AAA","BBB");
      child.set(334.5);

      Gauge timerGauge = Gauge.build("my_timer_metric","this is my timer metric.").register();
      Gauge.Timer timer = timerGauge.startTimer();
      Thread.sleep(3000L);

      Counter counter = Counter.build("my_count_metric","this is my count metric.").register();
      counter.inc();
      counter.inc();

      Summary summary = Summary.build("my_summary_metric","this is my summary metric.").register();
      summary.observe(45.6);
      summary.observe(54.5);

      String url = "xxx.xxx.xxx.xxx:9091";
      PushGateway pg = new PushGateway(url);
      Map groupingKey = new HashMap<>();
      groupingKey.put("instance", "my_instance");
      pg.pushAdd(CollectorRegistry.defaultRegistry, "my_job", groupingKey);
}

这段代码演示了4个指标批量提交的场景。通过注册到CollectorRegistry.defaultRegistry里,最后一起pushAdd

我们可以在Pushgateway里查询到提交的指标:

fce8b6f6df5b129437a793fa32aefbce.png

同样在Prometheus里也能查询到这4个指标,具体图示就不贴了。可以自己尝试下。

最后

这个系列旨在利用实战操作教你一步步搭建自己系统和业务监控大盘。后面会继续更新。下一个章节将分析:Prometheus中的数据格式分析以及PromQL的使用。

关注作者

微信公众号搜索 「元人部落」:

关注后回复 “资料” 免费获取50G的技术资料,包含一整套企业级微服务课程以及一套秒杀课程

4172cbc75e77afa1038c672d6b9c5aaf.png
file

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161765.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • v-if与v-show的区别

    v-if与v-show的区别相同点:v-if与v-show都可以动态控制dom元素显示隐藏不同点:v-if显示隐藏是将dom元素整个添加或删除,而v-show隐藏则是为该元素添加css–display:none,dom元素还在。都修改为false后,第一个div是直接被移除掉了需要注意的是,当一个元素默认在css中加了display:none属性,这时通过if-show修改为true是无法让元素显示的。…

  • PA功率放大器的设计「建议收藏」

    各种无线通信系统的发展,如GSM、WCDMA、TD-SCOMA、WiMAX和Wi-Fi,大大加速了半导体器件和射频功率放大器的研究进程。射频功率放大器在无线通信系统中起着至关重要的作用,它的设计好坏影响着整个系统的性能,因此,无线系统需要设计性能良好的放大器。而且,为了适应无线系统的快速发展,产品开发的周期也是一个重要因素。另外,在各种无线系统中由于不同调制类型和多载波信号的采用,射频工程师为减小功率放大器的非线性失真,尤其是设计无线基站应用的高功率放大器时面临着巨大的挑战。

  • 在线navicat16 激活码 键[在线序列号]

    在线navicat16 激活码 键[在线序列号],https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • 图书馆借阅系统「建议收藏」

    图书馆借阅系统一、图书馆借阅系统是对书籍信息操作的信息管理系统。书籍信息包括书名、作者、编号、是否借出。本系统针对两类用户(图书管理员和学生)使用,对于图书馆管理员,可以进行查看书籍列表、查找书籍、新增书籍信息、删除书籍、退出登录操作;对于学生,可以进行查看书籍列表、查找书籍、借阅书籍、归还书籍、退出登录操作。二、代码部分1.book包的建立Book类的建立对于图书馆借阅系统,把书看作一个对象,根据该book所具有的属性,定义一系列书籍的私有属性,以及对这些属性进行操作的访问器(get())和设置器

  • 无人驾驶汽车毫米波雷达_无人驾驶雷达

    无人驾驶汽车毫米波雷达_无人驾驶雷达在上一次分享中,我介绍了毫米波雷达的原理、数据特性及优缺点。毫米波雷达的低环境敏感和低成本的特性使得其在ADAS和自动驾驶领域得到了广泛的应用。今天要介绍的是一款极其常见的传感器——超声波雷达。如果你觉得超声波雷达有些陌生,那么它还有一个更通俗的名字——倒车雷达。在倒车入库,慢慢挪动车子的过程中,在驾驶室内能听到”滴滴滴“的声音,这些声音就是根据超声波雷达的检测距离给司机…

  • 新东方俞敏洪

    新东方俞敏洪新东方俞敏洪作者:郑志颖http://www.caigou.com.cn/news/20170405133.shtml俞敏洪互联网时代的教育技术一个人在具体环境中接受教育,受什么影响?我看受四个因素的影响:时间因素、空间因素、师资因素和工具因素。传…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号