【云原生】Prometheus Pushgateway使用详解

目录

一、前言

二、Pushgateway概述

[2.1 什么是Pushgateway](#2.1 什么是Pushgateway)

[2.1.1 Pushgateway在Prometheus中的位置](#2.1.1 Pushgateway在Prometheus中的位置)

[2.2 为什么需要Pushgateway](#2.2 为什么需要Pushgateway)

[2.3 Pushgateway作用](#2.3 Pushgateway作用)

[2.4 Pushgateway 工作原理](#2.4 Pushgateway 工作原理)

[2.5 Pushgateway 使用场景](#2.5 Pushgateway 使用场景)

[2.6 Pushgateway 优缺点](#2.6 Pushgateway 优缺点)

[三、Pushgateway 部署](#三、Pushgateway 部署)

[3.1 二进制安装](#3.1 二进制安装)

[3.1.1 下载安装包](#3.1.1 下载安装包)

[3.1.2 解压安装包](#3.1.2 解压安装包)

[3.1.3 启动服务](#3.1.3 启动服务)

[3.1.4 访问控制台](#3.1.4 访问控制台)

[3.2 docker安装](#3.2 docker安装)

四、集成Prometheus与操作实践

[4.1 Prometheus集成Pushgateway过程](#4.1 Prometheus集成Pushgateway过程)

[4.1.1 修改Prometheus配置文件](#4.1.1 修改Prometheus配置文件)

[4.1.2 重新加载Prometheus服务](#4.1.2 重新加载Prometheus服务)

[4.1.3 访问Prometheus控制台](#4.1.3 访问Prometheus控制台)

[4.2 Pushgateway 监控数据操作使用](#4.2 Pushgateway 监控数据操作使用)

[4.2.1 使用curl命令推送监控数据](#4.2.1 使用curl命令推送监控数据)

[4.2.2 删除监控的数据](#4.2.2 删除监控的数据)

[4.2.3 使用curl命令推送多条数据](#4.2.3 使用curl命令推送多条数据)

[4.2.4 删除某个实例组下的所有数据](#4.2.4 删除某个实例组下的所有数据)

[4.3 Pushgateway 监控Linux目录文件数量变化](#4.3 Pushgateway 监控Linux目录文件数量变化)

[4.3.1 设置待监控的文件目录](#4.3.1 设置待监控的文件目录)

[4.3.2 编写shell脚本](#4.3.2 编写shell脚本)

[4.3.3 执行一次shell推送指标数据](#4.3.3 执行一次shell推送指标数据)

[4.3.4 将shell脚本配置到定时任务中](#4.3.4 将shell脚本配置到定时任务中)

[4.3.5 效果验证](#4.3.5 效果验证)

[4.4 设置通知告警](#4.4 设置通知告警)

[4.4.1 打开Alertmanager相关配置](#4.4.1 打开Alertmanager相关配置)

[4.4.2 配置告警规则文件](#4.4.2 配置告警规则文件)

[4.4.3 重启或重新加载服务](#4.4.3 重启或重新加载服务)

[4.4.4 效果验证](#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下载

bash 复制代码
wget https://github.com/prometheus/pushgateway/releases/download/v1.9.0/pushgateway-1.9.0.linux-amd64.tar.gz

3.1.2 解压安装包

使用下面的命令进行解压

bash 复制代码
tar -zxvf pushgateway-1.9.0.linux-amd64.tar.gz

3.1.3 启动服务

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

bash 复制代码
./pushgateway

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

bash 复制代码
nohup ./pushgateway >nohup.out 2>& 1 & 

3.1.4 访问控制台

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

3.2 docker安装

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

bash 复制代码
docker run -d -p 9091:9091 --name pushgateway prom/pushgateway

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

四、集成Prometheus与操作实践

4.1 Prometheus集成Pushgateway过程

4.1.1 修改Prometheus配置文件

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

bash 复制代码
- 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"} 添加单条数据,使用下面的命令操作:

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

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

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

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

bash 复制代码
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 删除监控的数据

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

bash 复制代码
curl -X DELETE http://Pushgateway服务IP:9091/metrics/job/some_job

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

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

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

bash 复制代码
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下的所有数据

bash 复制代码
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脚本

脚本内容如下:

bash 复制代码
#!/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的定时任务中,使用下面的命令,打开全局的定时任务配置文件:

bash 复制代码
crontab -e

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

bash 复制代码
*/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的配置信息打开(如果没有配置的话自行配置进去)

bash 复制代码
#全局配置
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 配置告警规则文件

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

bash 复制代码
- 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如何结合真实的场景进行使用,希望对看到到同学有用,本篇到此结束,感谢观看。

相关推荐
神奇的海马体1 年前
Prometheus-PushGateway自定义监控项
prometheus·pushgateway