【云原生】Prometheus Pushgateway使用详解

目录

一、前言

二、Pushgateway概述

2.1 什么是Pushgateway

2.1.1 Pushgateway在Prometheus中的位置

2.2 为什么需要Pushgateway

2.3 Pushgateway作用

2.4 Pushgateway 工作原理

2.5 Pushgateway 使用场景

2.6 Pushgateway 优缺点

三、Pushgateway 部署

3.1 二进制安装

3.1.1 下载安装包

3.1.2 解压安装包

3.1.3 启动服务

3.1.4 访问控制台

3.2 docker安装

四、集成Prometheus与操作实践

4.1 Prometheus集成Pushgateway过程

4.1.1 修改Prometheus配置文件

4.1.2 重新加载Prometheus服务

4.1.3 访问Prometheus控制台

4.2 Pushgateway 监控数据操作使用

4.2.1 使用curl命令推送监控数据

4.2.2 删除监控的数据

4.2.3 使用curl命令推送多条数据

4.2.4 删除某个实例组下的所有数据

4.3 Pushgateway 监控Linux目录文件数量变化

4.3.1 设置待监控的文件目录

4.3.2 编写shell脚本

4.3.3 执行一次shell推送指标数据

4.3.4 将shell脚本配置到定时任务中

4.3.5 效果验证

4.4 设置通知告警

4.4.1 打开Alertmanager相关配置

4.4.2 配置告警规则文件

4.4.3 重启或重新加载服务

4.4.4 效果验证

五、写在文末


一、前言

在使用Prometheus 进行服务监控时,通常是利用Prometheus pull(主动拉取)的模式对被监控的服务指标进行纳管,这也是很多使用Prometheus 做服务监控的方法,但使用这种方式是有前提的,即被监控的服务所在机器能够暴露相应的端口,并且网络问题需要解决。然而在实际业务中,并非所有的被监控的服务器都会被授权做这样的操作,即严格管控入口信息,在这样的情况下,如何还能让Prometheus 正常监控其他的服务信息呢?

二、Pushgateway概述

2.1 什么是Pushgateway

Prometheus Pushgateway 是 Prometheus 生态系统中的一个重要组成部分,它用于接收和聚合来自非持久化源的监控数据。Pushgateway 允许一次性作业或不常运行的服务将指标推送到 Prometheus,而不需要 Prometheus 主动拉取这些数据。这对于那些不能或不应该定期运行的进程特别有用,例如批处理作业、长时间运行的命令行工具、或那些可能不总是活动的服务。

2.1.1 Pushgateway在Prometheus中的位置

从官方的Prometheus架构图中不难看出,Pushgateway 属于Prometheus体系中的一个重要组成部分,也就是说,Prometheus可以通过配置的方式直接与Pushgateway 直接进行集成。

2.2 为什么需要Pushgateway

Pushgateway 是Prometheus 生态中一个重要的工具,Prometheus Pushgateway 的存在主要是为了解决 Prometheus 核心拉取(pull)模型的一些局限性,特别是当涉及到那些不能或不适合被持续监控的服务和作业时。以下是为什么需要 Prometheus Pushgateway 的几个主要原因:

  • Prometheus 才有pull模式,可能由于不在一个子网或者防火墙的原因,导致Prometheus 无法直接拉取各个target的数据;

  • 在监控业务数据的时候,需要将不同的数据进行汇总,由Prometheus 统一搜集;

  • exporter不能满足需要的时候,也可以通过自定义程序(java,python,shell)监控我们想要的数据;

2.3 Pushgateway作用

