使用 Prometheus 和 Grafana 连接 Spring Boot

问题描述 投票:0回答:1

我正在尝试使用 Micrometer、Prometheus 在 Spring Boot 应用程序中执行简单的度量/可观察性,并在 Grafana 上可视化该度量。我在 GitHub 上创建了最小的示例。本质上,我将有一个预定的作业,它将向其他一些服务发出 HTTP 请求。我需要在一小时内完成 20k 个这样的请求。我想让它运行,并测量该单个小时内请求持续时间的平均值/平均速率。

正如我从阅读文档中了解到的,Grafana 本身就能够向 Prometheus 发出 PromQL 查询,Prometheus 从 Actuator 中抓取数据。不确定 Micrometer 的确切作用是什么,但根据我的理解,如果我们使用不同类型的遥测系统(其他 Prometheus),它充当门面。

所以有两个问题:

问题1

我添加了以下 bean 和带注释的方法,使 HTTP 能够连接到外部服务。将使用 Feign(据我所知,Micrometer 也“跟踪”Feign,需要进一步查找该配置):

@Bean
public TimedAspect timedAspect(MeterRegistry registry) {
    return new TimedAspect(registry);
}

以及我的服务方式:

@Service
@Slf4j
public class MyService {

@Timed("email.time")
public EmailMessageResponseDto sendEmail(EmailMessageRequestDto emailMessageRequestDto){
        //TODO: This is the place where Feign Client will be used to send email
        return null;
    }
}

当我向调用

http://localhost:8089/sendEmails
方法的端点 (
sendEmail
) 发出请求时,我在 Prometheus 的指标
email_time
处看不到
http://localhost:8089/management/prometheus

我也不明白的是如何在 Grafana 上可视化

email_time

问题2

我在 Grafana 的仪表板上看不到任何内容。我可以看出 Grafana 中的数据源设置正确。 Grafana 位于

http://localhost:3000/
(凭证:admin admin)。我看到有不同的仪表板可用,但没有任何指标。因此,
docker/grafana/provisioning/dashboards/spring-boot-statistics.json
中的文件正在被拾取。我在 Grafana 市场上找到了它。

如果有任何意义的话,Boot 版本是 2.4.4,Java 是 1.8。我们的项目目前使用这些版本。

spring-boot prometheus grafana micrometer spring-micrometer
1个回答
0
投票

这个示例项目可能有您想要的一切:https://github.com/jonatan-ivanov/teahouse

它包含 3 个相互通信的 Spring Boot 应用程序,它们使用 Prometheus,它具有 Grafana 仪表板和一个用于生成流量的负载生成器,您可以在此处查看它的运行情况:https://www.youtube.com/watch? v=HQHuFnKvk_U

问题1

在较新版本的 Boot (3.1+) 中,您不需要添加

TimedAspect
@Bean
,但需要
spring-boot-starter-aop
。另外,我建议使用
@Observed
代替。

问题2

我认为 Prometheus 不会抓取您的服务,如果您打开 Prometheus UI 进入“目标”菜单,看看您的应用程序是否存在并且正常。您需要更改 Prometheus 配置来添加您的应用程序,您可以查看 Prometheus 文档或上面的 Teahouse 示例。

© www.soinside.com 2019 - 2024. All rights reserved.