Prometheus 是一款开源的 时序数据库(Time Series Database, TSDB)和监控告警系统,核心用于收集、存储和分析“时序数据”(按时间顺序记录的指标数据,如服务器 CPU 使用率、接口 QPS 等),并支持基于数据配置告警规则,是云原生和微服务架构中监控体系的核心组件之一。
一、核心定位与价值
在分布式系统(尤其是云原生环境)中,需要对海量服务、容器、基础设施的运行状态进行实时监控。Prometheus 的核心价值在于:
- 时序数据存储:专门优化时序数据的存储和查询,支持高写入量和低延迟查询;
- 灵活的指标收集:通过“拉取(Pull)”模式主动采集目标服务的指标,也支持“推送(Push)”模式;
- 强大的查询语言:提供 PromQL 语言,可灵活过滤、聚合指标数据(如计算接口平均响应时间、按标签分组统计 QPS);
- 动态告警:基于指标数据配置告警规则(如 CPU 使用率超过 80%),触发时通过邮件、WebHook 等方式通知;
- 云原生友好:无缝集成 Kubernetes、Docker 等容器化技术,自动发现和监控容器实例。
二、核心特性
- 多维度数据模型:每个指标(Metric)可通过“标签(Label)”添加多维度属性(如
http_requests_total{method="GET", status="200", service="user-service"}),支持按标签灵活筛选和聚合。 - Pull 模式采集数据:默认通过 HTTP 主动拉取目标服务的指标(如访问
/metrics端点),无需在目标服务中部署代理,简化集成。 - 内置时序数据库:优化时序数据的存储(按时间分片、压缩存储),支持亿级指标数据的高效读写。
- PromQL 查询语言:支持丰富的查询语法,可实现指标过滤、聚合(如求和
sum()、平均avg())、趋势分析(如增长率rate())等。 - 服务发现:支持静态配置、DNS 服务发现、Kubernetes 服务发现等,自动识别新增的监控目标(如 Kubernetes 中新建的 Pod)。
- 告警与可视化:配合 Alertmanager 实现告警分组、静默、路由;与 Grafana 集成可生成可视化仪表盘(如指标趋势图、拓扑图)。
三、核心概念
理解 Prometheus 的核心概念是使用它的基础:
| 概念 | 含义说明 |
|---|---|
| 指标(Metric) | 监控的核心数据项,如 cpu_usage(CPU 使用率)、http_requests_total(HTTP 请求总数)。每个指标有固定的名称和类型。 |
| 指标类型(Metric Type) | Prometheus 支持 4 种核心类型: - Counter:累加指标(如请求总数,只增不减);- Gauge:瞬时指标(如 CPU 使用率,可增可减);- Histogram:直方图(如请求响应时间分布);- Summary:摘要(如响应时间的分位数,如 P95、P99)。 |
| 标签(Label) | 为指标添加维度属性的键值对,如 service="order-service"、instance="192.168.1.100:8080",用于多维度筛选和聚合。 |
| 时序(Time Series) | 同一指标+同一标签组合的时间序列数据,如 http_requests_total{method="GET", service="user-service"} 在不同时间点的数值构成一条时序。 |
| 采集目标(Target) | 需要监控的对象,如一个微服务实例、一台服务器、一个数据库,Prometheus 通过目标的 /metrics 端点拉取指标。 |
| PromQL | Prometheus 专用查询语言,用于从时序数据库中查询、过滤、聚合指标数据。 |
| Alertmanager | Prometheus 的告警管理组件,负责接收 Prometheus 触发的告警,进行分组、静默、路由,并发送通知(如邮件、钉钉)。 |
四、工作原理
Prometheus 的核心工作流程可概括为 “发现目标→采集指标→存储数据→查询分析→告警触发”:
-
服务发现:
Prometheus 通过配置的“服务发现规则”(如 Kubernetes 服务发现、静态 IP 列表),动态获取需要监控的目标(Target)列表。 -
指标采集:
按照配置的采集间隔(如 10 秒),Prometheus 主动向每个目标的/metrics端点发送 HTTP 请求,拉取指标数据(如cpu_usage{instance="192.168.1.100"} 0.65)。 -
数据存储:
采集到的指标数据按“时序”存储到内置的时序数据库中,数据按时间分片(默认每 2 小时一个分片),并进行压缩优化,以节省存储空间。 -
查询与可视化:
用户通过 PromQL 语言查询时序数据(如avg(cpu_usage) by (service)按服务分组计算平均 CPU 使用率),查询结果可通过 Prometheus 自带的 UI 或 Grafana 展示为图表。 -
告警触发与处理:
- 提前在 Prometheus 中配置告警规则(如
cpu_usage > 0.8持续 1 分钟触发告警); - Prometheus 定期检查指标数据,若满足告警条件,将告警发送给 Alertmanager;
- Alertmanager 对告警进行分组(如同一服务的告警合并)、静默(如夜间静音非核心告警),并通过邮件、WebHook 等方式通知运维人员。
- 提前在 Prometheus 中配置告警规则(如
五、典型使用场景
- 微服务监控:采集微服务的接口 QPS、响应时间、错误率等指标,通过 Grafana 展示核心链路性能。
- 容器监控:配合
node-exporter(主机监控)、cadvisor(容器监控),监控 Kubernetes 集群中 Pod、Node 的 CPU、内存、网络使用情况。 - 基础设施监控:监控服务器、数据库(MySQL、Redis)、消息队列(Kafka、RabbitMQ)的运行状态(如数据库连接数、Redis 内存使用率)。
- 业务指标监控:自定义业务指标(如订单量、支付成功率),通过 Prometheus 采集并配置告警(如支付成功率低于 99% 触发告警)。
六、与 Spring Boot 集成示例
Spring Boot 应用可通过 micrometer-registry-prometheus 依赖暴露 Prometheus 格式的指标,步骤如下:
-
引入依赖:
<!-- Spring Boot Actuator(提供 /actuator 端点) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- Prometheus 指标导出器 --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> -
配置暴露 Prometheus 端点:
management: endpoints: web: exposure: include: prometheus # 暴露 /actuator/prometheus 端点 metrics: tags: application: order-service # 为指标添加 application 标签 -
启动应用,访问
http://localhost:8080/actuator/prometheus,即可看到 Prometheus 格式的指标(如http_server_requests_seconds_count{application="order-service", method="GET", status="200"} 100)。 -
在 Prometheus 配置文件中添加该应用为采集目标:
scrape_configs: - job_name: "order-service" # 任务名 scrape_interval: 10s # 采集间隔 static_configs: - targets: ["localhost:8080"] # 应用地址
总结
Prometheus 是一款以“时序数据”为核心的监控告警系统,通过 Pull 模式采集指标、PromQL 查询分析、Alertmanager 告警管理,实现对分布式系统的全面监控。它与云原生生态(Kubernetes、Grafana)深度集成,是当前微服务和容器化环境中监控方案的首选工具。

1115

被折叠的 条评论
为什么被折叠?