Prometheus Pushgateway 在 Prometheus 监控生态中扮演着一个特殊的角色,主要用于解决那些不适合或不能通过常规 Prometheus 拉取(pull)模式进行监控的场景。以下是 Pushgateway 的主要作用:

  • 支持一次性或非持续性服务

    • 对于那些运行一次就结束的服务,如批处理作业、长期运行的命令行工具或那些不是持续运行的服务,Pushgateway 允许它们在运行期间或结束时将指标推送到 Pushgateway。这使得 Prometheus 可以在这些服务运行期间或之后收集到关键的性能数据。

  • 聚合临时数据源

    • Pushgateway 可以作为多个临时或非持久化数据源的聚合点。这些数据源可能只在特定的时间段内存在,或者它们可能没有固定的网络位置。Pushgateway 提供了一个统一的接口,让 Prometheus 能够从这些来源收集数据。

  • 解决推送(push)需求

    • Prometheus 本质上是一个拉取(pull)系统,它主动从目标拉取监控数据。然而,有些系统可能更倾向于或只能将数据推送给监控系统。Pushgateway 为此类场景提供了解决方案,允许数据源将数据推送到 Pushgateway,然后再由 Prometheus 拉取。

  • 数据持久化

    • Pushgateway 会暂时存储接收到的指标数据,直到 Prometheus 下一次拉取。这确保了即使数据源不再可用,数据也不会丢失。这对于那些可能在数据收集后不久就终止的服务尤为重要。

  • 标准化数据收集

    • 通过使用 Pushgateway,可以标准化不同数据源的监控数据收集流程,无论这些数据源的运行特性和生命周期如何。这简化了 Prometheus 的配置,因为 Prometheus 只需关注从 Pushgateway 拉取数据,而不必针对每个数据源进行单独配置。

  • 减少监控开销

    • 对于那些不能持续运行或维护一个开放的网络端口的服务,使用 Pushgateway 可以避免为监控目的而增加不必要的运行时开销。

总的来说,Prometheus Pushgateway 是一个关键组件,它增强了 Prometheus 的灵活性和适用范围,允许监控系统更全面地覆盖不同类型的监控需求,尤其是那些不适合或不能使用标准拉取模式的服务。通过充当数据源和 Prometheus 之间的中介,Pushgateway 确保了即使是最短暂的服务也能被有效地监控。

2.4 Pushgateway 工作原理

Pushgateway 在使用时,主要包括下面的步骤:

  • 数据推送

    • 通常,Prometheus 通过主动从目标(如应用服务器)拉取指标来收集数据。然而,Pushgateway 允许数据源(客户端)将指标推送到一个持久化的存储中,这个存储就是 Pushgateway 本身。

  • 聚合和持久化

    • Pushgateway 接收来自多个数据源的指标,并将它们聚合在一个地方。它负责持久化这些数据,直到 Prometheus 拉取它们为止。Pushgateway 通过一个 HTTP 接口暴露这些聚合后的指标。

  • Prometheus 拉取

    • Prometheus 会定期从 Pushgateway 拉取指标,就像它从任何其他目标拉取数据一样。这意味着 Prometheus 可以将 Pushgateway 视为一个常规的监控目标,从而可以使用标准的查询和可视化工具来分析这些数据。

2.5 Pushgateway 使用场景

Pushgateway 在下面的场景中可以考虑选择使用:

  • 批处理作业

    • 执行批处理或定时任务的应用程序可以将它们的运行指标推送到 Pushgateway,在作业完成后。

  • 长时间运行的进程

    • 对于那些不总是运行或活跃的进程,Pushgateway 提供了一种将指标发送给 Prometheus 的方法,而不需要这些进程一直监听一个端口。

  • 非持久化数据源

    • 临时或短暂存在的数据源可以使用 Pushgateway 来确保它们的监控数据被保存下来,直到 Prometheus 下一次拉取。

2.6 Pushgateway 优缺点

Pushgateway 优点:

  • 灵活性

    • Pushgateway 提供了一种灵活的方式来收集那些难以用常规拉取方式监控的指标

  • 数据聚合

    • 它可以聚合来自多个源的指标,使得 Prometheus 不必直接与每个源交互

  • 持久化

    • 即使数据源不再可用,Pushgateway 也会保持数据,直到 Prometheus 下一次拉取

尽管Pushgateway 具有一些不错的优势,但是也不能忽略其局限性和弊端,总结了下面几点:

  • 将多个节点数据汇总到Pushgateway ,如果Pushgateway 挂了,受影响比多个被监控的taget大;

  • Pushgateway 拉取状态up只针对Pushgateway ,无法做到对每个节点有效;

  • Pushgateway 可以持久化推送给它的所有监控数据;

