Как проверка работоспособности SpringBoot работает с контейнером?

Spring Boot Java

Оригинал: Не завидуйте мандаринкам или бессмертным, просто долго корректируйте строку кода. Miss Sister Taste (идентификатор публичной учетной записи WeChat: xjjdog), добро пожаловать, пожалуйста, сохраните источник для перепечатки.

О важности мониторинга говорить больше не нужно, не тратьте больше времени на совещания, чтобы обсудить его необходимость, сталкиваясь с проблемами онлайн, вы больше не будете подозревать, что мониторинг — это конструкция, которая тратит деньги на разработку. Мониторинг заставляет людей распрощаться со статус-кво пожаротушения, поддерживаемым «догадками», и может оставить доказательства, подтверждающие наш последующий анализ.

В качестве основной цели мониторинга главным приоритетом становится живучесть сервиса, то есть его работоспособность. SpringBoot может включать проверки работоспособности с помощью простых параметров и может быть интегрирован с основными системами мониторинга.

xjjdog.cnБолее 200 оригинальных статей были подробно классифицированы, что делает чтение более беглым, добро пожаловать в коллекцию.

1. Мониторинг включен

В Spring компонент привода используется для мониторинга и других связанных операций. В помпон можно добавить следующий стартер:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Для Gradle добавьте следующее.

dependencies {
  compile("org.springframework.boot:spring-boot-starter-actuator")
}

доступ/actuator/health, вы можете получить статус работоспособности проекта.

{"status":"UP"}

В файле application.yml добавьте следующее:

management:
  endpoint:
    health:
      show-details: always

При повторном доступе к этому интерфейсу будет выведено подробное содержимое. Включая статус БД, статус диска и т. д. Можно видеть, что самый внешний статус на самом деле является набором внутренних состояний компонента.

{
    "status":"UP",
    "components":{
        "db":{
            "status":"UP",
            "details":{
                "database":"H2",
                "validationQuery":"isValid()"
            }
        },
        "diskSpace":{
            "status":"UP",
            "details":{
                "total":250685575168,
                "free":31373905920,
                "threshold":10485760,
                "exists":true
            }
        },
        "ping":{
            "status":"UP"
        }
    }
}

2. Пользовательский индикатор

Эти функцииIndicatorsдля достижения (HealthIndicator). Например следующее:

  • DataSourceHealthIndicator
  • DiskSpaceHealthIndicator
  • CouchbaseHealthIndicator
  • MongoHealthIndicator
  • RedisHealthIndicator
  • CassandraHealthIndicator

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

management:
  health:
    mongo:
      enabled: false

Поймите это, при создании некоторых компонентов вы можете обеспечить проверку работоспособности, которая идет с компонентом, таким образом: вам нужно только реализовать интерфейс HealthIndicator. Пример кода выглядит следующим образом:

@Component
@Slf4j
public class X implements HealthIndicator {
    @Override
    public Health health() {
        try {
            //检查组件状态异常信息
        } catch (Exception e) {
            log.warn("Failed to connect to: {}", URL);
            return Health.down()
                    .withDetail("error", e.getMessage())
                    .build();
        }
        return Health.up().build();
    }
}

3. Доступ к системе мониторинга

В большинстве случаев мы надеемся использовать профессиональные компоненты мониторинга для сбора данных мониторинга бизнеса. Это в SpringBoot, вы можете использоватьmicrometerреализовать.

Возьмем для примера самый популярный prometheus, добавим в файл pom следующий контент.

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

Конечно, нам также нужно настроить некоторый контент в yaml. Теперь это выглядит так:

management:
  endpoints:
    web:
      exposure:
        include: health,info,prometheus
  endpoint:
    health:
      show-details: always

В это время посетите/actuator/prometheus, вы можете получать данные мониторинга в формате prometheus.

Аналогично следующему:

jvm_memory_used_bytes{area="heap",id="PS Survivor Space",} 0.0
jvm_memory_used_bytes{area="heap",id="PS Old Gen",} 2.9444904E7
jvm_memory_used_bytes{area="heap",id="PS Eden Space",} 6.829E7
jvm_memory_used_bytes{area="nonheap",id="Metaspace",} 5.917196E7
jvm_memory_used_bytes{area="nonheap",id="Code Cache",} 1.0929088E7
jvm_memory_used_bytes{area="nonheap",id="Compressed Class Space",} 8420512.0

На целевой странице prometheus вы можете увидеть следующую информацию:

В конце концов, в Grafana она была более кокетливой.

Так что же он может контролировать? Давайте взглянем:

  • Основная информация о сервисных узлах, включая память, ЦП, сетевой ввод-вывод и т. д.
  • Информация о стеке JVM
  • Информация JVM GC, информация STW
  • Информация о пуле соединений HikariCP по умолчанию
  • Информация об интерфейсе HTTP-запроса (максимальное время, максимальное количество запросов в секунду)
  • Мониторинг контейнеров Tomcat
  • Мониторинг печати журнала регистрации (количество записей на каждом уровне)
  • ...разное

Видно, что только выставив такой интерфейс, можно иметь более полный контроль над компонентами в проекте.

4. Комплектация контейнером

Наконец, благодаря сервису SpringBoot он часто публикуется в некоторых контейнерах, таких как docker. В это время мы будем использоватьprobesКонфигурация (такая же концепция у kube). Зондирование означает обнаружение, которое используется для различения Жизнеспособности и Готовности.

Окончательная конфигурация выглядит следующим образом:

management:
  health:
    probes:
      enabled: true
  endpoints:
    web:
      exposure:
        include: health,info,prometheus
  endpoint:
    health:
      show-details: always

На этот раз мы получим две группы в интерфейсе браузера, как показано ниже:

Эти две ссылки: первая используется для определения необходимости перезапуска контейнера, вторая — для определения доступности службы, и если она доступна, она начнет принимать внешние запросы.

End

Для небольших приложений SpringBoot достаточно мониторинга, такого как SpringBootAdmin. Но если ваше предприятие развернуто централизованно, с множеством узлов и частыми изменениями, унифицированная платформа мониторинга и построения очень нужна.

Помимо Prometheus, SpringBoot Metrics также поддерживает следующие компоненты:

  • AppOptics
  • Atlas
  • Datadog
  • Dynatrace
  • Elastic
  • Ganglia
  • Graphite
  • Humio
  • Influx
  • JMX
  • KairosDB
  • New Relic
  • Prometheus
  • SignalFx
  • Simple (in-memory)
  • Stackdriver
  • StatsD
  • Wavefront

Вы знакомы с компонентами, есть ли они в наличии?

Об авторе:Мисс сестра вкус(xjjdog), публичная учетная запись, которая не позволяет программистам идти в обход. Сосредоточьтесь на инфраструктуре и Linux. Десять лет архитектуры, десятки миллиардов ежедневного трафика, обсуждение с вами мира высокой параллелизма, дающие вам другой вкус. Мой личный WeChat xjjdog0, добро пожаловать в друзья для дальнейшего общения.​