每次抓取时,Prometheus 都将新的数据点与时间戳一并存储,从而创建持续的时间序列。这种结构使得 Prometheus 能够记录历史数据,监控长期趋势,并且对实时数据变化进行详细分析。

数据抓取流程

  1. 配置抓取目标:

    • 在 Prometheus 的配置文件 prometheus.yml 中,定义要监控的目标(例如,你的应用的 /metrics 端点)。这指定了 Prometheus 应该去哪里抓取数据。
  2. 定期抓取:

    • Prometheus 会按照设定的抓取间隔(如每 15 秒或每 30 秒)定期请求这些目标的 /metrics 端点。也就是说,Prometheus 会在这个时间间隔内去拉取数据。
  3. 接收数据与时间戳:

    • 当 Prometheus 抓取数据时,会获取到各种指标的当前值。这些值会附加上抓取时的时间戳(通常是 UTC 格式的自 1970 年 1 月 1 日以来的毫秒数)。
  4. 存储时间序列数据:

    • 抓取到的数据会以时间序列的形式存储在 Prometheus 的时间序列数据库中。每个指标都会依据抓取时获取到的新的值和对应的时间戳生成一个新的数据点。
    • 这些时刻数据将包含标签信息(如 method, route, instance 等),这使得数据更加具有上下文,方便查询和分析。

示例

假设我们的应用向 Prometheus 暴露以下指标:

http_requests_total{method="GET", route="/", instance="app1"} 100
  • 第一次抓取: 如果 Prometheus 在 2023-10-01 10:00:00 抓取到这个数据,那么它存储的内容将是:

    http_requests_total{method="GET", route="/", instance="app1"} 100
    Timestamp: 2023-10-01T10:00:00Z
  • 第二次抓取: 当 Prometheus 在 2023-10-01 10:00:15 抓取数据,假设这个值变成了 105,它会存储一个新的数据点:

    http_requests_total{method="GET", route="/", instance="app1"} 105
    Timestamp: 2023-10-01T10:00:15Z

数据的使用

  • 连续性: 这样,每次抓取产生的各个数据点都形成了一条连贯的时间序列,可以对请求数随时间的变化进行分析。
  • 查询能力: 用户可以使用 PromQL 查询这些时间序列数据,得到反映应用性能的数据,比如计算时间范围内的请求增长率:
increase(http_requests_total{method="GET", route="/", instance="app1"}[5m])

这条查询将计算过去 5 分钟内总的 GET 请求数量的增加量。