2. Exporter 基础回顾:Prometheus Exporter 的工作原理与常见类型
在构建数据采集异常自愈剧本之前,必须深入理解 Exporter 的本质。Exporter 是 Prometheus 生态中负责“数据采集与转换”的代理组件,它将被监控系统的内部指标暴露为 Prometheus 能够抓取的 HTTP 端点。本章将系统梳理 Exporter 的工作原理、核心生命周期以及生产环境中最常见的 Exporter 类型。
2.1 Prometheus Exporter 的工作原理
Exporter 的核心职责是“适配与转换”。它通过特定协议与目标系统通信,获取原始状态数据,然后按照 Prometheus 的指标格式(Metric Format)进行重组,最后通过 HTTP 服务端等待 Prometheus Server 的拉取请求。
下图展示了 Exporter 在 Prometheus 架构中的位置及其内部数据流:
/metrics 端点,等待 Prometheus Server 按配置的时间间隔来拉取。这种“拉取模型”是 Prometheus 架构的核心特征。
2.2 Exporter 的指标生命周期
每个 Exporter 暴露的指标都遵循 Prometheus 的四种核心指标类型。理解这些类型对于后续编写自愈剧本中的异常检测条件至关重要。
| 指标类型 | 描述 | 典型示例 | 自愈场景关注点 |
|---|---|---|---|
| Counter | 只增不减的累计计数器 | node_network_receive_bytes_total |
速率突降或归零(采集中断) |
| Gauge | 可增可减的瞬时值 | node_memory_MemAvailable_bytes |
数值突变、缺失或超出阈值 |
| Histogram | 分桶统计的分布数据 | http_request_duration_seconds_bucket |
桶数据不更新或累积异常 |
| Summary | 分位数统计 | http_request_duration_seconds_summary |
分位数计算停滞 |
2.3 常见 Exporter 类型与适用场景
生产环境中,Exporter 的种类繁多,覆盖从操作系统到中间件、从硬件到云服务的各个层面。以下是运维场景中最核心的几种 Exporter:
2.3.1 Node Exporter(主机级监控)
Node Exporter 是部署最广泛的 Exporter,用于采集 Linux/Unix 主机的操作系统级指标,包括 CPU、内存、磁盘、网络、文件系统、进程等。它通过读取 /proc、/sys 等虚拟文件系统获取数据。
- 默认端口: 9100
- 核心指标:
node_cpu_seconds_total、node_memory_MemTotal_bytes、node_disk_io_time_seconds_total - 自愈关注点: 进程挂掉、端口不可达、指标数据陈旧、文件系统句柄泄漏
2.3.2 Blackbox Exporter(网络探测)
Blackbox Exporter 通过主动探测(Probe)的方式检查目标服务的可达性和响应质量,支持 HTTP、HTTPS、TCP、ICMP、DNS 等协议。它不直接采集内部指标,而是从外部视角评估服务状态。
- 默认端口: 9115
- 核心指标:
probe_success、probe_duration_seconds、probe_http_status_code - 自愈关注点: 探测超时、状态码异常、证书过期、DNS 解析失败
2.3.3 其他常用 Exporter
| Exporter 名称 | 监控目标 | 默认端口 | 典型指标示例 |
|---|---|---|---|
| cAdvisor | 容器(Docker / Kubernetes) | 8080 | container_cpu_usage_seconds_total |
| MySQL Exporter | MySQL / MariaDB 数据库 | 9104 | mysql_global_status_threads_connected |
| Nginx Exporter | Nginx 反向代理 | 9113 | nginx_connections_active |
| Redis Exporter | Redis 缓存 | 9121 | redis_memory_used_bytes |
| JMX Exporter | Java 应用(JVM) | 自定义 | jvm_memory_bytes_used |
2.4 Exporter 的部署模式与高可用考量
Exporter 的部署方式直接影响数据采集的稳定性。在生产环境中,通常采用以下两种模式:
- Sidecar 模式: 在 Kubernetes Pod 中与主容器共享网络命名空间,Exporter 作为辅助容器运行,采集主容器的应用指标。
- 独立进程模式: 在物理机或虚拟机中作为系统服务运行,通过 systemd 或 supervisor 管理,采集主机级或中间件指标。
2.5 Exporter 数据采集异常分类
在进入自愈剧本设计之前,需要明确 Exporter 数据采集异常的常见类型。这些异常是后续剧本触发条件的核心依据。
| 异常类型 | 表现 | 可能原因 | 检测方式 |
|---|---|---|---|
| 进程异常 | Exporter 进程退出或僵死 | OOM、配置错误、依赖库缺失 | systemd 状态、进程列表 |
| 端口不可达 | Prometheus 抓取超时或连接拒绝 | 端口被占用、防火墙规则、Exporter 未启动 | TCP 端口探测 |
| 指标数据陈旧 | 指标时间戳长时间未更新 | Exporter 内部采集循环阻塞、目标系统无响应 | PromQL 时间戳差值检测 |
| 指标格式错误 | HTTP 返回非 200 或内容解析失败 | Exporter 版本不兼容、指标注册冲突 | HTTP 状态码 + 内容校验 |
| 资源耗尽 | Exporter 自身 CPU/内存飙升 | 采集目标过多、内存泄漏、高并发抓取 | Exporter 自身资源监控 |