【云原生】Prometheus Pushgateway使用详解

news2024/9/22 21:29:44

目录

一、前言

二、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: true
    scrape_interval: 10s
    static_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: 10s
     metrics_path: '/metrics'
     static_configs:
       - targets: ["服务IP:9093"]           

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

4.4.2 配置告警规则文件

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

- name: pushgateway
  rules: 
  - alert: DataFileNum
    expr: data_file_num > 5
    for: 0m
    labels:
      severity: critical
    annotations: 
      summary: '数据目录文件数量过多了'
      description: "数据目录文件数量过多了,超过5个了,当前数量:{{ $value }}"

4.4.3 重启或重新加载服务

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

4.4.4 效果验证

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

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

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

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

五、写在文末

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[C#]基于C# winform结合llamasharp部署llama3中文的gguf模型

【llmasharp源码】 https://github.com/SciSharp/LLamaSharp 【测试模型】 https://www.modelscope.cn/pooka74/LLaMA3-8B-Chat-Chinese-GGUF.git 【测试通过环境】 vs2019 netframework4.7.2 llamasharp0.15.0 cuda11.7.1cudnn8.8.0 注意测试发现使用cpu推理非常卡&a…

Stable Diffusion绘画 | ControlNet应用-SoftEdge(软边缘):让转绘更柔和

SoftEdge(软边缘) Canny(硬边缘) 有时候捕捉的细节过多&#xff0c;其实有时候并不需要那么多的细节。 例如下图中&#xff0c;围巾上的网格细节全部都被捕捉下来了&#xff1a; 切换到「SoftEdge(软边缘)」&#xff0c;它只重点抓取轮廓边缘&#xff0c;而且线条会比 Canny …

优购电商小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商品分类管理&#xff0c;商品信息管理&#xff0c;留言板管理&#xff0c;订单管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;商品信息&#xf…

入门 PyQt6 看过来(项目)26 在线购物-主页面

功能导航页面很简单&#xff0c;就几个按钮功能。效果如下图&#xff1a; 1 主界面 ​ 包含 “商品选购”、”下单结算“、”销售分析“四个按钮以及“功能导航”标题。 2 工程目录 首先先创建工程目录及子目录&#xff1a; ​ 3 代码 主窗口文件为Main.py&#xff0c;其…

第2章 C语言基础知识

第2章 C语言基础知识 1.printf()函数 在控制台输出数据&#xff0c;需要使用输出函数&#xff0c;C语言常用的输出函数为printf()。 printf()函数为格式化输出函数&#xff0c;其功能是按照用户指定的格式将数据输出到屏幕上。 printf(“格式控制字符串”,[输出列表]); 格式控…

C++ 124类和对象_运算符重载_赋值

C 124类和对象_运算符重载_赋值 学习内容 解决自定义对象之间赋值是因析构函数重复释放内存时引发的异常问题 结果 代码 #include<iostream> using namespace std;//cout 在这里&#xff0c;没有它会报错//类和对象_运算符重载_赋值 //学习内容 //解决自定义对…

【Qt】Qt窗口 | 菜单栏QMenuBar

文章目录 一. 菜单栏二. 代码创建&使用菜单栏1. 创建菜单栏2. 在菜单栏中添加菜单3. 创建菜单项4. 在菜单项之间添加分割线5. 添加快捷方式6. 菜单/菜单项添加图标7. 添加子菜单 三. 图形化创建菜单栏 窗口 Qt 中窗口是通过QMainWindow类实现的 QMainWindow 是一个为用户提…

React使用useRef ts 报错

最近在写自己的React项目&#xff0c;我在使用useRef钩子函数的时候发现 TS2322: Type MutableRefObject<HTMLDivElement | undefined> is not assignable to type LegacyRef<HTMLDivElement> | undefined Type MutableRefObject<HTMLDivElement | undefined&g…

代码随想录算法训练营第十五天(一)| 110.平衡二叉树 (优先掌握递归)257. 二叉树的所有路径

110.平衡二叉树 题目&#xff1a; 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,3,3,null,null,4,4] 输出&#xff1a;fa…

vuex的原理和使用方法

简介 Vuex 是 Vue.js 应用的状态管理模式&#xff0c;它为应用内的所有组件提供集中式的状态&#xff08;数据&#xff09;管理。可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。 Vuex的构成 state&#xff1a;state 是 Vuex 的数据中心&#xff0c;也就是说state是用来…

【生成式人工智能-十一一个不修改模型就能加速语言模型生成的方法】

一个加速语言模型生成的方法 现在语言模型的一个弊端speculative decoding预言家预测的问题 speculative decoding 模块的实现方法NAT Non-autoregressive模型压缩使用搜索引擎 一些更复杂些的speculative decoding 实现方式 speculative decoding 是一个适用于目前生成模型的加…

软件运维实施维保方案(Doc完整版原件)

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产…

NodeJS:查看、设置 nodejs 堆内存

一、查看nodejs 堆内存 vite.config.ts 从Node.js v10.0.0开始&#xff0c;v8模块被引入&#xff0c;允许你访问V8引擎的一些内部特性&#xff0c;包括堆内存统计信息。 import v8 from v8 // 可用内存总量 console.log(Total available heap size: ${v8.getHeapStatistics()…

2024年优秀的网站建设公司推荐

如今&#xff0c;高达 48% 的用户认为&#xff0c;判断企业信誉的首要因素是其网站设计。我整理了一份 2024 年全球顶级网站设计公司名单。 企业为什么要投资网站设计和开发&#xff1f; 数字平台或社交媒体在当前情况下取得了飞跃&#xff0c;帮助企业上以数字方式推广他们的…

【数据结构】顺序表——赋源码(结尾)

目录 1. 线性表 2. 顺序表 2.1 概念与结构 2.2 分类 2.2.1 静态顺序表 2.2.2 动态顺序表 2.3 动态顺序表的实现 正文 1. 线性表 线性表&#xff08; linear list &#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的数据结构&#x…

停止项目大小调整,开始搜索层自动缩放!

作者&#xff1a;来自 Elastic Matteo Piergiovanni&#xff0c;John Verwolf 我们新的 serverless 产品的一个关键方面是允许用户部署和使用 Elastic&#xff0c;而无需管理底层项目节点。为了实现这一点&#xff0c;我们开发了搜索层自动扩展&#xff0c;这是一种根据我们将在…

华为路由的AAA是什么?

1.AAA及用户管理概述 华为路由的AAA是Authentication(认证)、‌Authorization(授权)和Accounting(计费)的简称&#xff0c;‌是一种提供认证、‌授权和计费的安全管理机制。‌ AAA作为一种网络安全管理机制&#xff0c;‌主要提供以下功能和服务&#xff1a;‌ 认证&#xff…

Linux系统编程:线程 1

1.线程的概念 线程——轻量级的进程&#xff0c;线程是CPU执行的最小单位&#xff0c;进程是资源分配的基本单位&#xff0c;线程的创建和调度的时空开销都比进程小&#xff1b; 2.线程的组成 线程组成&#xff1a;线程pid&#xff0c;程序计数器&#xff0c;寄存器集合&…

pdf文件密码忘记,有办法可以打开pdf文件吗?

为确保PDF文件的重要信息不轻易外泄&#xff0c;我们一般会给pdf文件设置打开密码&#xff0c;确保pdf文件的隐私与安全&#xff0c;但随着时间的推移&#xff0c;让我们遗忘了原本设置的密码&#xff0c;这时我们该怎么办呢&#xff1f; 当大家遇到这种情况时&#xff0c;可能…

箱号/柜号是什么?各种单据处理有没有省力的办法?

集装箱编号&#xff0c;作为全球独一无二的标识符&#xff0c;其结构严谨且信息丰富。该编号由四部分构成&#xff1a;首先是三个字母组成的箱主代码&#xff0c;这代表了集装箱的拥有者&#xff0c;即船公司或租箱公司的专属标识&#xff1b;紧接着是固定字母“U”&#xff0c…