ezra-sullivan
发布于 2025-06-23 / 7 阅读
0
0

03 - Prometheus Exporter 简介

更新时间:2025 年 6 月

常用的 exporter 列表:Exporters and integrations | Prometheus

简介

在 Prometheus 的监控体系中,Exporter 是一种独立的程序或服务。充当了 Prometheus 与第三方目标系统(本身不直接暴露 Prometheus 格式指标的系统)之间的桥梁

Exporter 可以采集第三方系统的数据,将数据转换为符合 Prometheus 的指标格式,并为 Prometheus 提供标准的 /metrics HTTP 接口。


核心概念

目的

扩展 Prometheus 的监控范围,使其能够收集来自各种来源(数据库、硬件、消息队列、存储系统、云服务、甚至操作系统本身等)的指标

工作模式

Exporters 通常作为一个独立的进程(守护进程)运行在需要被监控的目标主机或容器中,工作步骤如下

  • 主动查询目标系统(通过其原生 API、CLI 工具、协议或读取日志文件等)
  • 将查询到的原始监控数据(如状态、性能计数器)转换、聚合、标准化为 Prometheus 理解的文本格式
  • 公开一个 HTTP 端点(通常是 /metrics),在该端点上发布转换后的指标数据
  • Prometheus Server 定期(根据配置的抓取间隔)向这个 HTTP 端点发起 HTTP GET 请求(即 Pull),拉取最新的指标数据

指标格式

转换后发布的数据是纯文本格式,遵循 Prometheus 的文本格式规范。基本结构包括:

  • # HELP: 指标的描述信息
  • # TYPE: 指标的类型 (counter, gauge, histogram, summary, untyped)
  • <metric name>{<label name>=<label value>, ...} <metric value>: 指标数据行,包含指标名、标签(键值对用于维度划分)、数值(浮点数或整数

核心作用

Prometheus 的设计理念是直接抓取目标服务的指标端点,但现实环境中绝大多数系统无法提供原生支持 Prometheus 的数据格式。Exporters 的核心作用正是解决这一问题:

  • 协议转换器
    将非 Prometheus 原生协议的数据(如:JMX, SNMP, MySQL SHOW STATUS, Private API 等)转换为标准的 Prometheus 文本格式
  • 监控边界扩展器
    使 Prometheus 能监控传统 IT 基础设施(硬件、网络设备)、云平台服务(AWS/Azure/GCP)、中间件(数据库、消息队列)等原本不可直连的目标
  • 数据标准化引擎
    对原始监控数据进行清洗、加工、添加统一标签(如 instance, job),输出符合 Prometheus 数据模型的指标
  • 统一接入层
    为所有异构系统提供一致的 /metrics HTTP 接口,极大简化 Prometheus 的抓取配置与管理复杂度

类型

官方/社区维护

Prometheus 社区维护了一个庞大且活跃的 Exporters 和集成列表,覆盖了流行的软件和系统,质量较高。常见例子:

  • 数据库相关

    • mysqld_exporter
    • ``postgres_exporter`
    • mongodb_exporter
    • redis_exporter
    • elasticsearch_exporter
  • 消息队列

    • kafka_exporter
    • rabbitmq_exporter
  • Web 服务器/代理

    • nginx_exporter
    • ``haproxy_exporter`
  • 硬件/系统

    • node_exporter (监控主机硬件和操作系统指标 - 最常用)
    • ipmi_exporter (监控硬件传感器/IPMI)
    • snmp_exporter (通用 SNMP 设备监控)
  • 存储

    • ceph_exporter, gluster_exporter
  • 云平台

    • cloudwatch_exporter (AWS CloudWatch)
  • 其他中间件:

    • jmx_exporter (监控任何暴露 JMX 的 Java 应用)

    • blackbox_exporter (主动探测 HTTP, HTTPS, DNS, TCP, ICMP 等服务的可用性和性能 - 非常有用)

自定义

  • 当没有现成的 Exporter 满足需求时,可以自己编写。例如:为自己的内部微服务、业务应用或专有设备编写 Exporter
  • 使用 Prometheus 官方提供的客户端库(支持 Go, Java/JVM, Python, Ruby, .Net 等)可以非常方便地创建自定义指标并暴露 /metrics 端点

使用方式

部署 Exporter

  • 在需要监控的目标主机或容器中下载、安装并运行相应的 Exporter。通常有预编译的二进制文件和 Docker 镜像可用
  • 配置 Exporter(如果需要),例如指定目标数据库的连接信息、认证凭据、监听端口等(通常通过命令行参数或配置文件)

配置 Prometheus

  • 在 Prometheus 的配置文件 prometheus.yml 中,添加一个新的抓取作业 (scrape_configs)
  • 指定该作业的
    • job_name: 给这个抓取任务起个有意义的名字(如 node_exporter
    • static_configs.targets: 运行 Exporter 的主机名/IP 地址和端口列表(如:['host1:9100', 'host2:9100'])信息。如果 Exporter 运行在容器内,需确保网络可达
    • 可选的 metrics_path: 如果 Exporter 的端点不是默认的 /metrics,需要指定
    • 可选的 scheme (http/https)
    • 可选的标签 (labels): 可以添加额外的标签到从这个作业抓取的所有指标上(如 environment="production", role="webserver"

重启/重载 Prometheus

重启/重载 Prometheus 让配置生效

验证

  • 直接在浏览器访问 http://<exporter_host>:<exporter_port>/metrics 查看是否输出指标
  • 在 Prometheus Web UI 的 Status -> Targets 页面检查该抓取作业的状态是否为 UP
  • 在 Prometheus Web UI 的 Graph 页面尝试查询该 Exporter 暴露的指标

特点与注意事项

  • 拉取模型: Exporters 遵循 Prometheus 的拉取(Pull)模型。被动等待 Prometheus 来抓取数据
  • 资源消耗: Exporters 本身会消耗一定的 CPU 和内存资源,因为它们需要定期查询目标系统。需要监控 Exporter 自身的资源使用情况
  • 安全性:
    • 保护 Exporter 的端点(特别是暴露在互联网上时)。考虑使用防火墙规则、认证(基本认证、Bearer Token)或 TLS 加密
    • 如果 Exporter 需要访问敏感信息(如数据库密码),确保其配置文件和运行环境的安全
  • 版本兼容性: Exporter 的版本可能与其监控的目标系统版本有兼容性要求,需要注意匹配
  • 指标质量: 不同 Exporter 暴露的指标数量和质量可能差异很大。需要仔细阅读其文档,了解哪些指标可用及其含义
  • Pushgateway 的特殊性: pushgateway 可以看成是一个允许推送指标(Push)的 Exporter,但它主要用于短暂的、无法被抓取的作业(如 cron job),不要把其作为长期存储指标的地方,使用不当可能导致指标陈旧等问题

评论