Prometheus的Exporter的数据采集机制

news/2025/10/11 14:33:59/文章来源:https://www.cnblogs.com/leehang/p/19134981

Prometheus的Exporter采集器通过一套精巧的架构实现数据采集与暴露,而其个性化定制能力则得益于开放的客户端库和灵活的设计模式。下面我们深入解析其工作原理和定制方法。

🔄 Exporter的数据采集机制

理解Exporter如何工作,可以从其核心职责和流程来看。

  1. 数据采集
    Exporter首先需要从被监控目标获取原始数据,采集方式多样:

    • 系统接口调用:如node_exporter通过读取Linux的/proc文件系统获取CPU、内存等信息。
    • 远程服务连接:如mysql_exporter通过连接到MySQL数据库实例,执行SHOW STATUS等SQL查询来获取性能指标。
    • 网络协议探测:如blackbox_exporter通过HTTP、TCP、ICMP等协议主动探测服务的可用性和响应时间。
    • 日志文件解析:部分Exporter通过监听和解析应用程序生成的日志文件来提取关键事件或指标。
  2. 数据标准化
    采集到的原始数据(可能是数字、状态码或文本)需要被转换为Prometheus能够识别的标准格式。这个格式主要包含:

    • 指标名称:描述指标的含义,如http_requests_total
    • 标签:体现指标的维度,如method="GET"endpoint="/api/users",用于细分和过滤数据。
    • 指标值:具体的数值,通常是浮点数。
    • 时间戳:通常由Prometheus Server在拉取时自动附加。
      此外,还会包含# HELP# TYPE等注释行,说明指标的帮助信息和类型。
  3. 数据暴露
    Exporter会启动一个内嵌的HTTP服务器,默认端口常见为9100。它会在/metrics这个HTTP路径下,以纯文本形式暴露所有已标准化的监控数据。你可以直接使用curl命令查看这些数据。

  4. 数据拉取
    Prometheus Server基于Pull(拉取)模型工作。它根据配置文件(prometheus.yml)中定义的作业和目标列表,定期(如每分钟)向各个Exporter的/metrics端点发起HTTP请求,抓取数据并存储到其时间序列数据库中。

下面的表格清晰地对比了Exporter在Prometheus体系中的不同角色:

类型 工作方式 典型示例
直接型 Exporter 监控目标自身直接提供Prometheus格式的指标接口,无需额外部署采集代理。 cAdvisor(容器监控)、Kubernetes API Server。
间接型 Exporter 作为一个独立的代理程序运行,负责从不能直接暴露Prometheus格式的目标系统中采集并转换指标。 node_exporter(主机监控)、mysql_exporter(数据库监控)。

🛠️ 个性化定制指标采集器

当社区提供的Exporter无法满足你的特定监控需求时(例如监控业务逻辑或内部状态),你可以创建自定义的Exporter。

核心概念与技术架构

在深入编码前,了解Prometheus客户端库(以Go语言为例)中的几个核心概念非常有益:

  • 采集器:这是你自定义的数据采集逻辑的实现者。任何实现了Collect()方法的类型都可以成为一个Collector。在该方法内,你执行具体的采集动作,并将结果设置到对应的指标中。
  • 指标:代表一个具体的监控项。Prometheus支持四种核心指标类型:
    • Counter:只增不减的计数器,适用于请求次数、错误数量等。
    • Gauge:可增可减的仪表盘,适用于内存使用量、活跃连接数等当前状态值。
    • Histogram:直方图,用于观察值的分布情况(如请求延迟),并自动计算分位数。
    • Summary:摘要,与直方图类似,但在客户端计算分位数。
  • 注册表:相当于一个Collector的注册中心。你创建的Custom Collector需要向Registry注册,这样当Prometheus拉取数据时,Registry才会调用你的Collector去采集数据。
  • 汇集器:负责调用所有已注册的Collector的Collect方法,将收集到的指标进行汇总、校验、去重,并最终转换为Prometheus所需的格式。通常我们使用默认的Gatherer,但在复杂场景下可以设计多Gatherer架构以实现隔离和扩展性。

其工作流程可以概括为:Collector生成样本 → 写入Gatherer的通道 → Gatherer汇总处理 → 通过HTTP服务的 /metrics 端点暴露给Prometheus Server

定制开发实践

不同语言有相应的Prometheus客户端库,这里以最常用的Go语言Python语言为例,展示一个极简的入门步骤。

1. 使用Go语言客户端库

Go语言是Prometheus生态的原生语言,其客户端库功能完备。