因此,即使你的监控已经下线,Prometheus 还会拉取到旧的数据,需要手动清理Pushgateway 不要的数据

三、Pushgateway 部署

Pushgateway 提供了多种安装方式,通常可以选择二进制包安装,也可以使用docker安装,下面分别介绍一下。

3.1 二进制安装

3.1.1 下载安装包

安装包下载地址:https://prometheus.io/download/

选择适合你的操作系统的安装包下载到本地,linux服务器上也可以直接使用wget下载

wget https://github.com/prometheus/pushgateway/releases/download/v1.9.0/pushgateway-1.9.0.linux-amd64.tar.gz

3.1.2 解压安装包

使用下面的命令进行解压

tar -zxvf pushgateway-1.9.0.linux-amd64.tar.gz

3.1.3 启动服务

进入解压后的pushgateway安装包,里面有个启动脚本,在当前的目录下,可以直接使用下面的命令前台启动

./pushgateway

也可以使用下面的命令后台启动

nohup ./pushgateway >nohup.out 2>& 1 & 

3.1.4 访问控制台

浏览器可以访问: IP:9091,效果如下

3.2 docker安装

执行下面的命令启动docker容器

docker run -d -p 9091:9091 --name pushgateway prom/pushgateway

启动成功后,浏览器方向一下,仍然可以看到上述的效果

四、集成Prometheus与操作实践

4.1 Prometheus集成Pushgateway过程

4.1.1 修改Prometheus配置文件

进入Prometheus安装目录,找到prometheus.yml,添加下面的配置信息

- job_name: 'pushgateway'honor_labels: truescrape_interval: 10sstatic_configs: - targets: ["Pushgateway服务IP:9091"]

核心参数说明:

  • job_name:Prometheus 用来标识从 Pushgateway 收集的数据的名称;

  • scrape_interval:10s,表示 Prometheus 将每 60 秒从 Pushgateway 拉取数据一次;

  • honor_labels:true,添加此配置之后,exporter节点上传数据中的一些标签将不会被pushgateway节点相同的标签覆盖;

4.1.2 重新加载Prometheus服务

4.1.3 访问Prometheus控制台

登录Prometheus控制台,在Targets就能看到Pushgateway 接入进来了

4.2 Pushgateway 监控数据操作使用

可以使用多种方式向Pushgateway 推送业务需要监控的数据,下面演示下常用的几种推送方法

4.2.1 使用curl命令推送监控数据

演示操作1:向{job="some_job"} 添加单条数据,使用下面的命令操作:

echo "some_metric 66688" | curl --data-binary @- http://Pushgateway服务IP:9091/metrics/job/some_job

执行完成后,进入Pushgateway 控制台可以看到一条待监控的数据出现了

也可以进入Pushgateway 的Metrics页面,通过关键词搜索定位也能找到这条监控数据

补充说明:对于一次性添加多条数据,也可以使用下面的方式操作

echo '
# HELP request_total Number of processed requests.
# TYPE request_total counter
request_total{method="GET"} 1234
request_total{method="POST"} 4321# HELP response_time_seconds Time spent processing the request in seconds.
# TYPE response_time_seconds histogram
response_time_seconds_bucket{le="0.05"} 100
response_time_seconds_bucket{le="0.1"} 200
response_time_seconds_bucket{le="0.25"} 300
response_time_seconds_bucket{le="0.5"} 400
response_time_seconds_bucket{le="1"} 500
response_time_seconds_bucket{le="+Inf"} 600
response_time_seconds_sum 123.45
response_time_seconds_count 600
' | curl --data-binary @- http://pushgateway-host:9091/metrics/job/my_job

4.2.2 删除监控的数据

使用下面的命令对之前添加的监控数据进行删除

curl -X DELETE http://Pushgateway服务IP:9091/metrics/job/some_job

执行完成后,界面上就看不到了

4.2.3 使用curl命令推送多条数据

一次性添加更多更复杂的数据时,通常需要带上instance(some_instance为instance名),表示数据来源位置,如下:

cat <<EOF | curl --data-binary @- http://服务IP:9091/metrics/job/some_job/instance/some_instance
some_metric{label="value"} 666
another_metric{label="IP"} 168
EOF

执行完成后,查看Pushgateway 控制台检查是否推送成功,效果如下:

metric端点也能查到这条数据

4.2.4 删除某个实例组下的所有数据

使用下面的命令删除某个instance下的所有数据

curl -X DELETE http://服务IP:9091/metrics/job/some_job/instance/some_instance

4.3 Pushgateway 监控Linux目录文件数量变化

需求:监控linux某个目录下的文件变化,当目录下的文件数量超出一定量时进行告警,实现思路

  • 编写shell脚本,在脚本中输出待监控的目录下文件数量;

  • 拿到第一步的数量后,使用curl的方式,配置一个指标将当前的文件数量推送至Pushgateway ;

  • 使用定时任务,定期执行shell脚本,动态上报最新的文件数量到Pushgateway ;

4.3.1 设置待监控的文件目录

如下是本次待监控的文件目录,在当前目录下有2个文件

4.3.2 编写shell脚本

脚本内容如下:

#!/bin/bash
FILE_NUM=`ls -l /usr/local/soft/pro/file-sd |sed 1d | wc -l`
echo "data_file_num ${FILE_NUM}" | curl --data-binary @- http://服务IP:9091/metrics/job/file_job/instance/file_instance

4.3.3 执行一次shell推送指标数据

使用 sh files_num.sh执行一下,将指标数据推送到Pushgateway

执行完成后在Pushgateway 控制台可以看到推送的指标数据

通过metrics端点也能搜索到当前的指标信息,目前文件目录下有2个文件

4.3.4 将shell脚本配置到定时任务中

为了让Pushgateway 持续监控注册上来的指标数据,需要某种方式能够动态的上报指标最新数据到Pushgateway ,所以将shell脚本配置到linux的定时任务中,使用下面的命令,打开全局的定时任务配置文件:

crontab -e

将下面的配置信息配置进去,然后保存退出即可

*/1 * * * * /usr/local/soft/pro/files_num.sh

4.3.5 效果验证

在待监控的目录下随机添加几个文件

由于定时任务是每分钟执行一次,等待一分钟之后,再去Pushgateway 的指标数据页面检查,可以看到此时已经检测到最新的文件数量是5了

在Prometheus控制台,搜索指标名称也能查到,说明指标数据也进入了Prometheus进行监控

4.4 设置通知告警

基于上一步的操作,如果被监控的指标达到了某个设置的标准,比如目录下的文件数量超过多少,目录占用的空间达到多少的时候,就需要进行通知告警,结合之前分享的通知告警内容,这里需要配置一下Alertmanager;

4.4.1 打开Alertmanager相关配置

进入Prometheus安装目录,找到prometheus.yml,将之前Alertmanager的配置信息打开(如果没有配置的话自行配置进去)

#全局配置
alerting:alertmanagers:- static_configs:- targets:- 服务IP:9093#job配置   
scrape_configs:            - job_name: "alertManager"scrape_interval: 10smetrics_path: '/metrics'static_configs:- targets: ["服务IP:9093"]           

配置完成后,注意重启(或重新加载Prometheus服务),然后登录Prometheus控制台,看到下面的效果

4.4.2 配置告警规则文件

找到告警规则文件,添加下面的配置信息

- name: pushgatewayrules: - alert: DataFileNumexpr: data_file_num > 5for: 0mlabels:severity: criticalannotations: summary: '数据目录文件数量过多了'description: "数据目录文件数量过多了,超过5个了,当前数量:{{ $value }}"

4.4.3 重启或重新加载服务

上述规则文件配置完成后,建议重新加载一下Prometheus与Alertmanager服务

4.4.4 效果验证

在被监控的目录下再添加几个新的文件

添加完成之后,等待1分钟左右,理论上将会触发告警,首先进入Prometheus控制台,可以看到告警规则已经被触发了

在Pushgateway 的指标列表中,也获取到了最新的文件数量

后续还可以将告警内容发送至邮箱中,也可以利用Grafana进行数据的指标展示以更好的效果呈现出来

