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

Prometheus 自定义指标监控:Python Exporter 编写与业务指标告警配置

前言Prometheus 监控系统指标CPU、内存、磁盘这件事很多人熟悉但不少开发者有个共同疑问业务特有的指标——比如队列积压数、订单待处理量、API 调用成功率——Prometheus 能监控吗答案是完全可以而且比你想象的简单。Prometheus 开放的指标暴露机制是核心。只要你的服务能提供符合规范的 /metrics 接口Prometheus 就能抓取、存储、设置告警。这篇文章就讲一件事如何用 Python 写一个 Exporter把自定义业务指标暴露出来让 Prometheus 统一采集和告警。从最简单的固定值到读取文件动态指标再到监控目录积压文件数量三个难度递进举例。1.配置自定义参数监控入门场景想监控一个自定义业务指标比如“当前系统中待处理的任务数量”1.1 下载必要工具建立一个专门为研究“自定义参数”的目录mkdir/ceshi验证是否有python我这里使用的是python3python3--versionpython3-cimport prometheus_client; print(OK)若是没有可以先执行这两条命令sudoyuminstallepel-release-ysudoyuminstallpython3-pip-y从Python官方软件仓库下载并安装prometheus_client这个第三方库pipinstallprometheus_client1.2 创建自定义Exporter编写一个暴露自定义指标的Web服务Exporter:vimy_app.py# -*- coding: utf-8 -*-from prometheus_clientimportstart_http_server, Gaugeimporttimepending_tasksGauge(app_pending_tasks,Number of pending tasks in the system)def update_metrics(): pending_tasks.set(42)if__name____main__:start_http_server(8001)# ← 改成 8001 或其他端口print(Metrics server running on http://localhost:8001/metrics)whileTrue: update_metrics()time.sleep(10)1.3 运行Exporter运行这个服务:python my_app.py访问 http://ip:8001/metrics你会看到# HELP app_pending_tasks Number of pending tasks in the system# TYPE app_pending_tasks gaugeapp_pending_tasks42.0这是prometheus可以识别到的格式1.4 配置prometheus找prometheus安装目录修改配置文件viprometheus.yml添加下面信息- job_name:my-appstatic_configs: - targets:[localhost:8001]保存退出后重启prometheus服务systemctl restart prometheus打开 Prometheus Web UI通常是 http://ip:9090搜索app_pending_tasks就能看到值 42并可做告警、绘图等操作。2.配置自定义参数监控进阶用Prometheus监控你主机上某个动态变化的自定义参数不是固定值当它超过阈值时通过Alertmanager发出告警。2.1 场景介绍场景示例监控“待处理任务数”动态变化假设你的业务系统会不断产生任务存放在 /tmp/pending_tasks.txt 文件中内容是一个数字如 42。这个数字每分钟可能变化。你希望当pending_tasks 50持续2分钟 → 触发告警整体架构[你的脚本]↓(暴露 /metrics)[Prometheus]← 抓取指标 ↓(评估规则)[Alertmanager]← 发送告警 ↓[你收到通知]2.2 创建自定义Exporter创建/tmp/pending_tasks.txt文件echo42/tmp/pending_tasks.txt创建文件task_exporter.py# -*- coding: utf-8 -*-from prometheus_clientimportstart_http_server, Gaugeimporttimeimportos# 定义指标pending_tasksGauge(app_pending_tasks,Number of pending tasks from /tmp/pending_tasks.txt)def read_pending_tasks():从文件读取当前待处理任务数 try: with open(/tmp/pending_tasks.txt,r)as f: valueint(f.read().strip())returnvalue except Exception as e: print(fError reading file: {e})return0# 文件不存在或格式错误时返回 0def update_metrics(): countread_pending_tasks()pending_tasks.set(count)print(fUpdated pending_tasks {count})if__name____main__:start_http_server(8002)print(Task Exporter running on :8002/metrics)whileTrue: update_metrics()time.sleep(15)# 每15秒更新一次2.3 运行Exporter执行命令python3 task_exporter.py验证指标# 先模拟数据echo60/tmp/pending_tasks.txt# 查看指标curlhttp://localhost:9100/metrics|grepapp_pending_tasks访问 http://ip:8002/metrics你会看到app_pending_tasks60.02.4 配置Prometheus抓取及告警编辑prometheus.yml- job_name:taskstatic_configs: - targets:[localhost:8002]创建告警文件vialert_rules.ymlgroups: - name: task_alerts rules: - alert: HighPendingTasks expr: app_pending_tasks50for: 2m# 持续 2 分钟超过 50 才触发labels: severity: warning annotations: summary:待处理任务过多description:当前待处理任务数为 {{$value}}超过阈值 50配置prometheus添加告警文件保存退出后重启prometheus服务systemctl restart prometheus打开 Prometheus Web UI通常是 http://ip:9090前面我们编辑的文件是60系统识别到比50大所以一直在告警3.配置自定义参数监控高级3.1 场景介绍监控指定目录下“积压文件数量”并告警你的系统有一个数据处理流程外部程序不断向 /data/incoming/ 目录写入新文件如 .json、.csv另一个消费者程序会读取并处理这些文件处理完后移动到 /data/archived/如果消费者挂了或变慢/data/incoming/ 中的文件会不断堆积。你希望实时监控 /data/incoming/ 目录下的待处理文件数量当 文件数 100持续5分钟 → 触发告警告警信息包含当前文件数和目录路径。这个指标的特点动态变化随业务实时增减非系统指标CPU/内存等无法反映此问题高业务价值直接反映数据处理是否健康可扩展可监控多个目录、按文件类型过滤等。3.2 创建自定义Exporter创建文件file_queue_exporter.py# -*- coding: utf-8 -*-# file_queue_exporter.pyfrom prometheus_clientimportstart_http_server, Gaugeimportosimporttimeimportglob# 自定义指标带标签directorypending_filesGauge(file_queue_pending_count,Number of pending files in a directory,[directory])# 要监控的目录列表可扩展WATCHED_DIRS[/data/incoming,/logs/upload_queue]def count_pending_files():fordir_pathinWATCHED_DIRS:ifnot os.path.exists(dir_path): count0else:# 只统计普通文件不含子目录files[fforfinglob.glob(os.path.join(dir_path,*))ifos.path.isfile(f)]countlen(files)pending_files.labels(directorydir_path).set(count)print(f[{time.strftime(%Y-%m-%d %H:%M:%S)}] {dir_path} → {count} files)if__name____main__:start_http_server(8003)print(File Queue Exporter running on :8003/metrics)whileTrue: count_pending_files()time.sleep(30)# 每30秒采集一次3.3 运行Exporter创建/data/incoming文件并启动脚本mkdir-p/data/incoming /logs/upload_queue python3 file_queue_exporter.py3.4 配置prometheus监控进入prometheus配置文件- job_name:filestatic_configs: - targets:[localhost:8003]3.5 配置alertmanager告警编写告警文件groups: - name: file-queue-alerts rules: - alert: HighFileQueuePending expr: file_queue_pending_count{directory/data/incoming}100for: 5m labels: severity: warning annotations: summary:待处理文件积压过多description:目录 {{$labels.directory }} 中有 {{$value| printf\%.0f\}} 个待处理文件超过阈值 100把告警规则加入到prometheus监控中如图所示加入指定位置重启prometheus服务systemctl restart prometheus systemctl status prometheus打开 Prometheus Web UI通常是 http://ip:9090可以看到告警规则了。3.6 模拟积压确保目标目录已创建ls/data/incoming生成 150 个测试文件使用Shell循环快速创建一批 .json 文件模拟数据流入foriin{1..150};dotouch/data/incoming/data_${i}.jsondone使用命令查看是否成功ls-l/data/incoming运行以下命令检查Prometheus指标是否已更新curlhttp://localhost:8003/metrics|grepfile_queue_pending_count打开 Prometheus Web UI通常是 http://ip:9090我们可以看到已经告警默认大于100就告警。那么我们整个过程就暂时结束啦过程还是很有趣的那么我现在有一个问题倘若我们想在家里监控公司的自定义参数我们如何监控到呢别急cpolar来解决你这个问题4.安装cpolar实现随时随地开发cpolar 可以将你本地电脑中的服务如 SSH、Web、数据库映射到公网。即使你在家里或外出时也可以通过公网地址连接回本地运行的开发环境。❤️以下是安装cpolar步骤使用一键脚本安装命令sudocurlhttps://get.cpolar.sh|sh安装完成后执行下方命令查看cpolar服务状态如图所示即为正常启动sudosystemctl status cpolarCpolar安装和成功启动服务后在浏览器上输入虚拟机主机IP加9200端口即:【http://192.168.42.101:9200】访问Cpolar管理界面使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可打开浏览器访问本地9200端口使用cpolar账户密码登录即可,登录后即可对隧道进行管理。5.配置公网地址本文使用8001端口测试。登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道隧道名称可自定义本例使用了:ceshi注意不要与已有的隧道名称重复协议http本地地址8001域名类型随机域名地区选择China Top点击创建创建成功后打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址接下来就可以在其他电脑或者移动端设备异地上使用地址访问。这回我们在prometheus配置文件下配置监控公网地址- job_name:my-appstatic_configs: - targets:[e0950bc.r2.cpolar.top]监控成功6.保留固定公网地址使用cpolar为其配置二级子域名该地址为固定地址不会随机变化。点击左侧的预留选择保留二级子域名地区选择china top然后设置一个二级子域名名称我这里演示使用的是ceshii大家可以自定义。填写备注信息点击保留。登录cpolar web UI管理界面点击左侧仪表盘的隧道管理——隧道列表找到所要配置的隧道prometheus点击右侧的编辑。修改隧道信息将保留成功的二级子域名配置到隧道中域名类型选择二级子域名Sub Domain填写保留成功的二级子域名地区: China Top点击更新更新完成后打开在线隧道列表此时可以看到随机的公网地址已经发生变化地址名称也变成了保留和固定的二级子域名名称。最后我们使用固定的公网地址在任意设备的浏览器中访问可以看到成功访问本地部署的页面这样一个永久不会变化的二级子域名公网网址即设置好了。这样我们就可以随时随地监控不用担心在家无法监控设备总结跑完这套你对 Prometheus 的认知应该上一个台阶——它不只是机器活着没的检查工具而是能回答业务是否正常运行的可观测性平台。CPU 飙高你知道了订单队列积压了也知道文件处理消费者挂了你也知道。自定义指标让监控真正贴合业务而不是泛泛的系统层面。Exporter 写法不限于 Python其他语言同理。告警规则根据实际业务调整阈值和持续时间这部分没有标准答案。

相关文章:

Prometheus 自定义指标监控:Python Exporter 编写与业务指标告警配置

前言 Prometheus 监控系统指标(CPU、内存、磁盘)这件事很多人熟悉,但不少开发者有个共同疑问:业务特有的指标——比如队列积压数、订单待处理量、API 调用成功率——Prometheus 能监控吗? 答案是:完全可以…...

告别空转!用RT-Thread PM组件给你的IoT设备省电:从投票机制到外设管理的完整指南

告别空转!用RT-Thread PM组件给你的IoT设备省电:从投票机制到外设管理的完整指南 在电池供电的物联网设备开发中,功耗优化往往成为决定产品成败的关键因素。想象一下,一个部署在偏远地区的环境监测节点,如果因为功耗问…...

Linux桌面便签工具终极指南:Sticky如何重新定义你的信息管理方式

Linux桌面便签工具终极指南:Sticky如何重新定义你的信息管理方式 【免费下载链接】sticky A sticky notes app for the linux desktop 项目地址: https://gitcode.com/gh_mirrors/stic/sticky 你是否曾在忙碌的工作中突然闪现一个灵感,却因为切换…...

STM32F103C8T6驱动5V LCD1602,开漏输出+上拉电阻的硬件连接与代码避坑指南

STM32F103C8T6驱动5V LCD1602的硬件设计与代码实战指南 当3.3V的STM32遇到5V供电的LCD1602模块时,电平不匹配问题常常让初学者头疼不已。本文将深入解析开漏输出配合上拉电阻的解决方案,通过硬件原理分析、示波器实测对比和完整代码示例,带你…...

