介绍一下Prometheus


Prometheus 是一款开源的 时序数据库(Time Series Database, TSDB)和监控告警系统,核心用于收集、存储和分析“时序数据”(按时间顺序记录的指标数据,如服务器 CPU 使用率、接口 QPS 等),并支持基于数据配置告警规则,是云原生和微服务架构中监控体系的核心组件之一。

一、核心定位与价值

在分布式系统(尤其是云原生环境)中,需要对海量服务、容器、基础设施的运行状态进行实时监控。Prometheus 的核心价值在于:

  1. 时序数据存储:专门优化时序数据的存储和查询,支持高写入量和低延迟查询;
  2. 灵活的指标收集:通过“拉取(Pull)”模式主动采集目标服务的指标,也支持“推送(Push)”模式;
  3. 强大的查询语言:提供 PromQL 语言,可灵活过滤、聚合指标数据(如计算接口平均响应时间、按标签分组统计 QPS);
  4. 动态告警:基于指标数据配置告警规则(如 CPU 使用率超过 80%),触发时通过邮件、WebHook 等方式通知;
  5. 云原生友好:无缝集成 Kubernetes、Docker 等容器化技术,自动发现和监控容器实例。

二、核心特性

  1. 多维度数据模型:每个指标(Metric)可通过“标签(Label)”添加多维度属性(如 http_requests_total{method="GET", status="200", service="user-service"}),支持按标签灵活筛选和聚合。
  2. Pull 模式采集数据:默认通过 HTTP 主动拉取目标服务的指标(如访问 /metrics 端点),无需在目标服务中部署代理,简化集成。
  3. 内置时序数据库:优化时序数据的存储(按时间分片、压缩存储),支持亿级指标数据的高效读写。
  4. PromQL 查询语言:支持丰富的查询语法,可实现指标过滤、聚合(如求和 sum()、平均 avg())、趋势分析(如增长率 rate())等。
  5. 服务发现:支持静态配置、DNS 服务发现、Kubernetes 服务发现等,自动识别新增的监控目标(如 Kubernetes 中新建的 Pod)。
  6. 告警与可视化:配合 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 端点拉取指标。
PromQLPrometheus 专用查询语言,用于从时序数据库中查询、过滤、聚合指标数据。
AlertmanagerPrometheus 的告警管理组件,负责接收 Prometheus 触发的告警,进行分组、静默、路由,并发送通知(如邮件、钉钉)。

四、工作原理

Prometheus 的核心工作流程可概括为 “发现目标→采集指标→存储数据→查询分析→告警触发”

  1. 服务发现
    Prometheus 通过配置的“服务发现规则”(如 Kubernetes 服务发现、静态 IP 列表),动态获取需要监控的目标(Target)列表。

  2. 指标采集
    按照配置的采集间隔(如 10 秒),Prometheus 主动向每个目标的 /metrics 端点发送 HTTP 请求,拉取指标数据(如 cpu_usage{instance="192.168.1.100"} 0.65)。

  3. 数据存储
    采集到的指标数据按“时序”存储到内置的时序数据库中,数据按时间分片(默认每 2 小时一个分片),并进行压缩优化,以节省存储空间。

  4. 查询与可视化
    用户通过 PromQL 语言查询时序数据(如 avg(cpu_usage) by (service) 按服务分组计算平均 CPU 使用率),查询结果可通过 Prometheus 自带的 UI 或 Grafana 展示为图表。

  5. 告警触发与处理

    • 提前在 Prometheus 中配置告警规则(如 cpu_usage > 0.8 持续 1 分钟触发告警);
    • Prometheus 定期检查指标数据,若满足告警条件,将告警发送给 Alertmanager;
    • Alertmanager 对告警进行分组(如同一服务的告警合并)、静默(如夜间静音非核心告警),并通过邮件、WebHook 等方式通知运维人员。

五、典型使用场景

  1. 微服务监控:采集微服务的接口 QPS、响应时间、错误率等指标,通过 Grafana 展示核心链路性能。
  2. 容器监控:配合 node-exporter(主机监控)、cadvisor(容器监控),监控 Kubernetes 集群中 Pod、Node 的 CPU、内存、网络使用情况。
  3. 基础设施监控:监控服务器、数据库(MySQL、Redis)、消息队列(Kafka、RabbitMQ)的运行状态(如数据库连接数、Redis 内存使用率)。
  4. 业务指标监控:自定义业务指标(如订单量、支付成功率),通过 Prometheus 采集并配置告警(如支付成功率低于 99% 触发告警)。

六、与 Spring Boot 集成示例

Spring Boot 应用可通过 micrometer-registry-prometheus 依赖暴露 Prometheus 格式的指标,步骤如下:

  1. 引入依赖:

    <!-- 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>
    
  2. 配置暴露 Prometheus 端点:

    management:
      endpoints:
        web:
          exposure:
            include: prometheus  # 暴露 /actuator/prometheus 端点
      metrics:
        tags:
          application: order-service  # 为指标添加 application 标签
    
  3. 启动应用,访问 http://localhost:8080/actuator/prometheus,即可看到 Prometheus 格式的指标(如 http_server_requests_seconds_count{application="order-service", method="GET", status="200"} 100)。

  4. 在 Prometheus 配置文件中添加该应用为采集目标:

    scrape_configs:
      - job_name: "order-service"  # 任务名
        scrape_interval: 10s  # 采集间隔
        static_configs:
          - targets: ["localhost:8080"]  # 应用地址
    

总结

Prometheus 是一款以“时序数据”为核心的监控告警系统,通过 Pull 模式采集指标、PromQL 查询分析、Alertmanager 告警管理,实现对分布式系统的全面监控。它与云原生生态(Kubernetes、Grafana)深度集成,是当前微服务和容器化环境中监控方案的首选工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值