五、写在文末

本文详细总结了Prometheus Pushgateway的使用,并通过实际案例演示了Pushgateway如何结合真实的场景进行使用,希望对看到到同学有用,本篇到此结束,感谢观看。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ip透传及实例

IP 透传介绍 “IP 透传”&#xff08;IP Passthrough&#xff09;是一种网络配置方式&#xff0c;指的是将网络服务提供商分配给用户的公网 IP 地址直接传递或分配给用户设备&#xff0c;而不是经过网络地址转换&#xff08;NAT&#xff09;处理。 在传统的网络环境中&#xf…

HTML5+JavaScript绘制彩虹和云朵

HTML5JavaScript绘制彩虹和云朵 彩虹&#xff0c;简称虹&#xff0c;是气象中的一种光学现象&#xff0c;当太阳光照射到半空中的水滴&#xff0c;光线被折射及反射&#xff0c;在天空上形成拱形的七彩光谱&#xff0c;由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…

Qt WebEngine基于WebEngineScript注入js脚本

在之前的文章中&#xff0c;我们介绍了Qt WebEngine注入js的用法&#xff0c;及runJavaScript()的用法&#xff0c;该方法主要是用在页面加载完成后&#xff0c;为了和网页做一些交互时使用。有时候需要监听网页加载完成的一些状态或信息&#xff0c;则需要网页加载前注入js来实…

VSCODE platformio ESP32-S3 内置 JTAG 接口断点单步调试笔记

ESP32 S3的两种JTAG调试方法 ESP32 S3的有两种JTAG调试方法&#xff0c;直接连接板子上的JTAG引脚进行调试&#xff0c;或者用ESP32-S3 内置 JTAG 接口进行调试&#xff0c;这些方法有助于开发者在开发过程中进行更深入的调试。 1、ESP32-S3 内置 JTAG 接口 使用 ESP32-S3 内…

VSCode Markdown Preview Enhanced启用PlantumlL支持

目录 VSCode Markdown Preview Enhanced启用Plantuml支持安装Java下载Plantuml最新版本jar文件配置Markdown Preview Enhanced中Plantuml Jar Path路径 VSCode Markdown Preview Enhanced启用Plantuml支持 当需要Markdown支持PlantUML语法显示支持时&#xff0c;需要进行如下设…

学单片机怎么在3-5个月内找到工作?

每个初学者&#xff0c;都如履薄冰&#xff0c;10几年前&#xff0c;我自学单片机时&#xff0c;也一样。 想通过学习&#xff0c;找一份体面点的工作&#xff0c;又害怕辛辛苦苦学出来&#xff0c;找不到工作。 好在&#xff0c;当初执行力&#xff0c;还算可以&#xff0c;自…

使用FFmpeg实现摄像头RTMP实时推流

