Prometheus如何与Spring Boot集成实现监控、告警和日志功能
这里有一份全面的指南,介绍如何将Prometheus集成到Java Spring Boot应用中,用于度量、警报和日志。
普罗米修斯是什么?普罗米修斯是一个开源的监控和警报系统,最初由SoundCloud开发。它专为云原生环境中的可靠性和可扩展性而设计,确保能够在这些环境中稳定运行,并且是云原生计算基金会的一部分。普罗米修斯特别适合捕获和查询时序数据,使其非常适合用于应用监控。
2. 在 Spring Boot 中设置 Prometheus普罗米修斯无缝集成了 Spring Boot,利用 Micrometer 提供应用程序指标。Micrometer 起到桥梁作用,让各种指标可以被普罗米修斯收集。
先决条件- Java 已安装在我的系统上。
- Prometheus Server 已安装在我的系统上(或可以访问运行在云端的实例)。
- Spring Boot 应用程序 需要集成的。
第一步:添加依赖库
在你的 pom.xml
中添加 Spring Boot 和 Micrometer 所需的依赖。
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
这会引入Micrometer的Prometheus注册表,它会以Prometheus友好的格式收集并发布指标。
第二步:配置 Spring Boot 以展示指标在 application.properties
中启用 Spring Boot 指标,以暴露相关指标信息。
# Prometheus指标暴露配置
management.endpoints.web.exposure.include=prometheus
# Prometheus端点启用配置
management.endpoint.prometheus.enabled=true
# Prometheus指标导出启用配置
management.metrics.export.prometheus.enabled=true
Prometheus 指标数据将在 /actuator/prometheus
端点路径提供。你可以在 http://localhost:8080/actuator/prometheus
查看这些原始指标数据。
为了让 Prometheus 从你的 Spring Boot 应用程序中抓取指标数据,更新你的 prometheus.yml
配置文件以定义一个抓取作业。
scrape_configs:
- job_name: 'spring-boot'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['localhost:8080']
注:以上为 YAML 配置,用于配置监控 spring-boot 应用程序的指标路径和目标地址。
此配置让Prometheus从运行在localhost:8080
的Spring Boot应用程序中抓取指标。
你可以通过Micrometer的API在Spring Boot中定义你自己的指标。
计数器示例要跟踪特定端点被访问的次数,请使用Counter
指标。
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Counter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class 自定义指标控制器 {
private final Counter 访问计数器;
public 自定义指标控制器(MeterRegistry registry) {
this.访问计数器 = Counter.builder("custom_metric_access_counter")
.description("描述了对自定义端点访问次数的说明")
.register(registry);
}
@GetMapping("/custom")
public String 自定义端点() {
访问计数器.increment();
return "访问了自定义端点";
}
}
每当访问 /custom
时,accessCounter
会加一,从而让 Prometheus 能记录和监控这个指标。
普罗米修斯的警报规则配置在alert_rules.yml
文件中。根据特定的指标和条件来设定规则。
我们来设置一个触发警报,如果自定义端点被频繁访问,这可能意味着流量模式不正常。
groups:
- name: spring-boot-alerts
rules:
- alert: 高访问率
expr: rate(custom_metric_access_counter[5m]) > 5
for: 1m
labels:
severity: 警告
annotations:
summary: "检测到自定义端点高访问率"
description: "在最近的5分钟内,/custom端点的访问计数器每分钟的访问次数超过了5次。"
这条规则监控 /custom
端点的访问频率,并在访问频率每分钟超过5次且在五分钟内持续时触发警告。
普罗米修斯可以将警报转发到 AlertManager 以便进行通知管理。AlertManager 可以将警报发送到各种通知渠道,例如邮件、Slack 或 PagerDuty。
配置 AlertManager要配置AlertManager插件,请创建或编辑一个config.yml
文件,指定您的通知偏好。
global:
resolve_timeout: 5m
route:
receiver: 'slack-notifications'
receivers:
- name: 'slack-notifications'
slack_configs:
- send_resolved: true
api_url: 'https://hooks.slack.com/services/your/webhook/url'
channel: '#alerts'
text: "警报: {{ .摘要 }}"
此配置会将警报发送到指定的 Slack 频道。
7. 用 Prometheus 记录日志Prometheus 不是作为日志工具来设计的,但它可以通过 Grafana
将日志与指标关联起来。Grafana 可以将日志和指标拉取到同一个视图中,帮助你发现模式和趋势并排查问题。
Grafana 是一个强大的工具,用于可视化并分析收集自 Prometheus 的指标。
- 将 Prometheus 添加为数据源:在 Grafana 中,进入
配置 > 数据源
并将 Prometheus 添加为数据源。 - 创建仪表板:创建仪表板和面板以展示请求率、延迟、内存使用等指标。
- 在 Grafana 中设置警报:您可以基于 Prometheus 指标来配置 Grafana 的警报,并直接在 Grafana 中收到通知。
假设你想监控并针对某个端点的高延迟发出警报信息,该端点位于你的 Spring Boot 应用中。
- 在你的应用程序中设置一个计时器。
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LatencyMetricsController {
private final Timer timer;
public LatencyMetricsController(MeterRegistry registry) {
this.timer = Timer.builder("custom_latency_metric")
.description("延迟端点的延迟情况")
.register(registry);
}
@GetMapping("/latency")
public String latencyEndpoint() {
return timer.record(() -> {
// 模拟任务
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return "延迟已跟踪!";
});
}
}
timer
度量记录了处理 /latency
端点所需的时间。
3. 设置延迟警告提醒
- alert: 高延迟警报
expr: histogram_quantile(0.9, rate(custom_latency_metric_bucket[5m])) > 200
for: 1m
labels:
severity: critical
annotations:
summary: "/latency 端点延迟过高"
description: "/latency 端点延迟较高(90%分位数 > 200毫秒)。
- 在Grafana中可视化:创建一个Grafana面板来展示延迟随时间的变化趋势,并设置警报来通知团队成员。
将Prometheus与Spring Boot集成后,您将获得强大的监控能力。此设置允许您跟踪自定义应用指标,为关键性能指标(KPI)设置警报,并可视化指标。在生产环境中,您可以扩展此设置,使用Grafana和AlertManager来构建完整的可观测性栈。
共同学习,写下你的评论
评论加载中...
作者其他优质文章