两个依赖和一个配置块:通过 Prometheus 远程写入将 Spring Boot 指标发送到 Elasticsearch

作者:来自 Elastic Christoph Heger

Prometheus 远程写入会将 Micrometer 的 Actuator 指标转发到 Elasticsearch 时序数据流中。JVM 堆、请求延迟、GC 暂停时间和 HikariCP 活动都可以通过 ES|QL 进行查询,而且无需在其旁边运行任何新的组件。

使用时标题一序数据流高效存储高基数指标,同时保留你的 Prometheus 和 PromQL 工作流程。

深入了解基础设施和指标监控。现在开始免费云试用,或者在你的本地计算机上试用 Elastic。


Prometheus 远程写入为 Spring Boot 提供了直接连接 Elastic Serverless 的路径:不需要专用的长期指标存储,也不需要额外运维基础设施。在 pom.xml 中添加两个依赖,在 prometheus.yml 中添加一个指向 Elastic 的 remote_write 配置块,JVM、 HTTP 请求和数据库指标就会流入一个可查询的时序数据流。AI Agent 随后可以检查这些字段,并根据对话提示生成完整的指标仪表板(堆使用量、延迟百分位数、HikariCP 连接池活动)。

Curly-Engine 实现了 PetClinic API,并与 Prometheus 一起运行 Spring Boot,因此 Prometheus 可以抓取 /actuator/prometheus,并将样本转发到 Elastic。

前提条件

  • 一个 Elastic Observability Serverless 项目。

  • 一个能够写入 metrics-* 的 API 密钥。

  • Java 17 或更高版本、Docker 和 Docker Compose,用于运行示例。

  • Serverless 项目设置中的 Prometheus 端点。

使用 Micrometer Prometheus 注册表公开 Spring Boot Actuator 指标

Curly-Engine 使用 Spring Boot Actuator 和 Micrometer 的 Prometheus 注册表。在应用程序的 pom.xml 中添加以下依赖:

xml 复制代码
`

1.  <dependency>
2.      <groupId>org.springframework.boot</groupId>
3.      <artifactId>spring-boot-starter-actuator</artifactId>
4.  </dependency>
5.  <dependency>
6.      <groupId>io.micrometer</groupId>
7.      <artifactId>micrometer-registry-prometheus</artifactId>
8.  </dependency>

`AI写代码

在 application.properties 中公开 /actuator/prometheus 端点:

ini 复制代码
`

1.  management.endpoints.web.exposure.include=health,prometheus
2.  management.endpoint.prometheus.enabled=true

`AI写代码

配置 Prometheus 指标:

ini 复制代码
`

1.  management.metrics.tags.application=${spring.application.name}
2.  management.metrics.distribution.percentiles-histogram.http.server.requests=true

`AI写代码

启动应用程序并检查端点:

bash 复制代码
`curl http://localhost:8080/actuator/prometheus`AI写代码

除了 JVM 和进程指标之外,Micrometer 还会生成带有 bucket、count 和 sum 序列的 HTTP 请求直方图:

ini 复制代码
`

1.  http_server_requests_seconds_bucket{method="GET",status="200",uri="/owners",le="0.01"} 0.0
2.  http_server_requests_seconds_count{method="GET",status="200",uri="/owners"} 42.0
3.  http_server_requests_seconds_sum{method="GET",status="200",uri="/owners"} 3.827

`AI写代码

bucket 序列包含延迟分布,你可以在数据摄取后对其进行探索。

配置 Prometheus 远程写入

Spring Boot 没有内置的远程写入发送器,因此需要在应用程序旁边运行 Prometheus,以抓取 Actuator 端点并将样本推送到 Elastic。

将以下配置添加到 prometheus.yml,并将占位符替换为你的 Prometheus 端点和 API 密钥 :

yaml 复制代码
`

1.  global:
2.    scrape_interval: 15s
3.    evaluation_interval: 15s

5.  scrape_configs:
6.    - job_name: 'petclinic-api'
7.      metrics_path: '/actuator/prometheus'
8.      static_configs:
9.        - targets: ['petclinic-api:8080']

11.  remote_write:
12.    - url: "https://YOUR_PROMETHEUS_ENDPOINT/api/v1/write"
13.      authorization:
14.        type: ApiKey
15.        credentials: YOUR_API_KEY

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

15 秒的 scrape_interval 是一个合理的默认值;只有当你需要亚分钟级的告警窗口,并且了解高基数带来的成本时,才应将其调低。

默认的 Remote Write URL 会将指标路由到 metrics-generic.prometheus-default。如果需要使用单独的数据集或命名空间,请参阅使用 Remote Write 将 Prometheus 指标发送到 Elasticsearch。

不要将 API 密钥放入已提交到版本控制的配置中;对于本地开发,可以通过环境变量或密钥管理器传递密钥。

启动 PetClinic 示例和 Prometheus:

css 复制代码
`docker-compose up --build`AI写代码
  1. 打开 http://localhost:9090/targets

  2. 确认 petclinic-api 目标的状态为 UP

  3. 先向 API 发送一些请求,以便请求和数据库指标有数据可以显示

验证 Prometheus Remote Write 是否正在将数据发送到 Elasticsearch

在 Kibana Discover 中,切换到 ES|QL,然后运行:

markdown 复制代码
`

