跳到主要内容

Prometheus Exporter 与指标设计

Exporter 将主机、数据库、中间件或第三方 API 的状态转换为 Prometheus 文本格式,并在 HTTP /metrics 暴露。Prometheus 负责抓取,Exporter 不应承担复杂的聚合、告警或长期存储职责。

1. 工作原理与数据格式​

目标系统 --> Exporter --> /metrics --> Prometheus scrape --> TSDB

Exporter 通常调用系统接口、数据库只读查询或中间件管理 API,并输出 Counter、Gauge、Histogram 等样本。Exporter 账号应只拥有读取监控所需的最小权限,指标端口只对 Prometheus 或受信网络开放。

# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 42.17

2. Node Exporter​

Node Exporter 采集 Linux 主机 CPU、内存、文件系统、磁盘、网络和内核指标。通过 systemd 或容器部署时,端口默认是 9100,应限制 Prometheus 访问来源。

维度常用指标关注点
CPUnode_cpu_seconds_total使用 rate() 计算忙碌比例,区分 idle、iowait、system
内存node_memory_MemAvailable_bytes优先使用可用内存,不把 page cache 直接视作故障
磁盘node_filesystem_avail_bytes排除 tmpfs,按挂载点检查空间与 inode
磁盘 I/Onode_disk_*IOPS、吞吐、队列与延迟需结合设备类型分析
网络node_network_*接收/发送速率、错误、丢包与网卡状态
# 节点 CPU 使用率
100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100

# 根分区使用率
100 * (1 - node_filesystem_avail_bytes{mountpoint="/",fstype!~"tmpfs|overlay"}
/ node_filesystem_size_bytes{mountpoint="/",fstype!~"tmpfs|overlay"})

3. 常用 Exporter​

Exporter典型监控目标最小权限与注意事项
mysqld_exporter连接、慢查询、复制、InnoDB使用专用只读监控账号,避免暴露 SQL 文本
redis_exporter内存、命中率、复制、连接使用 ACL 最小权限,保护 Redis 密码
kafka_exporter / JMX ExporterBroker、Topic、Consumer Lag控制 Topic/Consumer 标签基数,保护 JMX 端口
blackbox_exporterHTTP、TCP、ICMP、DNS 探测仅探测授权目标,设置模块超时与出口网络策略
kube-state-metricsKubernetes 对象状态区分对象期望状态与真实资源使用量

Exporter 版本、采集器开关和指标名称会变化。上线前先在 /metrics 核对实际指标和标签,再编写 Dashboard 与规则。

4. 自定义应用指标​

应用应直接使用官方客户端库暴露业务指标,而不是频繁轮询日志或数据库。优先实现 RED 指标:请求速率、错误、延迟;再补充队列、缓存、依赖调用和业务成功量。

checkout_requests_total{method="POST",code="200"}
checkout_request_duration_seconds_bucket{le="0.3"}
checkout_payment_failures_total{provider="bank-a"}

设计原则:

  • Counter 使用 _total,时长使用 _seconds,容量使用 _bytes。
  • 标签仅表达有限业务维度,不记录用户、订单、请求或动态错误文本。
  • Histogram 桶围绕 SLO 阈值设置,并在发布前压测样本量。
  • 指标变化视为 API 变更,记录负责人、兼容期和 Dashboard/规则影响。

相关查询见 PromQL,不同对象的监控组合见 监控体系。