你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

通过 Micrometer 收集 Spring Cloud Resilience4J 断路器指标(预览版)

注意

从 2025 年 3 月中旬开始,基本、标准和企业计划将弃用,停用期为三年。 建议过渡到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告

从 2024 年 9 月 30 日开始,标准消耗和专用计划将弃用,六个月后将完全关闭。 建议过渡到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用

本文适用于:✔️ 基本版/标准版 ✔️ 企业版

本文介绍如何通过 Application Insights Java 进程内代理收集 Spring Cloud Resilience4j 断路器指标。 利用此功能,你可以使用 Micrometer 通过 Application Insights 监视 resilience4j 断路器的指标。

演示 spring-cloud-circuit-breaker-demo 说明了监视功能的工作原理。

先决条件

  • 安装 Git、Maven 和 Java(如果尚未安装在开发计算机上)。

构建和部署应用

使用以下步骤生成和部署示例应用程序。

  1. 使用以下命令克隆和生成演示存储库:

    git clone https://github.com/spring-cloud-samples/spring-cloud-circuitbreaker-demo.git
    cd spring-cloud-circuitbreaker-demo && mvn clean package -DskipTests
    
  1. 使用以下命令创建 Azure Spring Apps 服务实例:

    az spring create \
        --resource-group ${resource-group-name} \
        --name ${Azure-Spring-Apps-instance-name}
    
  2. 使用以下命令创建具有终结点的应用程序:

    az spring app create \
        --resource-group ${resource-group-name} \
        --service ${Azure-Spring-Apps-instance-name} \
        --name resilience4j \
        --assign-endpoint
    az spring app create \
        --resource-group ${resource-group-name} \
        --service ${Azure-Spring-Apps-instance-name} \
        --name reactive-resilience4j \
        --assign-endpoint
    
  3. 使用以下命令来部署应用程序:

    az spring app deploy \
        --resource-group ${resource-group-name} \
        --service ${Azure-Spring-Apps-instance-name} \
        --name resilience4j \
        --env resilience4j.circuitbreaker.instances.backendA.registerHealthIndicator=true \
        --artifact-path ./spring-cloud-circuitbreaker-demo-resilience4j/target/spring-cloud-circuitbreaker-demo-resilience4j-0.0.1-SNAPSHOT.jar
    az spring app deploy \
        --resource-group ${resource-group-name} \
        --service ${Azure-Spring-Apps-instance-name} \
        --name reactive-resilience4j \
        --env resilience4j.circuitbreaker.instances.backendA.registerHealthIndicator=true \
        --artifact-path ./spring-cloud-circuitbreaker-demo-reactive-resilience4j/target/spring-cloud-circuitbreaker-demo-reactive-resilience4j-0.0.1-SNAPSHOT.jar
    
  1. 使用以下命令创建 Azure Spring Apps 服务实例:

    注意

    如果你的订阅从未用于创建 Azure Spring Apps 的企业计划实例,则必须运行以下命令:

    az term accept \
        --publisher vmware-inc 
        --product azure-spring-cloud-vmware-tanzu-2 
        --plan asa-ent-hr-mtr
    
    az spring create \
        --resource-group ${resource-group-name} \
        --name ${Azure-Spring-Apps-instance-name} \
        --sku Enterprise
    
  2. 使用以下命令创建具有终结点的应用程序:

    az spring app create \
        --resource-group ${resource-group-name} \
        --service ${Azure-Spring-Apps-instance-name} \
        --name resilience4j \
        --assign-endpoint
    az spring app create \
        --resource-group ${resource-group-name} \
        --service ${Azure-Spring-Apps-instance-name} \
        --name reactive-resilience4j \
        --assign-endpoint
    
  3. 使用以下命令来部署应用程序:

    az spring app deploy \
        --resource-group ${resource-group-name} \
        --service ${Azure-Spring-Apps-instance-name} \
        --name resilience4j \
        --env resilience4j.circuitbreaker.instances.backendA.registerHealthIndicator=true \
        --artifact-path ./spring-cloud-circuitbreaker-demo-resilience4j/target/spring-cloud-circuitbreaker-demo-resilience4j-0.0.1-SNAPSHOT.jar
    az spring app deploy \
        --resource-group ${resource-group-name} \
        --service ${Azure-Spring-Apps-instance-name} \
        --name reactive-resilience4j \
        --env resilience4j.circuitbreaker.instances.backendA.registerHealthIndicator=true \
        --artifact-path ./spring-cloud-circuitbreaker-demo-reactive-resilience4j/target/spring-cloud-circuitbreaker-demo-reactive-resilience4j-0.0.1-SNAPSHOT.jar
    

注意

  • 包括 Resilience4j 所需的依赖项:

    <dependency>
        <groupId>io.github.resilience4j</groupId>
        <artifactId>resilience4j-micrometer</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
    </dependency>
    
  • 你的代码必须使用 CircuitBreakerFactory API,该 API 是作为在你包括 Spring Cloud 断路器入门版时自动创建的 bean 实现的。 有关详细信息,请参阅 Spring Cloud 断路器

  • 以下 2 个依赖项与 resilient4j 包冲突。 请确保不包含它们。

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-zipkin</artifactId>
    </dependency>
    

导航到网关应用程序提供的 URL,然后从 spring-cloud-circuit-breaker-demo 访问终结点,如下所示:

/get
/delay/{seconds}
/fluxdelay/{seconds}

