Поделиться через


Сбор метрик автоматического выключателя Resilience4J в Spring Cloud с использованием Micrometer (предварительная версия)

Примечание.

Планы Basic, Standardи Enterprise вступили в период вывода из обращения 17 марта 2025 года. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.

План стандартного потребления и выделенный план вошли в период вывода из эксплуатации 30 сентября 2024 года, с полным завершением работы к концу марта 2025 года. Дополнительные сведения см. в статье «Миграция стандартного потребления и выделенного плана Azure Spring Apps в приложения контейнеров Azure».

Эта статья относится к:✅ Basic/Standard ✅ Enterprise

В этой статье описывается сбор метрик размыкателя цепи Spring Cloud Resilience4j с помощью внутрипроцессного агента Java в Application Insights. С помощью этой функции можно отслеживать метрики схемы отказа Resilience4j в Application Insights с использованием Micrometer.

Демонстрация 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", используйте следующую команду:

    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", используйте следующую команду:

    Примечание.

    Если подписка никогда не использовалась для создания экземпляра плана Enterprise в 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, который реализуется как bean автоматически созданный при включении начального средства разбиения цепи Spring Cloud. Дополнительные сведения см. в разделе Spring Cloud Circuit Breaker.

  • Следующие две зависимости конфликтуют с пакетами 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}

Найдите метрики Resilence4j в портал Azure

  1. В экземпляре Azure Spring Apps выберите Application Insights в области навигации и выберите Application Insights на странице.

    Снимок экрана: портал Azure, на котором показана страница Azure Spring Apps Application Insights с выделенной областью Application Insights.

    Примечание.

    Если вы не включите Application Insights, вы можете включить агент Java in-Process. Для получения дополнительной информации см. раздел "Управление Application Insights с помощью портала Azure" в "Использование агента Java в процессе Application Insights в Azure Spring Apps".

  2. Включите сбор данных измерений для метрик resilience4j. Для получения дополнительной информации см. раздел "Измерения пользовательских метрик и предварительная агрегация" в статье "Метрики на основе журналов и предварительно агрегированные метрики в Application Insights".

  3. Выберите Метрики в области навигации. Страница метрик предоставляет раскрывающиеся меню и параметры для определения диаграмм в рамках этой процедуры. Для всех диаграмм установите пространство метрик на azure.applicationinsights.

    Снимок экрана страницы метрик Application Insights портала Azure с открытым меню метрики пространства имен и выделенным параметром azure-applicationinsights.

  4. Задайте для метрики значение resilience4j_circuitbreaker_buffered_calls, а затем задайте для агрегированиязначение Avg.

    Снимок экрана страницы метрик портала Azure Application Insights, на которой показана диаграмма с буферными вызовами автоматического выключателя и средней агрегацией.

  5. Установите Metric на resilience4j_circuitbreaker_calls, а затем установите Aggregation на Avg.

    Снимок экрана страницы 'Метрики Application Insights' в портале Azure, на котором показана диаграмма с вызовами автоматического выключателя и средней агрегацией.

  6. Задайте для метрики значение resilience4j_circuitbreaker_calls, а затем задайте для агрегированиязначение Avg. Выберите "Добавить фильтр" и задайте для параметра "Имя" значение "Задержка".

    Снимок экрана: страница метрик портал Azure Application Insights, на котором показана диаграмма с вызовами разбиения цепи, средним агрегированием и фильтром задержки.

  7. Задайте метрику на resilience4j_circuitbreaker_calls, а затем установите агрегирование на Avg. Выберите Применить разделение и установите Разделить по на тип.

    Скриншот страницы Метрики Application Insights портала Azure, на которой показана диаграмма с вызовами размыкания цепи, средним агрегированием и разделением.

  8. Задайте метрику как resilience4j_circuitbreaker_calls, а затем установите агрегирование на Avg. Выберите Добавить метрику и задайте метрику как resilience4j_circuitbreaker_buffered_calls, а затем установите агрегирование на Avg. Нажмите снова Добавить метрику и задайте метрику как resilience4j_circuitbreaker_slow_calls, а затем установите агрегирование на Avg.

    Снимок экрана: портал Azure, на котором показана страница метрик Application Insights с диаграммой, описанной на этом шаге.

  1. В экземпляре Azure Spring Apps выберите Application Insights в области навигации, а затем выберите Application Insights по умолчанию на странице.

    Снимок экрана: портал Azure, на котором показана страница Azure Spring Apps Application Insights с выделенным экземпляром Application Insights по умолчанию.

    Примечание.

    Если нет доступного Application Insights по умолчанию, можно включить агент Java In-Process. Для получения дополнительной информации см. в разделе "Управление Application Insights с использованием портала Azure" документа "Использование агента Java в процессе Application Insights в Azure Spring Apps".

  2. Включите коллекцию измерений для метрик устойчивости 4j. Для получения дополнительной информации см. раздел "Измерения пользовательских метрик и предварительная агрегация" в "Метрики на основе журналов и предварительно агрегированные метрики в Application Insights".

  3. Выберите Метрики в области навигации. Страница метрик предоставляет выпадающие меню и опции для настройки диаграмм в рамках данной процедуры. Для всех диаграмм задайте пространство имен метрик на azure.applicationinsights.

    Снимок экрана страницы портала Azure с метриками Application Insights, с открытым меню пространства имен метрик и выделенным azure.applicationinsights.

  4. Задайте метрику на значение resilience4j_circuitbreaker_buffered_calls, а затем установите агрегацию на среднее значение.

    Снимок экрана страницы метрик портала Azure Application Insights, на котором показана диаграмма с вызовами, записанными в буфер, и средним агрегированием предохранителя.

  5. Задайте для метрики значение resilience4j_circuitbreaker_calls, а затем задайте для агрегированиязначение Avg.

    Снимок экрана со страницы Метрики Application Insights портала Azure, на котором показана диаграмма с вызовами автоматического выключателя и средним агрегированием.

  6. Установите метрику на resilience4j_circuitbreaker_calls, а затем установите агрегацию на Avg. Выберите Добавить фильтр и задайте Имя на Задержка.

    Снимок экрана страницы 'Метрики' портала Azure Application Insights, на которой показан график с вызовами контрольного размыкателя, средним агрегированием и фильтром задержки.

  7. Задайте метрику на resilience4j_circuitbreaker_calls, а затем задайте агрегирование на Avg. Выберите Применить разделение и установите Разделить по на тип.

    Снимок экрана страницы портал Azure Application Insights Метрики, на котором показана диаграмма с вызовами срабатывания коммутатора, средним агрегированием и детализацией.

  8. Задайте значение метрики как resilience4j_circuitbreaker_calls, а затем установите агрегирование как Avg. Выберите Добавить метрику и задайте значение метрики как resilience4j_circuitbreaker_buffered_calls, а затем установите агрегирование как Avg. Нажмите Добавить метрику еще раз и задайте значение метрики как resilience4j_circuitbreaker_slow_calls, а затем установите агрегирование как Avg.

    Снимок экрана: портал Azure, на котором показана страница метрик Application Insights с диаграммой, описанной на этом шаге.

Следующие шаги