Codex客户端Mac低版本安装解决方法

Codex客户端Mac低版本安装解决方法 关键词:Codex客户端安装、Mac系统版本过低、无法安装Codex、Mac兼容性问题解决、Codex客户端下载、Mac软件安装失败 在实际开发环境里,很多工具对 macOS 版本都有最低要求限制。最近在本地尝试安装 Codex 客户端时&am…...

windows系统安装wsl安装opencode教程

使用 AI 助手(OpenCode)在 WSL2 中高效安全工作教程 背景 在 AI 极大发展的现在,AI 可以帮助我们完成很多工作。那么怎么让 AI 帮我们高效、安全地工作呢?以下是教程。 同时,大模型在 Windows 里面直接执行脚本时错…...

揭秘网易NeoX引擎:用unnpk工具深度探索游戏资源宝库

揭秘网易NeoX引擎:用unnpk工具深度探索游戏资源宝库 【免费下载链接】unnpk 解包网易游戏NeoX引擎NPK文件,如阴阳师、魔法禁书目录。 项目地址: https://gitcode.com/gh_mirrors/un/unnpk 你是否曾好奇《阴阳师》、《魔法禁书目录》等网易热门游戏…...

一站式解决方案:3步实现Mac微信聊天记录的永久备份与专业管理

一站式解决方案:3步实现Mac微信聊天记录的永久备份与专业管理 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 在数字时代,微信聊天记录承载着珍贵…...

【Unity 2D实战】巧用Cinemachine Confiner:告别穿帮镜头,实现精准地图边界限制

1. 为什么需要地图边界限制? 在2D游戏开发中,摄像机跟随角色移动是最基础的功能之一。但很多新手开发者都会遇到一个尴尬的问题:当角色走到地图边缘时,摄像机依然会继续移动,导致玩家看到地图之外的空白区域或者未设计…...

图解人工智能(7)图灵-人工智能之父

图灵对人工智能这门学科做出了哪些贡献?这些贡献对于人工智能这门科学有什么重要意义?图灵提出图灵机模型,为人工智能准备了工具; 提出智能机器设想,奠定了人工智能的思想基础;提出图灵测试,为评估人工智能…...

ExplorerPatcher:彻底改造你的Windows界面体验,打造个性化高效工作环境

ExplorerPatcher:彻底改造你的Windows界面体验,打造个性化高效工作环境 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher …...

【PTA实战】矩阵乘法:从输入格式到核心算法的完整解析

1. 矩阵乘法在PTA平台的核心挑战 第一次在PTA平台做矩阵乘法题时,我被那个"格式卡顿"坑得差点怀疑人生。明明算法逻辑完全正确,提交后却总是提示"格式错误",这种经历相信很多同学都遇到过。矩阵乘法作为线性代数的基础运…...

重温DIRE:走向通用人工智能生成的图像检测

1.摘要生成模型的快速发展提高了图像质量,并使图像合成广泛可用,引起了对内容可信度的关注。为了解决这个问题,我们提出了一种称为通用重建残差分析(UR2EA)的方法来检测合成图像。我们的研究表明,当通过预训练的扩散模型重建GAN和…...

收藏!小白程序员快速入门大模型:多模态LLMs学习指南

多模态大模型(MLLMs)通过整合图像、文本、语音等,实现跨模态理解和生成。文章介绍了MLLMs的基本概念、架构,包括多模态编码器、连接器与LLM,并区分了双编码器架构和基于LLM的架构。同时,文章探讨了VLM前沿动…...

别再只点保存了!QGIS工程文件.QGZ和.QGS到底怎么选?附XML结构详解

QGIS工程文件格式深度解析:.QGZ与.QGS的选择策略与XML实战指南 当你在QGIS中完成一幅精心设计的地图,点击保存按钮时,系统弹出的格式选择对话框可能让你陷入短暂的犹豫——该选择.QGZ还是.QGS?这个看似简单的选择背后,…...

35岁程序员的AI转型之路:年薪翻倍,收藏这份从零到架构师的详细指南

本文分享了作者作为35岁Java程序员的AI转型经历,从初期的焦虑与迷茫,到通过学习ChatGPT、Prompt Engineering和大模型技术,最终成功转型为AI架构师的故事。文章详细描述了学习路径、关键决策、遇到的坑以及成功因素,并给其他程序员…...

服务器运维与DevOps融合:迈向智能化运维的新纪元

在数字化浪潮席卷全球的今天,企业对IT基础设施的依赖程度日益加深,服务器运维作为支撑业务连续性和系统稳定性的核心环节,正面临前所未有的挑战与机遇。传统运维模式依赖人工干预、响应滞后、效率低下,已难以满足现代业务快速迭代…...

用Qt快速搭建一个局域网文件传输工具:QTcpServer/QTcpSocket完整项目实战

用Qt快速搭建一个局域网文件传输工具:QTcpServer/QTcpSocket完整项目实战 在数字化办公场景中,局域网文件传输是高频刚需。想象这样的场景:会议室里需要快速共享设计稿,实验室多台设备要同步采集数据,或者家庭网络中手…...

告别头像上传模糊!用Cropper.js打造完美头像裁剪上传功能(附完整前后端代码)

从零构建高精度头像裁剪系统:Cropper.js全栈实战指南 每次上传头像时,你是否遇到过这样的尴尬——精心选择的图片上传后变得模糊不清,或者被强制拉伸变形?这种糟糕的用户体验在社交平台、企业系统中尤为常见。本文将带你从零构建…...

DICOM文件里除了图像,还藏了哪些信息?一份给开发者的隐私与元数据解析指南

DICOM文件里除了图像,还藏了哪些信息?一份给开发者的隐私与元数据解析指南 医疗影像数据是AI模型训练和医疗信息系统开发的重要基础,但许多开发者往往只关注图像像素本身,忽略了DICOM文件中蕴含的丰富元数据。这些元数据不仅包含关…...

实战解析:用高斯过程回归搞定不确定性预测

1. 高斯过程回归能解决什么问题 我第一次接触高斯过程回归是在一个金融风控项目里。当时我们需要预测未来三个月的用户违约概率,但传统机器学习模型只能给出一个冰冷的数字预测,完全无法体现预测的可信程度。这就像天气预报只告诉你"明天会下雨&quo…...

41_《智能体微服务架构企业级实战教程》智能助手主应用服务之创建FastMCP客户端

前言 配套视频教程: 在 Bilibili课堂、CSDN课程、51CTO学堂 同步发售,提供:源码+部署脚本+文档。 bilibili课堂视频教程:智能体微服务架构企业级实战教程_哔哩哔哩_bilibili CSDN课程视频教程:智能体微服务架构企业级实战教程_在线视频教程-CSDN程序员研修院 51CTO学堂…...

艾尔登法环黑夜君临修改器2026.5.11最新中文汉化版免费下载 转存后自动更新 (看到请立即转存 资源随时失效)

在《艾尔登法环》的庞大世界观下,一款名为《艾尔登法环:黑夜君临》(ELDEN RING NIGHTREIGN)的衍生作品于 2025 年正式登场。它并非单纯的续作或大型 DLC,而是一款基于原作设定、专注于多人协作生存与浓缩化 RPG 体验的…...

40_《智能体微服务架构企业级实战教程》智能助手主应用服务之工具类封装

前言 配套视频教程: 在 Bilibili课堂、CSDN课程、51CTO学堂 同步发售,提供:源码+部署脚本+文档。 bilibili课堂视频教程:智能体微服务架构企业级实战教程_哔哩哔哩_bilibili CSDN课程视频教程:智能体微服务架构企业级实战教程_在线视频教程-CSDN程序员研修院 51CTO学堂…...

WindowsCleaner终极指南:3步彻底解决Windows系统卡顿与C盘爆红问题

WindowsCleaner终极指南:3步彻底解决Windows系统卡顿与C盘爆红问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否曾经面对Windows系统日益缓慢…...

戴尔G15终极散热解决方案:TCC-G15完整使用指南

戴尔G15终极散热解决方案:TCC-G15完整使用指南 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 还在为戴尔G15笔记本的高温问题而烦恼吗&#xff1f…...

Docker Desktop 磁盘空间占用过大?手把手教你彻底瘦身

前言 很多使用 Docker Desktop for Windows 的同学都会遇到一个头疼的问题:明明没有拉取多少镜像,Docker 却占用了几十甚至上百 GB 的磁盘空间。更让人困惑的是,执行了 docker system prune 清理命令后,磁盘空间完全没有变化&…...

AC鸭的迷宫按钮

题目描述AC鸭来到一个迷宫里,迷宫有 n 行 m 列。迷宫中有五种字符:A 表示 AC鸭一开始的位置。B 表示出口的位置。. 表示可以经过的空地。# 表示一开始不能经过的墙。K 表示按钮。AC鸭每一步可以向上、下、左、右四个方向移动一格,不能走出迷宫…...

终极歌词获取方案:163MusicLyrics让你轻松获取网易云和QQ音乐LRC歌词

终极歌词获取方案:163MusicLyrics让你轻松获取网易云和QQ音乐LRC歌词 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为寻找准确歌词而烦恼吗&#xff1f…...

Tabletop Simulator备份神器:3分钟学会永久保存你的桌游资产

Tabletop Simulator备份神器:3分钟学会永久保存你的桌游资产 【免费下载链接】tts-backup Backup Tabletop Simulator saves and assets into comprehensive Zip files. 项目地址: https://gitcode.com/gh_mirrors/tt/tts-backup 还在担心辛苦创建的Tabletop…...