目录
一、前言
二、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如何结合真实的场景进行使用,希望对看到到同学有用,本篇到此结束,感谢观看。