Springboot actuator是一個追蹤各類springboot應用狀態的健康檢查機制,使用須要添加一個pomhtml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在啓動springboot中,咱們每每會看到這樣的一條日誌 Exposing 20 endpoint(s) beneath base path '/actuator'java
這個20是每個springboot應用程序的健康檢查點的個數,他是隨着你配置文件中的配置而不一樣的。web
因爲本人配置的Server信息以下redis
server:
port: 8001
servlet:
context-path: /api-u
因此當咱們訪問actuator Web信息的路徑以下spring
http://127.0.0.1:8001/api-u/actuatorbootstrap
這裏須要注意的是,若是咱們配置了oauth 2的資源訪問權限的時候,須要對該路徑放行api
@EnableResourceServer
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true,securedEnabled = true)
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable().exceptionHandling()
.authenticationEntryPoint(
(request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED))
.and().authorizeRequests().antMatchers(PermitAllUrl.permitAllUrl("/users-anon/**", "/sys/login","/actuator/**")).permitAll() //此處添加"/actuator/**"進行放行
.anyRequest().authenticated().and().httpBasic();
}
@Override
public void configure(ResourceServerSecurityConfigurer resource) throws Exception {
//這裏把自定義異常加進去
resource.authenticationEntryPoint(new AuthExceptionEntryPoint())
.accessDeniedHandler(new CustomAccessDeniedHandler());
}
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
}
在配置文件中作以下配置tomcat
management:
endpoint:
health:
show-details: always
此時咱們訪問http://127.0.0.1:8001/api-u/actuator的結果以下springboot
{
"_links"
: {
"self"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator"
,
"templated"
:
false
},
"health"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/health"
,
"templated"
:
false
},
"info"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/info"
,
"templated"
:
false
}
}
}
具體你們能夠參考這個官網說明 https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/中的session
https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#production-ready-endpoints-enabling-endpoints以及 https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/#_auto_configured_healthindicators
其中的http://127.0.0.1:8001/api-u/actuator/health就是咱們須要的健康檢查的具體信息
{
"status"
:
"DOWN"
,
"details"
: {
"rabbit"
: {
"status"
:
"DOWN"
,
"details"
: {
"error"
:
"org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)"
}
},
"diskSpace"
: {
"status"
:
"UP"
,
"details"
: {
"total"
:
499963174912
,
"free"
:
435209195520
,
"threshold"
:
10485760
}
},
"db"
: {
"status"
:
"UP"
,
"details"
: {
"database"
:
"MySQL"
,
"hello"
:
1
}
},
"refreshScope"
: {
"status"
:
"UP"
},
"discoveryComposite"
: {
"status"
:
"UP"
,
"details"
: {
"discoveryClient"
: {
"status"
:
"UP"
,
"details"
: {
"services"
: [
"register-center"
,
"user-center"
]
}
},
"eureka"
: {
"description"
:
"Remote status from Eureka server"
,
"status"
:
"UP"
,
"details"
: {
"applications"
: {
"REGISTER-CENTER"
:
1
,
"USER-CENTER"
:
1
}
}
}
}
},
"configServer"
: {
"status"
:
"UNKNOWN"
,
"details"
: {
"error"
:
"no property sources located"
}
},
"hystrix"
: {
"status"
:
"UP"
},
"redis"
: {
"status"
:
"UP"
,
"details"
: {
"version"
:
"3.2.12"
}
}
}
}
這裏爲該進程spring支持的各類服務的健康狀態,UP爲在線,DOWN爲下線狀態,UNKNOWN爲不知道。
除了http://127.0.0.1:8001/api-u/actuator/health以外還有一個http://127.0.0.1:8001/api-u/actuator/info
這是一個描述信息的說明,若是咱們在配置文件中作以下配置
info:
app-name: user
author: guanjian
email: 12345@xy.com
則能夠在http://127.0.0.1:8001/api-u/actuator/info的返回信息中看到
{
"app-name"
:
"user"
,
"author"
:
"guanjian"
,
"email"
:
"12345@xy.com"
}
可是咱們在以上配置中能夠看到的信息不多,須要激活全部的actuator端點,增長配置以下
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
此時再次訪問http://127.0.0.1:8001/api-u/actuator的結果以下
{
"_links"
: {
"self"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator"
,
"templated"
:
false
},
"archaius"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/archaius"
,
"templated"
:
false
},
"auditevents"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/auditevents"
,
"templated"
:
false
},
"beans"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/beans"
,
"templated"
:
false
},
"health"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/health"
,
"templated"
:
false
},
"conditions"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/conditions"
,
"templated"
:
false
},
"configprops"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/configprops"
,
"templated"
:
false
},
"env"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/env"
,
"templated"
:
false
},
"env-toMatch"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/env/{toMatch}"
,
"templated"
:
true
},
"info"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/info"
,
"templated"
:
false
},
"logfile"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/logfile"
,
"templated"
:
false
},
"loggers-name"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/loggers/{name}"
,
"templated"
:
true
},
"loggers"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/loggers"
,
"templated"
:
false
},
"heapdump"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/heapdump"
,
"templated"
:
false
},
"threaddump"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/threaddump"
,
"templated"
:
false
},
"metrics-requiredMetricName"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/metrics/{requiredMetricName}"
,
"templated"
:
true
},
"metrics"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/metrics"
,
"templated"
:
false
},
"scheduledtasks"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/scheduledtasks"
,
"templated"
:
false
},
"sessions-sessionId"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/sessions/{sessionId}"
,
"templated"
:
true
},
"sessions"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/sessions"
,
"templated"
:
false
},
"httptrace"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/httptrace"
,
"templated"
:
false
},
"mappings"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/mappings"
,
"templated"
:
false
},
"refresh"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/refresh"
,
"templated"
:
false
},
"features"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/features"
,
"templated"
:
false
},
"service-registry"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/service-registry"
,
"templated"
:
false
}
}
}
如今來挑幾個作一下說明 http://127.0.0.1:8001/api-u/actuator/configprops 查看全部的配置信息(固然密碼會隱藏) 片斷
"spring.cloud.config-org.springframework.cloud.bootstrap.config.PropertySourceBootstrapProperties"
: {
"prefix"
:
"spring.cloud.config"
,
"properties"
: {
"overrideSystemProperties"
:
true
,
"overrideNone"
:
false
,
"allowOverride"
:
true
}
},
"configClientProperties"
: {
"prefix"
:
"spring.cloud.config"
,
"properties"
: {
"headers"
: {},
"discovery"
: {
"enabled"
:
false
,
"serviceId"
:
"configserver"
},
"profile"
:
"default"
,
"name"
:
"user-center"
,
"uri"
:
"http://localhost:8888"
,
"enabled"
:
true
,
"failFast"
:
false
,
"username"
:
"user"
}
},
http://127.0.0.1:8001/api-u/actuator/metrics 查看某些指標的具體數值,好比JVM,tomcat等等
{
"names"
: [
"rabbitmq.acknowledged"
,
"rabbitmq.consumed"
,
"jvm.buffer.memory.used"
,
"jvm.memory.used"
,
"jvm.gc.memory.allocated"
,
"rabbitmq.connections"
,
"jvm.memory.committed"
,
"tomcat.global.request.max"
,
"tomcat.sessions.created"
,
"tomcat.sessions.expired"
,
"jvm.gc.max.data.size"
,
"logback.events"
,
"rabbitmq.published"
,
"system.cpu.count"
,
"jvm.memory.max"
,
"rabbitmq.rejected"
,
"jvm.buffer.total.capacity"
,
"jvm.buffer.count"
,
"process.files.max"
,
"jvm.threads.daemon"
,
"rabbitmq.channels"
,
"process.start.time"
,
"tomcat.global.error"
,
"tomcat.sessions.active.max"
,
"http.server.requests"
,
"tomcat.global.sent"
,
"jvm.gc.live.data.size"
,
"process.files.open"
,
"process.cpu.usage"
,
"tomcat.global.received"
,
"tomcat.servlet.request"
,
"jvm.gc.pause"
,
"process.uptime"
,
"tomcat.threads.config.max"
,
"system.load.average.1m"
,
"tomcat.cache.hit"
,
"tomcat.servlet.error"
,
"tomcat.threads.current"
,
"tomcat.servlet.request.max"
,
"tomcat.cache.access"
,
"tomcat.sessions.active.current"
,
"system.cpu.usage"
,
"jvm.threads.live"
,
"jvm.classes.loaded"
,
"jvm.classes.unloaded"
,
"tomcat.threads.busy"
,
"jvm.threads.peak"
,
"jvm.gc.memory.promoted"
,
"tomcat.sessions.rejected"
,
"tomcat.sessions.alive.max"
,
"tomcat.global.request"
]
}
比方說咱們要查看JVM的最大內存,訪問 http://127.0.0.1:8001/api-u/actuator/metrics/jvm.memory.max
{
"name"
:
"jvm.memory.max"
,
"measurements"
: [
{
"statistic"
:
"VALUE"
,
"value"
:
5.587337215E9
}
],
"availableTags"
: [
{
"tag"
:
"area"
,
"values"
: [
"heap"
,
"nonheap"
]
},
{
"tag"
:
"id"
,
"values"
: [
"Compressed Class Space"
,
"PS Survivor Space"
,
"PS Old Gen"
,
"Metaspace"
,
"PS Eden Space"
,
"Code Cache"
]
}
]
}
http://127.0.0.1:8001/api-u/actuator/metrics/jvm.memory.used JVM已經使用的內存
{
"name"
:
"jvm.memory.used"
,
"measurements"
: [
{
"statistic"
:
"VALUE"
,
"value"
:
9.31419992E8
}
],
"availableTags"
: [
{
"tag"
:
"area"
,
"values"
: [
"heap"
,
"nonheap"
]
},
{
"tag"
:
"id"
,
"values"
: [
"Compressed Class Space"
,
"PS Old Gen"
,
"PS Survivor Space"
,
"Metaspace"
,
"PS Eden Space"
,
"Code Cache"
]
}
]
}
http://127.0.0.1:8001/api-u/actuator/beans 查看spring中注入的全部bean
部分片斷
"spring.cloud.config-org.springframework.cloud.bootstrap.config.PropertySourceBootstrapProperties"
: {
"aliases"
: [],
"scope"
:
"singleton"
,
"type"
:
"org.springframework.cloud.bootstrap.config.PropertySourceBootstrapProperties"
,
"resource"
:
null
,
"dependencies"
: []
},
"propertySourcesPlaceholderConfigurer"
: {
"aliases"
: [],
"scope"
:
"singleton"
,
"type"
:
"org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
,
"resource"
:
"org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration"
,
"dependencies"
: []
}
若是咱們不想激活全部的端點,只激活部分端點,好比configprops,metrics,beans,health,info,配置以下
management:
endpoints:
web:
exposure:
include: "configprops,metrics,beans,health,info"
endpoint:
health:
show-details: always
訪問http://127.0.0.1:8001/api-u/actuator結果以下
{
"_links"
: {
"self"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator"
,
"templated"
:
false
},
"beans"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/beans"
,
"templated"
:
false
},
"health"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/health"
,
"templated"
:
false
},
"configprops"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/configprops"
,
"templated"
:
false
},
"info"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/info"
,
"templated"
:
false
},
"metrics-requiredMetricName"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/metrics/{requiredMetricName}"
,
"templated"
:
true
},
"metrics"
: {
"href"
:
"http://127.0.0.1:8001/api-u/actuator/metrics"
,
"templated"
:
false
}
}
}
個人博客即將同步至騰訊雲+社區,邀請你們一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=2ezsltbcry3oc