Группы работоспособности Spring Boot Actuator с вложенными индикаторами

Я пытаюсь настроить проверки работоспособности Actuator, чтобы включить проверки внешней службы, вложенной за пределы первого уровня. Например, при вызове /actuator/health доступны следующие индикаторы работоспособности:

    {
       "status":"DOWN",
       "components":{
          "jms":{
             "status":"DOWN",
             "components":{
                "broker1":{
                   "status":"DOWN",
                   "details":{
                      "error":"javax.jms.JMSException: Failed to create session factory"
                   }
                },
                "broker2":{
                   "status":"UP",
                   "details":{
                      "provider":"ActiveMQ"
                   }
                }
             }
          },
          "livenessState":{
             "status":"UP"
          },
          "readinessState":{
             "status":"UP"
          }
       },
       "groups":[
          "liveness",
          "readiness"
       ]
    }

В компоненте jms есть два брокера — broker1 и broker2. Я могу настроить Actuator для включения jms в группу готовности, например:

  endpoint:
    health:
      probes:
        enabled: true
      enabled: true
      show-details: always
      group:
        readiness:
          include: readinessState, jms

Но это будет включать всех брокеров в тесте готовности.

При вызове /actuator/health/readiness я получаю:

{
   "status":"DOWN",
   "components":{
      "jms":{
         "status":"DOWN",
         "components":{
            "broker1":{
               "status":"DOWN",
               "details":{
                  "error":"javax.jms.JMSException: Failed to create session factory"
               }
            },
            "broker2":{
               "status":"UP",
               "details":{
                  "provider":"ActiveMQ"
               }
            }
         }
      },
      "readinessState":{
         "status":"UP"
      }
   }
}

Поскольку проверка готовности в Kubernetes предотвращает только перенаправление веб-запросов в мой модуль, у меня есть случаи, когда я могу обработать запрос, если broker1 не работает, пока broker2 работает. Есть ли способ настроить Actuator для включения вложенных индикаторов работоспособности в группу работоспособности, а не только корневых? Я пробовал такие комбинации, как Broker1, jms.broker1, jms/broker1, jms\broker1 безрезультатно.

Если он не поддерживается напрямую через конфигурацию, могу ли я создать пользовательский компонент, который даст мне желаемое поведение. Например, я думал о возможности написания пользовательского CompositeHealthContributor, но не уверен, что смогу агрегировать существующие показатели здоровья. Я не хочу повторять проверки работоспособности, которые уже проводятся.

Еще один связанный вариант использования — считать службу работоспособной, пока доступен один из группы внешних ресурсов. Например, у меня есть идентичный брокер в двух дата-центрах. Пока один из брокеров доступен, мой сервис можно считать исправным. Что было бы хорошим подходом для этого варианта использования?


person Jeff Talley    schedule 30.10.2020    source источник