在Azure 门户上找到 Resilence4j 指标

  1. 在 Azure Spring Apps 实例中,选择导航窗格中的“Application Insights”,然后在页面上选择“Application Insights”。

    Azure 门户的屏幕截图,其中显示了 Azure Spring Apps Application Insights 页,并且“Application Insights”已突出显示。

    注意

    如果未启用 Application Insights,则可以启用 Java 进程内代理。 有关详细信息,请参阅在 Azure Spring Apps 中使用 Application Insights Java 进程内代理使用 Azure 门户管理 Application Insights 部分。

  2. 为 resilience4j 指标启用维度集合。 有关详细信息,请参阅 Application Insights 中基于日志的指标和预聚合的指标自定义指标维度和预聚合部分。

  3. 在导航窗格中选择“指标”。 “指标”页提供下拉菜单和选项,用于定义此过程中的图表。 对于所有图表,请将“指标命名空间”设置为“azure.applicationinsights”。

    Azure 门户 Application Insights 指标页的屏幕截图,其中“指标命名空间”菜单已打开,并突出显示了 azure-applicationinsights 选项。

  4. 将“指标”设置为“resilience4j_circuitbreaker_buffered_calls”,然后将“聚合”设置为“平均值”。

    Azure 门户 Application Insights 指标页的屏幕截图,其中显示了包含断路器缓冲调用和平均聚合的图表。

  5. 将“指标”设置为“resilience4j_circuitbreaker_calls”,然后将“聚合”设置为“平均值”。

    Azure 门户 Application Insights 指标页的屏幕截图,其中显示了包含断路器调用和平均聚合的图表。

  6. 将“指标”设置为“resilience4j_circuitbreaker_calls”,然后将“聚合”设置为“平均值”。选择“添加筛选器”,并将“名称”设置为“延迟”。

    Azure 门户 Application Insights 指标页的屏幕截图,其中显示了包含断路器调用、平均聚合和延迟筛选器的图表。

  7. 将“指标”设置为“resilience4j_circuitbreaker_calls”,然后将“聚合”设置为“平均值”。选择“应用筛选”,并将“筛选依据”设置为“种类”。

    Azure 门户 Application Insights 指标页的屏幕截图,其中显示了包含断路器调用、平均聚合和拆分的图表。

  8. 将“指标”设置为“resilience4j_circuitbreaker_calls”,然后将“聚合”设置为“平均值”。选择“添加指标”,将“指标”设置为“resilience4j_circuitbreaker_buffered_calls”,然后将“聚合”设置为“平均值”。再次选择“添加指标”,将“指标”设置为“resilience4j_circuitbreaker_slow_calls”,然后将“聚合”设置为“平均值”。

    Azure 门户的屏幕截图,其中显示了 Application Insights“指标”页以及此步骤中所述的图表。

  1. 在 Azure Spring Apps 实例中,选择导航窗格中的“Application Insights”,然后在页面上选择默认的“Application Insights”

    Azure 门户的屏幕截图,其中显示了 Azure Spring Apps Application Insights 页,并且默认的 Application Insights 实例已突出显示。

    注意

    如果没有可用的默认 Application Insights,则可以启用 Java 进程内代理。 有关详细信息,请参阅在 Azure Spring Apps 中使用 Application Insights Java 进程内代理使用 Azure 门户管理 Application Insights 部分。

  2. 为 resilience4j 指标启用维度集合。 有关详细信息,请参阅 Application Insights 中基于日志的指标和预聚合的指标自定义指标维度和预聚合部分。

  3. 在导航窗格中选择“指标”。 “指标”页提供下拉菜单和选项,用于定义此过程中的图表。 对于所有图表,请将“指标命名空间”设置为“azure.applicationinsights”。

    Azure 门户 Application Insights 指标页的屏幕截图,其中“指标命名空间”菜单已打开,并突出显示了 azure.applicationinsights。

  4. 将“指标”设置为“resilience4j_circuitbreaker_buffered_calls”,然后将“聚合”设置为“平均值”。

    Azure 门户 Application Insights 指标页的屏幕截图,其中显示了包含断路器缓冲调用和平均聚合的图表。

  5. 将“指标”设置为“resilience4j_circuitbreaker_calls”,然后将“聚合”设置为“平均值”。

    Azure 门户 Application Insights 指标页的屏幕截图,其中显示了包含断路器调用和平均聚合的图表。

  6. 将“指标”设置为“resilience4j_circuitbreaker_calls”,然后将“聚合”设置为“平均值”。选择“添加筛选器”,并将“名称”设置为“延迟”。

    Azure 门户 Application Insights 指标页的屏幕截图,其中显示了包含断路器调用、平均聚合和延迟筛选器的图表。

  7. 将“指标”设置为“resilience4j_circuitbreaker_calls”,然后将“聚合”设置为“平均值”。选择“应用筛选”,并将“筛选依据”设置为“种类”。

    Azure 门户 Application Insights 指标页的屏幕截图,其中显示了包含断路器调用、平均聚合和拆分的图表。

  8. 将“指标”设置为“resilience4j_circuitbreaker_calls”,然后将“聚合”设置为“平均值”。选择“添加指标”,将“指标”设置为“resilience4j_circuitbreaker_buffered_calls”,然后将“聚合”设置为“平均值”。再次选择“添加指标”,将“指标”设置为“resilience4j_circuitbreaker_slow_calls”,然后将“聚合”设置为“平均值”。

    Azure 门户的屏幕截图,其中显示了 Application Insights“指标”页以及此步骤中所述的图表。

后续步骤