前言
在微服务和云原生架构盛行的今天,系统监控已成为保障业务稳定性的生命线。作为CNCF毕业的顶级监控项目,Prometheus凭借其强大的时序数据库、灵活的查询语言和开放的生态系统,已成为监控领域的标杆工具。本文将带您从零开始,系统学习Prometheus监控体系,并通过实战开发自定义Exporter,构建完整的业务指标监控系统。
一、Prometheus监控体系详解
1.1 核心架构解析
Prometheus采用独特的Pull(拉取)模式架构,主要由以下核心组件构成:
- Prometheus Server:负责定时从目标抓取指标数据,包含存储引擎和查询引擎
- Exporter:指标暴露器,将各类系统的监控数据转换为Prometheus可识别的格式
- Pushgateway:用于支持短期任务或批处理作业的指标推送
- Alertmanager:告警管理模块,实现告警聚合、去重和路由
- Web UI/Grafana:数据可视化界面
1.2 数据模型与指标类型
理解Prometheus的数据模型是使用它的关键:
# 指标格式
<metric_name>{<label1>=<value1>, <label2>=<value2>} <value>
# 示例
http_requests_total{method="POST", handler="/api"} 238
支持四种核心指标类型:
- Counter:单调递增的计数器
- Gauge:可任意变化的数值
- Histogram:采样观测值分布
- Summary:类似Histogram,但可计算滑动窗口分位数
1.3 PromQL基础语法
PromQL是Prometheus的查询语言,常用查询模式:
# 计算每秒请求率
rate(http_requests_total[5m])
# 统计95分位延迟
histogram_quantile(0.95,
sum(rate(http_request_duration_seconds_bucket[5m])) by (le)
)
# 服务错误率超过5%时报警
(sum(rate(http_requests_total{status=~"5.."}[5m]))
/
(sum(rate(http_requests_total[5m]))) > 0.05
二、自定义Exporter开发实战
2.1 Exporter工作原理
Exporter本质是一个HTTP服务,通过/metrics
端点暴露符合Prometheus格式的监控指标。其核心开发流程包括:
- 选择合适的客户端库(Python/Go/Java等)
- 设计合理的指标体系和标签维度
- 实现指标数据采集逻辑
- 暴露HTTP端点供Prometheus抓取
2.2 Python Exporter开发示例
以下实现一个监控订单系统的Exporter:
from prometheus_client import start_http_server