1.  TS metrics-generic.prometheus-default
2.  | WHERE @timestamp > NOW() - 15 minutes
3.  | LIMIT 500

`AI写代码

Discover 会返回每个可用指标,并显示一个小型时序可视化。如果查询返回数据,说明 Prometheus 正在抓取应用程序,而 Elastic 正在接受 Remote Write 请求。

Remote Write 会将样本存储在 Elastic 指标数据流中。指标值位于 metrics.* 下,Prometheus 标签则作为维度,用于过滤和分组。

使用 Elastic AI Agent 创建指标仪表板

从顶部导航栏中的 AI Agent 图标打开 Elastic AI Agent,并要求它检查数据流:

我在 metrics-generic.prometheus-default 数据流中有 Spring Boot Prometheus 指标。创建一个仪表板来可视化这些指标。

AI Agent 会检查它找到的字段,并创建可编辑的 Kibana 可视化。对于此示例,有用的面板包括:

  • JVM 堆内存。

  • CPU 使用率。

  • 按端点划分的请求速率。

  • HikariCP 连接活动。

  • JVM 垃圾回收暂停时间。

在 AI Agent 响应中点击 Preview,打开新建的 Dashboard,然后点击 Save 保存。生成的面板都是标准的 Kibana 可视化;打开其中任意一个面板并点击 Edit,即可检查或调整 ES|QL 查询、时间分桶、聚合或细分方式。

仪表板的质量取决于 AI Agent 对数据流进行采样时找到的数据。如果指标数据稀疏,可以生成一些流量,然后使用更大的时间范围重新发起请求。

将 HTTP 延迟百分位数添加到仪表板

速率指标显示需求量;延迟百分位数则显示端点在这种需求量下的表现。继续输入:

将 HTTP 请求延迟百分位数添加到仪表板,包括按端点 URI 划分的 p50、p90 和 p99。

AI Agent 会根据 Micrometer 的 HTTP 请求直方图桶指标构建面板。在依赖它之前,请检查生成的结果,重点关注所选字段、聚合、时间范围和 URI 细分方式。这是你最有可能需要调整的查询。

改为导入预构建的仪表板

Curly-Engine 仓库还包含一个可导入的 dashboard.ndjson。要使用它,请在 Kibana 中打开 Stack Management > Saved Objects ,并在 metrics-generic.prometheus-default 中开始接收指标后导入该文件。

将 Prometheus Remote Write 用于生产环境

Prometheus Remote Write 为 Spring Boot 应用提供了一条从 Actuator 指标直接进入 Elastic Serverless 的路径,无需单独的长期指标存储。

这种方式是否适合,取决于你对存储的需求:

将 Prometheus Remote Write 写入 Elasticsearch 专用长期存储(Thanos、Mimir、Cortex)
需要运行的组件 你已经运行的 Prometheus 实例,加上 Elastic 项目 Sidecar 或 distributor、store gateway、querier、compactor,以及对象存储桶
查询语言 ES|QL 和 PromQL PromQL
降采样 由 Elasticsearch 时序数据流降采样处理 内置,通常采用固定分辨率
跨多个 Prometheus 实例的全局视图 每个实例都写入同一个集群,因此一个查询即可跨越所有实例 核心设计目标之一,可对重叠实例进行去重
使用 AI Agent 开始仪表板对话,然后针对与你的服务相关的指标和标签验证并优化生成的面板。

在将其应用于高基数生产工作负载之前,请检查抓取任务,并添加 metric_relabel_configs,以丢弃你不需要的指标。

原文:Prometheus remote write: Spring Boot to Elasticsearch | Elastic Observability Labs

相关推荐
Elasticsearch2 小时前
使用两个 Elasticsearch 数据层而不是四个,降低日志存储成本
elasticsearch
Wx-bishekaifayuan3 小时前
springboot生活商城系统21035-计算机课程设计、毕业设计
spring boot·后端·python·spring·elasticsearch·golang·课程设计
Elasticsearch8 小时前
使用 NVIDIA cuVS 在 Elasticsearch 中实现 GPU 加速的向量索引:在 10 分钟内处理 1.38 亿个向量
elasticsearch
Flynt8 小时前
"MySQL搜不动就上ES"?我先在50万行数据上测了它自带的ngram全文索引
mysql·elasticsearch·搜索引擎
柒和远方8 小时前
混合检索 RAG 全链路:查询增强、双路召回与重排——向量库和搜索引擎联手补齐召回
elasticsearch·langchain·llm
Elasticsearch9 小时前
用自然语言分析跟踪数据,询问 Elastic Agent Builder 为什么运行缓慢
elasticsearch
Elasticsearch9 小时前
Elastic 中的 Temporal Cloud 可观测性:50+ 个指标,无需采集器
elasticsearch
阿里云大数据AI技术9 小时前
云栖2026|从“找到答案”到“完成任务”:阿里云以 Agentic Search 重塑 AI 搜索
大数据·人工智能·elasticsearch
Elasticsearch9 小时前
遥测策略:在运行时更改 OpenTelemetry 采样率和日志级别,无需重启
elasticsearch