在当今的数字时代,视频直播已成为连接人与人之间的重要桥梁,广泛应用于在线教育、远程会议、娱乐直播等多个领域。随着技术的不断进步,人们对于直播的实时性、稳定性和高质量需求日益增加。为了实现高效的视频直播,选择合适的工具和协议至关重要。 RTMP(Real-Time Messagi…

LVS集群中的负载均衡技术

目录 一、LVS技术原理 二、NAT模式原理及部署方法 1、工作原理 2、部署方法 1、网络配置 2、软件安装与启用 3、测试 三、DR模式原理及部署方法 1、工作原理 2、部署方法 1、网络配置 2、解决vip响应问题 3、测试 四、ipvsadm命令及参数 1、管理集群服务&#x…

MySQL增删改查(基础)

1、. 新增&#xff08;Create&#xff09; 语法&#xff1a; INSERT [INTO] table_name[(column [, column] ...)] VALUES (value_list) [, (value_list)] ... 例子&#xff1a; -- 创建一张学生表 DROP TABLE IF EXISTS student; CREATE TABLE student (id INT,sn INT com…

DC-DC控制器芯片内部如何实现PWM控制?

大家好,这里是大话硬件。 在前面文章中,结合UC3842芯片内部框图,陆续实现了芯片的振荡器功能,参考电压功能,过欠压保护功能。今天这篇文章对PWM控制功能进行仿真。 根据框图,器件内部主要是误差放大器和高速比较器。 实现思路如下:模拟一个输出电压,纹波变化频率和…

较新版本Cesium使用本地源码编译打包

0 写作背景 较新版本的Cesium&#xff08;1.100版本及以后&#xff09;在代码结构上做了一定的调整&#xff0c;打包方式也随之发生了一些变化。 Starting with version 1.100, CesiumJS will be published alongside two smaller packages cesium/engine and cesium/widgets …

stm32—GPIO

0. 引入 在单片机产品中,我们常常可以见到三种模块:LCD灯、KEY按键、BEEP蜂鸣器 LED灯: 一个比较常见的LED电路LED0 ---------- 通过控制LED0引脚(电线) 给它一个低电平(低电压),LED灯就会亮 给它一个高电平(高电压),LED灯就会灭 …

【数据结构】—— 栈

一、栈的基本概念1、栈的定义2、栈的常见基本操作 二、栈的顺序存储1、栈的顺序存储结构2、顺序栈存储实现&#xff08;1&#xff09;初始化&#xff08;2&#xff09;判空&#xff08;3&#xff09;进栈&#xff08;4&#xff09;出栈&#xff08;5&#xff09;取栈顶元素&…

使用 CSS 打印样式为 Web 页面设置专业的打印机效果

对于有打印需求的网页&#xff0c;特别是文章的详情页&#xff0c;需要设置专门的打印样式来适配页面。CSS 打印样式允许你为网页设置专门用于打印的样式。文本就是专门介绍如何使用 CSS 打印样式为 Web 页面设置专业的打印机效果。 media print 通过使用 media print 媒体查…

算法打卡 Day19(二叉树)-平衡二叉树 + 二叉树的所有路径 + 左叶子之和 + 完全二叉树的节点个数

Leetcode 101-平衡二叉树 文章目录 Leetcode 101-平衡二叉树题目描述解题思路 Leetcode 257-二叉树的所有路径题目描述解题思路 Leetcode 404-左叶子之和题目描述解题思路 Leetcode 222-完全二叉树的节点个数题目描述解题思路 题目描述 https://leetcode.cn/problems/balanced…

Chainlit快速实现AI对话应用将聊天数据的持久化到postgres关系数据库中

概述 默认情况下&#xff0c;Chainlit 应用不会保留其生成的聊天和元素。即网页一刷新&#xff0c;所有的聊天记录&#xff0c;页面上的所有聊天记录都会消失。但是&#xff0c;存储和利用这些数据的能力可能是您的项目或组织的重要组成部分。 之前写过一篇文章《Chainlit快速…

实现高亮的全文分页检索

文章目录 &#x1f31e; Sun Frame&#xff1a;SpringBoot 的轻量级开发框架&#xff08;个人开源项目推荐&#xff09;&#x1f31f; 亮点功能&#x1f4e6; spring cloud模块概览常用工具 &#x1f517; 更多信息1.sun-club-infra 模块SubjectEsServiceImpl.java1.querySubje…

大数据-74 Kafka 高级特性 稳定性 - 控制器、可靠性 副本复制、失效副本、副本滞后 多图一篇详解

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【Linux】Linux环境基础开发工具使用之软件包管理(yum)与 Linux编辑器(vim)

目录 一、Linux 软件包管理器 yum1.1 什么是软件包1.2 关于 rzsz1.3 查看软件包1.4 如何安装软件1.5 如何卸载软件1.6 如何更新软件包1.7 yum源更新 二、 Linux编辑器-vim使用2.1 vim的基本概念2.2 vim的基本操作2.3 vim命令模式命令集2.3.1 从命令模式切换为插入模式2.3.2 从插…

03创建型设计模式——抽象工厂模式

一、抽象工厂模式简介 抽象工厂模式是所有形态的工厂模式中最为抽象和具有一般性的。抽象工厂模式可以向客户端提供一个接口&#xff0c;使得客户端在不必指定产品的具体类型的情况下&#xff0c;能够创建多个产品族的产品对象。例如现实生活中&#xff0c;水果的种类繁多&…