Оригинал: Не завидуйте мандаринкам или бессмертным, просто долго корректируйте строку кода. 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, добро пожаловать в друзья для дальнейшего общения.