扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Springboot中 actuator如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
公司主营业务:成都网站设计、网站建设、外贸网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出高淳免费做网站回馈大家。
Springboot actuator是一个追踪各种springboot应用状态的健康检查机制,使用需要添加一个pom
org.springframework.boot spring-boot-starter-actuator
在启动springboot中,我们往往会看到这样的一条日志 Exposing 20 endpoint(s) beneath base path '/actuator'
这个20是每一个springboot应用程序的健康检查点的个数,他是随着你配置文件中的配置而不同的。
由于本人配置的Server信息如下
server: port: 8001 servlet: context-path: /api-u
所以当我们访问actuator Web信息的路径如下
http://127.0.0.1:8001/api-u/actuator
这里需要注意的是,如果我们配置了oauth 2的资源访问权限的时候,需要对该路径放行
@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(); } }
在配置文件中做如下配置
management: 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
},
"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/中的
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
}
}
}
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流