当前位置: 首页 > article >正文

@Pushgateway 数据自动清理

文章目录

  • Pushgateway 数据自动清理
    • 一、Pushgateway 数据清理的必要性
    • 二、自动清理方案
      • 方案1:使用带TTL功能的Pushgateway分支版本
      • 方案2:使用Shell脚本定期清理
      • 方案3:结合Prometheus记录规则自动清理
    • 三、最佳实践建议
    • 四、验证与维护
    • 五、示例
    • 1. 基于时间的自动清理
      • 1.1 使用 Pushgateway 的 API 定期清理
      • 1.2 使用 Pushgateway 的 `--persistence.file` 和 `--persistence.interval` 参数
    • 2. 基于任务的自动清理
      • 2.1 任务完成后自动清理
      • 2.2 使用 Kubernetes Finalizers (如果运行在 K8s 中)
    • 3. 高级自动清理方案
      • 3.1 使用 Pushgateway 的 Admin API (需要启用)
      • 3.2 使用 Prometheus 记录规则标记过期数据
    • 4. 示例最佳实践建议

Pushgateway 数据自动清理

Pushgateway 作为 Prometheus 生态中的一个重要组件,主要用于临时和批处理作业的指标推送。然而,Pushgateway 默认不会自动清理过期指标数据,这可能导致指标堆积、内存占用过高甚至服务崩溃。以下是 Pushgateway 数据自动清理的完整解决方案。

一、Pushgateway 数据清理的必要性

Pushgateway 设计上不会自动删除推送给它的任何指标数据,这带来几个主要问题:

  1. 指标数据会无限期保留,即使相关作业已终止
  2. 随着时间推移,Pushgateway 内存占用会不断增长,可能导致服务崩溃
  3. Prometheus 会持续拉取这些过期数据,影响监控准确性

二、自动清理方案

方案1:使用带TTL功能的Pushgateway分支版本

一个社区维护的Pushgateway分支版本支持TTL(Time-To-Live)功能:

docker run -d -p 9091:9091 dmathai/prom-pushgateway-ttl:latest --metric.timetolive=60s

参数说明:

  • --metric.timetolive:设置指标的存活时间(如60s),超过此时间的指标会自动删除

优点:实现简单,无需额外维护
缺点:非官方版本,可能存在兼容性问题

方案2:使用Shell脚本定期清理

以下脚本可删除超过指定时间(如60秒)未更新的指标:

#!/bin/bash
baseurl=localhost:9091
for uri in $(curl -sS $baseurl/api/v1/metrics | jq -r '.data[].push_time_seconds.metrics[0] |select((now - (.value | tonumber)) > 60) |(.labels as $labels | ["job", "instance"] | map(.+"/"+$labels[.]) | join("/"))
'); docurl -XDELETE $baseurl/metrics/$uri
done

部署步骤

  1. 确保系统已安装jqcurl工具
  2. 将脚本保存为/opt/scripts/pushgateway_clean.sh
  3. 添加执行权限:chmod +x /opt/scripts/pushgateway_clean.sh
  4. 设置crontab定期执行(如每分钟):
*/1 * * * * /bin/bash /opt/scripts/pushgateway_clean.sh >/dev/null 2>&1

注意事项

  • 脚本假设所有Group都包含jobinstance标签
  • 如果Group包含其他标签,需要修改脚本中的标签列表
  • Group Labels有特定顺序,顺序不正确会导致删除失败

方案3:结合Prometheus记录规则自动清理

  1. 首先在Prometheus中创建记录规则,识别过期指标:
# prometheus.yml 中添加
rule_files:- 'pushgateway_rules.yml'
# pushgateway_rules.yml 内容
groups:
- name: pushgateway_cleanuprules:- record: pushgateway:stale_metricsexpr: time() - push_time_seconds > 60
  1. 使用Prometheus API查询过期指标并删除:
#!/bin/bash
STALE_METRICS=$(curl -s 'http://prometheus:9090/api/v1/query?query=pushgateway:stale_metrics' | jq -r '.data.result[].metric.job')for JOB in $STALE_METRICS; docurl -X DELETE "http://pushgateway:9091/metrics/job/$JOB"
done

三、最佳实践建议

  1. 合理设置指标生命周期

    • 短周期作业:设置较短的TTL(如5-10分钟)
    • 长周期作业:设置与作业周期匹配的TTL
  2. 标签设计规范

    • 确保每个作业有唯一的job名称
    • 包含有意义的instance标签
    • 避免使用易变的标签值
  3. 监控Pushgateway自身

    • 监控pushgateway_http_requests_total了解API调用情况
    • 监控pushgateway_metrics_count了解指标数量变化
  4. 持久化配置
    如果需要保留某些关键指标,可以启用持久化:

    docker run -d -p 9091:9091 -v /data:/data prom/pushgateway --persistence.file=/data/pushgateway.data
    

四、验证与维护

  1. 验证自动清理效果

    • 定期检查pushgateway_metrics_count指标
    • 通过Pushgateway Web界面(默认9091端口)查看当前指标
  2. 日志监控

    • 监控清理脚本的执行日志
    • 设置告警规则,当清理失败时通知
  3. 定期审查

    • 每季度审查TTL设置是否仍符合业务需求
    • 根据业务变化调整清理策略

通过实施以上SOP,可以有效管理Pushgateway中的指标数据,避免因数据堆积导致的问题,同时确保监控系统的稳定运行。

五、示例

1. 基于时间的自动清理

1.1 使用 Pushgateway 的 API 定期清理

#!/bin/bash
# cleanup_old_metrics.shPUSHGATEWAY="http://pushgateway.address:9091"
RETENTION_HOURS=24  # 保留24小时内的数据# 获取当前时间戳
CURRENT_TS=$(date +%s)# 获取所有指标组
METRIC_GROUPS=$(curl -s "${PUSHGATEWAY}/api/v1/metrics" | jq -r '.data[].pushTimeUnixSeconds')# 遍历并清理过期数据
for group in $METRIC_GROUPS; doPUSH_TIME=$(echo $group | jq -r '.pushTimeUnixSeconds')AGE_HOURS=$(( (CURRENT_TS - PUSH_TIME) / 3600 ))if [ $AGE_HOURS -gt $RETENTION_HOURS ]; thenJOB_NAME=$(echo $group | jq -r '.labels.job')INSTANCE=$(echo $group | jq -r '.labels.instance')echo "Deleting ${JOB_NAME}/${INSTANCE} (age: ${AGE_HOURS}h)"curl -X DELETE "${PUSHGATEWAY}/metrics/job/${JOB_NAME}/instance/${INSTANCE}"fi
done

设置定时任务

# 每天凌晨1点执行清理
0 1 * * * /path/to/cleanup_old_metrics.sh

1.2 使用 Pushgateway 的 --persistence.file--persistence.interval 参数

启动 Pushgateway 时添加:

./pushgateway \--persistence.file=/tmp/pushgateway \--persistence.interval=5m \--web.enable-admin-api

这样 Pushgateway 会定期将内存中的数据持久化到文件,并在启动时恢复。

2. 基于任务的自动清理

2.1 任务完成后自动清理

#!/bin/bash
# job_script.shJOB_NAME="my_batch_job"
INSTANCE=$(hostname)
PUSHGATEWAY="http://pushgateway.address:9091"# 注册退出时清理的钩子
function cleanup {echo "Cleaning up Pushgateway metrics..."curl -X DELETE "${PUSHGATEWAY}/metrics/job/${JOB_NAME}/instance/${INSTANCE}"
}
trap cleanup EXIT# 推送指标
echo "job_status{state=\"running\"} 1" | curl --data-binary @- "${PUSHGATEWAY}/metrics/job/${JOB_NAME}/instance/${INSTANCE}"# 执行实际任务
your_actual_task_here# 更新最终状态
echo "job_status{state=\"finished\"} 1" | curl --data-binary @- "${PUSHGATEWAY}/metrics/job/${JOB_NAME}/instance/${INSTANCE}"

2.2 使用 Kubernetes Finalizers (如果运行在 K8s 中)

apiVersion: batch/v1
kind: Job
metadata:name: example-job
spec:template:spec:containers:- name: mainimage: your-imagecommand: ["/bin/sh", "-c"]args:- |# 推送指标echo "job_running 1" | curl --data-binary @- http://pushgateway/metrics/job/example-job/instance/${HOSTNAME}# 执行任务your-task-here# 退出前清理curl -X DELETE http://pushgateway/metrics/job/example-job/instance/${HOSTNAME}restartPolicy: Never

3. 高级自动清理方案

3.1 使用 Pushgateway 的 Admin API (需要启用)

启动 Pushgateway 时添加 --web.enable-admin-api 参数,然后可以使用:

# 清理所有指标
curl -X PUT "${PUSHGATEWAY}/api/v1/admin/wipe"

3.2 使用 Prometheus 记录规则标记过期数据

在 Prometheus 配置中添加记录规则:

rule_files:- 'pushgateway_rules.yml'

pushgateway_rules.yml 内容:

groups:
- name: pushgateway_cleanuprules:- record: pushgateway_metric_expiredexpr: |time() - pushgateway_metric_push_time > 86400  # 24小时过期unless ON(job, instance) pushgateway_metric_value

然后可以基于此规则触发清理操作

4. 示例最佳实践建议

  1. 分层清理策略

    • 短期任务:任务完成后立即清理
    • 中期监控:设置24小时保留期
    • 长期数据:考虑直接写入Prometheus或其他TSDB
  2. 监控清理过程

    # 监控Pushgateway指标组数量
    curl -s "${PUSHGATEWAY}/metrics" | grep 'pushgateway_metrics_entries'
    
  3. 避免清理风暴

    • 大规模清理时添加延迟
    • 考虑分批清理
  4. 日志记录

    • 记录所有清理操作
    • 监控清理失败情况

通过以上方案,可以实现Pushgateway数据的自动化生命周期管理,避免无用数据积累。

相关文章:

@Pushgateway 数据自动清理

文章目录 Pushgateway 数据自动清理一、Pushgateway 数据清理的必要性二、自动清理方案方案1:使用带TTL功能的Pushgateway分支版本方案2:使用Shell脚本定期清理方案3:结合Prometheus记录规则自动清理 三、最佳实践建议四、验证与维护五、示例…...

粽叶飘香时 山水有相逢

粽叶飘香时 山水有相逢 尊敬的广大客户们: 五月初五,艾叶幽香。值此端午佳节,衡益科技全体同仁向您致以最诚挚的祝福! 这一年我们如同协同竞渡的龙舟,在数字化转型的浪潮中默契配合。每一次技术对接、每轮方案优化&a…...

YC-8002型综合变配电监控自动化系统

一 .系统概述 YC-8002型综合变配电监控自动化系统是西安亚川电力科技有限公司为适应广大客户要求,总结多项低 压配电网络自动化工程实例的经验,基于先进的电子技术、计算机和网络通讯等技术自主研发的--套结合本公司网络配电产品的应用于低压配电领域的…...

react diff 算法

diff 算法作为 Virtual DOM 的加速器,其算法的改进优化是 React 整个界面渲染的基础和性能的保障,同时也是 React 源码中最神秘的,最不可思议的部分 diff 算法会帮助我们就算出 VirtualDOM 中真正变化的部分,并只针对该部分进行原…...

近期手上的一个基于Function Grap(类AWS的Lambda)小项目的改造引发的思考

函数式Function是云计算里最近几年流行起来的新的架构和模式,因为它不依赖云主机,非常轻量,按需使用,甚至是免费使用,特别适合哪种数据同步,数据转发,本身不需要保存数据的业务场景,…...

Obsidian 社区插件下载修复

Obsidian 社区插件下载修复 因为某些原因,在国内经常无法下载 Obsidian 的社区插件。这个项目的主要目的就是修复这种情况,让国内的用户也可以无障碍的下载社区插件。 上手指南 下载 obsidian-proxy-github.zip解压 obsidian-proxy-github.zip将解压的…...

VSCode的下载与安装(2025亲测有效)

目录 0 前言1 下载2 安装3 后记 0 前言 丫的,谁懂啊,尝试了各种办法不行的话,我就不得不拿出我的最后绝招了,卸载,重新安装,我经常要重新安装,所以自己写了一个博客,给自己&#xf…...

千库/六图素材下载工具

—————【下 载 地 址】——————— 【​本章下载一】:https://pan.xunlei.com/s/VORW9TbxC9Lmz8gCynFrgdBzA1?pwdxiut# 【​本章下载二】:https://pan.quark.cn/s/829e2a4085d3 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/…...

Ansible模块——Ansible的安装!

Ansible 安装 Ansible 有三种安装方式,源码安装、发行版安装和 Python 安装。 使用发行版安装或 Python 安装两种方式时,Ansible 的安装包有两个,区别如下: • ansible-core:一种极简语言和运行时包,包含…...

差分S参数-信号与电源完整性分析

差分S参数: 由于差分互连中使用差分信号传递信息,接收器最关心的是差分信号的质量,如果互连通道的S参数能直接反映出对差分信号的影响,对分析问题将方便得多。差分互连通道可以看成是一个四端口网络,激励源为单端信号,…...

​扣子Coze飞书多维表插件-查询数据

search_record - 查询数据 请求参数 apptoken - 多维表的唯一标识服 可选参数: automatic_fields - 控制是否返回自动计算的字段, true 表示返回。 field_names - 字段名称,用于指定本次查询返回记录中包含的字段。 示例值:["字段1&…...

计算机模拟生物/化学反应有哪些软件?

以下是用于计算机模拟生物/化学反应的软件分类总结,涵盖量子化学、分子动力学、化学信息学及新兴混合方法等方向,结合其核心功能和应用场景进行整理: ⚛️ 一、量子化学计算软件 ChemiQ(本源量子) 类型:量子…...

PostIn V1.1.2版本发布,新增接口评审功能,提升接口质量与合理性

PostIn是一款国产开源免费的接口管理工具,包含项目管理、接口调试、接口文档设计、接口数据MOCK等模块,支持常见的HTTP协议、websocket协议。本周PostIn V1.1.0版本发布,新增接口评审、接口统计功能。 1、版本更新日志 新增 ➢ 接口评审&a…...

MySQL数据归档利器:pt-archiver原理剖析与实战指南

MySQL数据归档利器:pt-archiver原理剖析与实战指南 在MySQL数据库管理中,数据归档是一个永恒的话题——随着业务数据的不断增长,如何高效、安全地将历史数据从生产表迁移到归档表或文件,同时不影响在线业务,是每个DBA和开发者都需要面对的挑战。Percona Toolkit中的pt-ar…...

【论文阅读】User Diverse Preference Modeling by Multimodal Attentive Metric Learning

User Diverse Preference Modeling by Multimodal Attentive Metric Learning 题目翻译:基于多模态注意度量学习的用户不同偏好建模 摘要 提出一个**多模态注意力度量学习(MAML, Multimodal Attentive Metric Learning)**方法,…...

Catch That Cow POJ - 3278

农夫约翰得知了一头逃亡奶牛的位置,想要立即抓住她。他起始于数轴上的点N(0 ≤ N ≤ 100,000),而奶牛位于同一条数轴上的点K(0 ≤ K ≤ 100,000)。农夫约翰有两种移动方式:步行和传送。 * 步行…...

【计算机网络】传输层TCP协议——协议段格式、三次握手四次挥手、超时重传、滑动窗口、流量控制、

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:计算机网络 🌹往期回顾🌹: 【计算机网络】传输层UDP协议 🔖流水不争,争的是滔滔不息 一、TCP协议 UDP&…...

文件服务端加密—minio配置https

1.安装openssl 建议双击安装包默认安装,安装完成之后配置环境变量 如下图则配置成功: 二、生成自签名CA证书及私钥 1、生成私钥 openssl genrsa -out private.key 20482、生成自签名证书 (1)编写openssl.conf文件,…...

界面开发框架DevExpress XAF实践:集成.NET Aspire后如何实现自定义遥测?

DevExpress XAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。DevExpress XAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 .NET As…...

多卡训练核心技术详解

多卡训练核心技术详解 多卡训练 主要围绕分布式环境初始化、模型并行化、数据分片和梯度同步展开。下面结合您的代码,详细解释这些核心部分: 并行执行命令 torchrun --nproc_per_node=5 TokenLossMulCard.py 1. 分布式环境初始化 def init_distributed():init_process_…...

深度学习全面掌握指南

一、引言 深度学习是机器学习的一个分支,它通过构建多层神经网络来模拟人类大脑的信息处理方式,从而实现对复杂数据的自动特征提取和模式识别。近年来,深度学习在计算机视觉、自然语言处理、语音识别等领域取得了巨大的突破,引发…...

magic-api配置Git插件教程

一、配置gitee.com 1,生成rsa密钥,在你的电脑右键使用管理员身份运行(命令提示符),执行下面命令 ssh-keygen -t rsa -b 2048 -m PEM一直按回车键,不需要输入内容 找到 你电脑中的~/.ssh/id_rsa.pub 文件…...

算法打卡第11天

36.有效的括号 (力扣20题) 示例 1: **输入:**s “()” **输出:**true 示例 2: **输入:**s “()[]{}” **输出:**true 示例 3: **输入:**s “(]”…...

【决策分析】基于Excel的多变量敏感性分析解决方案

在Excel中实现多变量敏感性分析(3个及以上变量)需要结合更灵活的工具和方法,因为Excel内置的数据表功能仅支持最多双变量分析。以下是针对多变量场景的解决方案,按复杂度和实用性排序: 方法1:场景管理器 摘…...

php:5.6-apache Docker镜像中安装 gd mysqli 库 【亲测可用】

Dockerfile 代码如下: FROM php:5.6-apache# 使用Debian归档源 RUN echo "deb http://archive.debian.org/debian stretch main contrib non-free" > /etc/apt/sources.list && \echo "deb http://archive.debian.org/debian-security s…...

小程序跳转H5或者其他小程序

1. h5跳转小程序有两种情况 &#xff08;1&#xff09;从普通浏览器打开的h5页面跳转小程序使用wx-open-launch-weapp可以实现h5跳转小程序 <wx-open-launch-weappstyle"display:block;"v-elseid"launch-btn":username"wechatYsAppid":path…...

【AI赋能,视界升级】智微智能S134 AI OPS,重构智慧大屏未来

智慧教室中&#xff0c;教师通过电子白板&#xff0c;4K高清课件、3D教学模型同步呈现&#xff0c;后排学生也能看清画面细节&#xff0c;课堂变得趣味十足&#xff1b;智能会议室里&#xff0c;会议内容、多人云会议多屏投放依旧畅通清晰&#xff0c;会议纪要自动生成Word/PPT…...

外网访问可视化工具 Grafana (Linux版本)

Grafana 是一款强大的可视化监控指标的展示工具&#xff0c;可以将不同的数据源数据以图形化的方式展示&#xff0c;不仅通用而且非常美观。它支持多种数据源&#xff0c;如 prometheus 等&#xff0c;也可以通过插件和 API 进行扩展以满足各种需求。 本文将详细介绍如何在本地…...

ass字幕嵌入mp4带偏移

# 格式转化文件&#xff0c;包含多种文件的互相转化&#xff0c;主要与视频相关 from pathlib import Path import subprocess import random import os import reclass Utils(object):staticmethoddef get_decimal_part(x: float) -> float:s format(x, .15f) # 格式化为…...

WPF响应式UI的基础:INotifyPropertyChanged

INotifyPropertyChanged 1 实现基础接口2 CallerMemberName优化3 数据更新触发策略4 高级应用技巧4.1 表达式树优化4.2 性能优化模式4.3 跨平台兼容实现 5 常见错误排查 在WPF的MVVM架构中&#xff0c; INotifyPropertyChanged是实现数据驱动界面的核心机制。本章将深入解析属…...