package mainimport ("net/http""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp"
)// 1. 定义你的自定义指标
var (customRequestsTotal = prometheus.NewCounterVec(prometheus.CounterOpts{Name: "my_app_requests_total",Help: "The total number of processed requests.",},[]string{"method", "status_code"}, // 标签维度)
)// 2. 初始化时注册指标
func init() {prometheus.MustRegister(customRequestsTotal)
}func main() {// 3. 模拟业务逻辑:在某个处理函数中增加指标值// http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {//     customRequestsTotal.WithLabelValues(r.Method, "200").Inc()// })// 4. 暴露指标端点http.Handle("/metrics", promhttp.Handler())http.ListenAndServe(":8080", nil)
}

citation:1]

2. 使用Python语言客户端库

Python客户端库同样简单易用,适合快速原型开发。

from prometheus_client import Counter, start_http_server
import time# 1. 定义自定义指标
REQUEST_COUNTER = Counter('my_app_requests_total', 'The total number of processed requests', ['method', 'status_code'])# 2. 模拟在业务逻辑中增加指标
if __name__ == '__main__':# 启动HTTP服务,暴露指标start_http_server(8000)while True:# 模拟请求处理REQUEST_COUNTER.labels(method='GET', status_code='200').inc()time.sleep(5)

citation:7]

运行上述Python脚本后,访问http://localhost:8000/metrics就能看到自定义的指标。

💡 关键设计要点与最佳实践

在个性化定制过程中,遵循以下原则可以让你事半功倍:

  • 指标命名规范:采用<应用名>_<指标类型>_<单位>或类似清晰的命名结构,如api_http_request_duration_seconds
  • 标签设计审慎:标签提供了强大的维度切割能力,但滥用(高基数问题,例如使用用户ID作为标签)会严重拖慢Prometheus性能。
  • 采集逻辑轻量:确保Exporter的数据采集操作本身是高效、低开销的,避免对被监控应用造成性能影响。
  • 利用现有模式:对于简单脚本或一次性任务,可以考虑使用Pushgateway来推送指标,而不是运行一个常驻的Exporter。对于已有JSON格式的接口,也可以使用像json_exporter这样的通用工具来避免编码。

💎 总结

Exporter作为Prometheus监控体系的“适配器”,通过采集、转换、暴露三步将各异构系统的指标统一化。而其强大的可定制性,使得开发者能够利用官方客户端库,以相对标准化的模式(如Go的Collector接口或Python的装饰器)轻松扩展监控边界,覆盖从基础设施到上层业务的方方面面。

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

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

相关文章

2025 年珠三角 / 中山 / 东莞 / 佛山厂房出售公司推荐:中创集团产业生态型厂房的价值与服务解析

在广东省 “坚持实体经济为本、制造业当家” 的发展导向下,《广东省加快扩大工业有效投资实施方案(2025—2027 年)》明确提出要打造高水平产业承载平台,聚焦新材料、生物医药、先进制造等新赛道培育主导产业。当前…

CTFshow-web方向(更新中)

萌新杯 intval与preg_match绕过方法: 进制绕过二进制或者八进制或者十六进制等等 双重取反~~绕过有时候需要编码需要绕过的字符$a=~("system"); echo urlencode($a);换行\n绕过 编码绕过SQL查询中,如果我们…

拷贝和上传文件,涉及隐私协议

如果使用拷贝和复制粘贴功能,以及使用从微信上传文件的功能,需要在weixin后台完善隐私协议。wx.setClipboardData({duration: 2000,title: 成功,data: name,icon: success,}); 拷贝 错误提示: setClipboardData:fai…

2025储罐厂家,钢衬塑储罐,钢塑复合储罐,化工储罐,防腐储罐,PE储罐,盐酸储罐,硫酸储罐,聚丙烯储罐,不锈钢储罐,次氯酸钠储罐各类型最新推荐榜:品质卓越与技术创新的行业先锋!

随着工业技术的不断进步,储罐作为化工、石油、食品等众多行业不可或缺的关键设备,其品质和性能直接影响着企业的生产效率和安全。为了帮助筛选储罐品牌,特此发布权威推荐榜单,为采购决策提供专业参考价值。一、储罐…

2025 年国内标志牌生产厂家最新推荐排行榜:聚焦优质企业助力客户精准选择道路/限速/公路/施工/警示/限高/三角/安全标志牌厂家推荐

在当前道路安全设施行业快速发展的背景下,标志牌作为保障道路通行安全与效率的关键设施,其市场需求持续增长。然而,市面上标志牌生产厂家数量繁杂,产品质量、生产能力、服务水平差异显著,部分厂家存在材质不达标、…

在Scala中,如何在泛型类中使用类型参数?

在Scala中,泛型类的类型参数使用方括号 [] 声明,语法和使用方式与Java类似但更灵活。以下是Scala泛型类中使用类型参数的详细示例: // 1. 基本泛型类定义 class Box[T](val content: T) {// 可以直接使用类型参数T作…

Maple 2025 来了!AI 赋能 + 6000 + 命令,破解数学计算、科研与教学痛点

做科研时,复杂的逆拉普拉斯变换算到崩溃?教数学时,手动批改作业效率低还难出同类题?写代码时,数学模型转 Python/C 要反复调试?别愁了 —— 数学软件领域的革新之作Maple 2025已上线,从核心引擎到用户体验全面升…

2025 护眼灯生产厂家最新推荐榜:精选五强资深与新锐品牌,深度解析品质口碑与选购指南

国人日均用眼时长已突破 8 小时,护眼灯市场需求年均增长 18.7%,但行业乱象愈发凸显:国家市场监督管理总局抽查显示 23% 样品存在蓝光超标、频闪等问题,虚假宣传更是屡见不鲜。传统品牌与新锐势力并存的市场中,消费…

2025 年护眼吸顶灯最新推荐榜:权威筛选五强品牌,技术与口碑双维度深度剖析

随着居家用眼场景日益多元,护眼吸顶灯成为家庭照明刚需,但市场乱象却持续困扰消费者。部分品牌以 “护眼” 为噱头,实际产品蓝光危害超标、频闪严重,既不符合 RG0 无危害标准,也未达到 Ra90 以上显色指数要求,长…

2025 护眼台灯厂家最新推荐榜单:权威解析明可达等五强品牌,护眼参数与选购指南全攻略

随着电子设备深度融入生活,国人日均用眼时长已突破 8 小时,护眼台灯市场需求年均增长 18.7%,但行业乱象随之凸显。国家市场监督管理总局抽查显示,23% 的样品存在蓝光超标、频闪等问题,虚假宣传更是屡见不鲜。传统…

超高密度2kW GaN基低压电机驱动器的设计 - 实践

超高密度2kW GaN基低压电机驱动器的设计 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名AI代理框架需求洞察

本文通过分析某知名AI代理框架的官方文档和用户反馈,深入探讨了该框架的核心功能、应用场景以及用户在使用过程中提出的改进需求,揭示了在AI技术快速发展的背景下,理解用户真实需求的重要性。a.内容描述核心功能定位…

02:基础数据类型

> 本篇用 sizeof 实测整型、浮点、字符、字符串在内存中的真实尺寸,理解符号位、补码、溢出、类型转换以及可移植性整型的正确打开方式。一、整型家族全景图关键字 典型字节 位数 取值范围(有符号) 格式符char 1…

UPage 正式开源!

UPage 是一款基于大模型的可视化网页构建平台,支持通过自然语言描述快速生成定制化网页。该平台兼容多种 AI 提供商,包括 OpenAI、Anthropic Claude、Google Gemini 和 DeepSeek 等,并提供了简洁的可视化编辑器,支…

2025 年无线耳机源头厂家最新推荐榜单:覆盖头戴式 / 电竞 / 平价 / 电脑 / 游戏多品类且聚焦全产业链与精益制造的权威名录

随着无线耳机市场需求持续攀升,产品品类日益丰富,但消费者选购时却面临诸多难题。部分厂家无自主生产能力,依赖外部供应链致质量不稳定、交付无保障;不少品牌研发投入不足,产品同质化严重,在专业 HiFi、游戏低延…

2025 年最新蓝牙耳机源头厂家口碑推荐榜:含琉璃 X 热销 64 万台企业及各类型高性价比品牌优选运动/真无线/头戴式/骨传导/游戏蓝牙耳机厂家推荐

随着蓝牙技术的飞速发展,蓝牙耳机已成为人们日常通勤、运动健身、办公学习的必备设备,然而当前市场却呈现出 “乱花渐欲迷人眼” 的态势。一方面,大量新兴品牌涌入,产品质量参差不齐,部分产品存在音质失真、连接不…

接口测试全流程实战:从工具到架构的深度解析

本文将全面解析接口测试的全流程,从基础工具使用到高级架构设计,帮助测试工程师构建完整的接口测试知识体系。在微服务架构主导的时代,接口测试作为软件测试的关键环节,其重要性不言而喻。据统计,现代应用中超过7…

Node.js 负载均衡:构建高可用服务

在当今高并发的互联网环境中,单台服务器往往难以应对大量用户请求。负载均衡技术通过将请求分发到多个服务器。 什么是负载均衡? 负载均衡是一种将网络流量或应用请求智能地分发到多个服务器的技术。它通过避免单点故…

C# Send and receive big file via stream

//sender; class FileSender {private readonly HttpClient _httpClient;public FileSender(){_httpClient = new HttpClient{Timeout = TimeSpan.FromHours(2) // 2小时超时};}public async Task<bool> SendFil…

深入解析:Ubuntu 22.04 安装 Nacos 记录

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …