SpringBoot四大神器之Actuator的使用小结
序
SpringBoot有四大神器,分别是auto-configuration、starters、cli、actuator,本文主要讲actuator。actuator是springboot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看、相关功能统计等。
spring-boot-starter-actuator模块的实现对于实施微服务的中小团队来说,可以有效地减少监控系统在采集应用指标时的开发量。当然,它也并不是万能的,有时候我们也需要对其做一些简单的扩展来帮助我们实现自身系统个性化的监控需求。下面,在本文中,我们将详解的介绍一些关于spring-boot-starter-actuator模块的内容,包括它的原生提供的端点以及一些常用的扩展和配置方式。
使用actuator
添加依赖
org.springframework.boot spring-boot-starter-actuator
主要暴露的功能
HTTP方法
路径
描述
鉴权
GET
/autoconfig
查看自动配置的使用情况
true
GET
/configprops
查看配置属性,包括默认配置
true
GET
/beans
查看bean及其关系列表
true
GET
/dump
打印线程栈
true
GET
/env
查看所有环境变量
true
GET
/env/{name}
查看具体变量值
true
GET
/health
查看应用健康指标
false
GET
/info
查看应用信息
false
GET
/mappings
查看所有url映射
true
GET
/metrics
查看应用基本指标
true
GET
/metrics/{name}
查看具体指标
true
POST
/shutdown
关闭应用
true
GET
/trace
查看基本追踪信息
true
/autoconfig
{ "positiveMatches":{ "AuditAutoConfiguration.AuditEventRepositoryConfiguration":[ { "condition":"OnBeanCondition", "message":"@ConditionalOnMissingBean(types:org.springframework.boot.actuate.audit.AuditEventRepository;SearchStrategy:all)foundnobeans" } ] }, "negativeMatches":{ "CacheStatisticsAutoConfiguration":[ { "condition":"OnBeanCondition", "message":"@ConditionalOnBean(types:org.springframework.cache.CacheManager;SearchStrategy:all)foundnobeans" } ] } }
/configprops
{ "management.health.status.CONFIGURATION_PROPERTIES":{ "prefix":"management.health.status", "properties":{ "order":null } }, "multipart.CONFIGURATION_PROPERTIES":{ "prefix":"multipart", "properties":{ "enabled":false, "maxRequestSize":"10Mb", "location":null, "fileSizeThreshold":"0", "maxFileSize":"1Mb" } }, "environmentEndpoint":{ "prefix":"endpoints.env", "properties":{ "id":"env", "enabled":true, "sensitive":true } } }
/beans
[ { "context":"application:8080", "parent":null, "beans":[ { "bean":"appMain", "scope":"singleton", "type":"com.xixicat.AppMain$$EnhancerBySpringCGLIB$$29382b14", "resource":"null", "dependencies":[] }, { "bean":"videoInfoMapper", "scope":"singleton", "type":"com.xixicat.dao.VideoInfoMapper", "resource":"file[/Users/xixicat/workspace/video-uber/target/classes/com/xixicat/dao/VideoInfoMapper.class]", "dependencies":[ "sqlSessionFactory" ] } ] } ]
/dump
[ { "threadName":"SignalDispatcher", "threadId":4, "blockedTime":-1, "blockedCount":0, "waitedTime":-1, "waitedCount":0, "lockName":null, "lockOwnerId":-1, "lockOwnerName":null, "inNative":false, "suspended":false, "threadState":"RUNNABLE", "stackTrace":[], "lockedMonitors":[], "lockedSynchronizers":[], "lockInfo":null }, { "threadName":"ReferenceHandler", "threadId":2, "blockedTime":-1, "blockedCount":217, "waitedTime":-1, "waitedCount":9, "lockName":"java.lang.ref.Reference$Lock@45de945", "lockOwnerId":-1, "lockOwnerName":null, "inNative":false, "suspended":false, "threadState":"WAITING", "stackTrace":[ { "methodName":"wait", "fileName":"Object.java", "lineNumber":-2, "className":"java.lang.Object", "nativeMethod":true }, { "methodName":"wait", "fileName":"Object.java", "lineNumber":503, "className":"java.lang.Object", "nativeMethod":false }, { "methodName":"run", "fileName":"Reference.java", "lineNumber":133, "className":"java.lang.ref.Reference$ReferenceHandler", "nativeMethod":false } ], "lockedMonitors":[], "lockedSynchronizers":[], "lockInfo":{ "className":"java.lang.ref.Reference$Lock", "identityHashCode":73263429 } } ]
/env
{ profiles:[], server.ports:{ local.server.port:8080 }, servletContextInitParams:{}, systemProperties:{ java.runtime.name:"Java(TM)SERuntimeEnvironment", sun.boot.library.path:"/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib", java.vm.version:"24.79-b02", gopherProxySet:"false", maven.multiModuleProjectDirectory:"/Users/xixicat/workspace/video-uber", java.vm.vendor:"OracleCorporation", java.vendor.url:"http://java.oracle.com/", guice.disable.misplaced.annotation.check:"true", path.separator:":", java.vm.name:"JavaHotSpot(TM)64-BitServerVM", file.encoding.pkg:"sun.io", user.country:"CN", sun.java.launcher:"SUN_STANDARD", sun.os.patch.level:"unknown", PID:"763", java.vm.specification.name:"JavaVirtualMachineSpecification", user.dir:"/Users/xixicat/workspace/video-uber", java.runtime.version:"1.7.0_79-b15", java.awt.graphicsenv:"sun.awt.CGraphicsEnvironment", java.endorsed.dirs:"/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/endorsed", os.arch:"x86_64", java.io.tmpdir:"/var/folders/tl/xkf4nr61033gd6lk5d3llz080000gn/T/", line.separator:"", java.vm.specification.vendor:"OracleCorporation", os.name:"MacOSX", classworlds.conf:"/Users/xixicat/devtool/maven-3.3.3/bin/m2.conf", sun.jnu.encoding:"UTF-8", spring.beaninfo.ignore:"true", java.library.path:"/Users/xixicat/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.", java.specification.name:"JavaPlatformAPISpecification", java.class.version:"51.0", sun.management.compiler:"HotSpot64-BitTieredCompilers", os.version:"10.10.5", user.home:"/Users/xixicat", user.timezone:"Asia/Shanghai", java.awt.printerjob:"sun.lwawt.macosx.CPrinterJob", file.encoding:"UTF-8", java.specification.version:"1.7", java.class.path:"/Users/xixicat/devtool/maven-3.3.3/boot/plexus-classworlds-2.5.2.jar", user.name:"xixicat", java.vm.specification.version:"1.7", sun.java.command:"org.codehaus.plexus.classworlds.launcher.Launcherspring-boot:run", java.home:"/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre", sun.arch.data.model:"64", user.language:"zh", java.specification.vendor:"OracleCorporation", awt.toolkit:"sun.lwawt.macosx.LWCToolkit", java.vm.info:"mixedmode", java.version:"1.7.0_79", java.ext.dirs:"/Users/xixicat/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java", sun.boot.class.path:"/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/sunrsasign.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/classes", java.awt.headless:"true", java.vendor:"OracleCorporation", maven.home:"/Users/xixicat/devtool/maven-3.3.3", file.separator:"/", LOG_EXCEPTION_CONVERSION_WORD:"%wEx", java.vendor.url.bug:"http://bugreport.sun.com/bugreport/", sun.io.unicode.encoding:"UnicodeBig", sun.cpu.endian:"little", sun.cpu.isalist:"" }, systemEnvironment:{ TERM:"xterm-256color", ZSH:"/Users/xixicat/.oh-my-zsh", GVM_BROKER_SERVICE:"http://release.gvm.io", GRIFFON_HOME:"/Users/xixicat/.gvm/griffon/current", JAVA_MAIN_CLASS_763:"org.codehaus.plexus.classworlds.launcher.Launcher", JAVA_HOME:"/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home", SHLVL:"1", MAVEN_CMD_LINE_ARGS:"spring-boot:run", __CF_USER_TEXT_ENCODING:"0x1F5:0x19:0x34", GROOVY_HOME:"/Users/xixicat/.gvm/groovy/current", XPC_FLAGS:"0x0", GVM_INIT:"true", JBAKE_HOME:"/Users/xixicat/.gvm/jbake/current", PWD:"/Users/xixicat/workspace/video-uber", GVM_DIR:"/Users/xixicat/.gvm", GVM_VERSION:"2.4.3", MAVEN_PROJECTBASEDIR:"/Users/xixicat/workspace/video-uber", LOGNAME:"xixicat", SSH_AUTH_SOCK:"/private/tmp/com.apple.launchd.93xr1duECQ/Listeners", SPRINGBOOT_HOME:"/Users/xixicat/.gvm/springboot/current", GAIDEN_HOME:"/Users/xixicat/.gvm/gaiden/current", LAZYBONES_HOME:"/Users/xixicat/.gvm/lazybones/current", OLDPWD:"/Users/xixicat/workspace/video-uber", SHELL:"/bin/zsh", JBOSSFORGE_HOME:"/Users/xixicat/.gvm/jbossforge/current", LC_CTYPE:"zh_CN.UTF-8", TMPDIR:"/var/folders/tl/xkf4nr61033gd6lk5d3llz080000gn/T/", GVM_SERVICE:"http://api.gvmtool.net", GVM_PLATFORM:"Darwin", CLASSPATH:".:/Users/xixicat/.m2/repository/co/paralleluniverse/quasar-core/0.7.2/quasar-core-0.7.2.jar", GLIDE_HOME:"/Users/xixicat/.gvm/glide/current", PATH:"/Users/xixicat/.gvm/vertx/current/bin:/Users/xixicat/.gvm/springboot/current/bin:/Users/xixicat/.gvm/lazybones/current/bin:/Users/xixicat/.gvm/jbossforge/current/bin:/Users/xixicat/.gvm/jbake/current/bin:/Users/xixicat/.gvm/groovyserv/current/bin:/Users/xixicat/.gvm/groovy/current/bin:/Users/xixicat/.gvm/griffon/current/bin:/Users/xixicat/.gvm/grails/current/bin:/Users/xixicat/.gvm/gradle/current/bin:/Users/xixicat/.gvm/glide/current/bin:/Users/xixicat/.gvm/gaiden/current/bin:/Users/xixicat/.gvm/crash/current/bin:/Users/xixicat/.gvm/asciidoctorj/current/bin:/Users/xixicat/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin:/Users/xixicat/devtool/maven-3.3.3/bin:/Users/xixicat/devtool/gradle-2.6/bin:/Users/xixicat/devtool/android-sdk/platform-tools", GRADLE_HOME:"/Users/xixicat/.gvm/gradle/current", GROOVYSERV_HOME:"/Users/xixicat/.gvm/groovyserv/current", GRAILS_HOME:"/Users/xixicat/.gvm/grails/current", USER:"xixicat", LESS:"-R", PAGER:"less", HOME:"/Users/xixicat", CRASH_HOME:"/Users/xixicat/.gvm/crash/current", XPC_SERVICE_NAME:"0", VERTX_HOME:"/Users/xixicat/.gvm/vertx/current", GVM_BROADCAST_SERVICE:"http://cast.gvm.io", Apple_PubSub_Socket_Render:"/private/tmp/com.apple.launchd.y6fNwP8Sk6/Render", LSCOLORS:"Gxfxcxdxbxegedabagacad", ASCIIDOCTORJ_HOME:"/Users/xixicat/.gvm/asciidoctorj/current" }, applicationConfig:[classpath:/application.properties]:{ pool.acquireIncrement:"1", pool.minPoolSize:"5", pool.initialPoolSize:"1", database.username:"root", pool.maxIdleTime:"60", database.url:"jdbc:mysql://127.0.0.1:3307/video_uber?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull", spring.jackson.dateFormat:"yyyy-MM-dd'T'HH:mm:ss", database.slave.username:"root", spring.jackson.serialization.write-dates-as-timestamps:"false", pool.idleTimeout:"30000", database.slave.url:"jdbc:mysql://127.0.0.1:3307/demo?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull", server.port:"8080", database.slave.password:"******", database.password:"******", database.driverClassName:"com.mysql.jdbc.Driver", pool.maxPoolSize:"50", database.dataSourceClassName:"com.mysql.jdbc.jdbc2.optional.MysqlDataSource" } }
/health
{ status:"UP", diskSpace:{ status:"UP", total:249779191808, free:193741590528, threshold:10485760 }, db:{ status:"UP", database:"MySQL", hello:1 } }
/info
需要自己在application.properties里头添加信息,比如
info: contact: email:xixicat@gmail.com phone:0755-82890987
然后请求就可以出来了
{ "contact":{ "phone":"0755-82890987", "email":"xixicat@gmail.com" } }
/mappings
{ { [/metrics||/metrics.json],methods=[GET],produces=[application/json] }:{ bean:"endpointHandlerMapping", method:"publicjava.lang.Objectorg.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()" },{ [/beans||/beans.json],methods=[GET],produces=[application/json] }:{ bean:"endpointHandlerMapping", method:"publicjava.lang.Objectorg.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()" },{ [/health||/health.json],produces=[application/json] }:{ bean:"endpointHandlerMapping", method:"publicjava.lang.Objectorg.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(java.security.Principal)" },{ [/info||/info.json],methods=[GET],produces=[application/json] }:{ bean:"endpointHandlerMapping", method:"publicjava.lang.Objectorg.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()" },{ [/trace||/trace.json],methods=[GET],produces=[application/json] }:{ bean:"endpointHandlerMapping", method:"publicjava.lang.Objectorg.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()" },{ [/autoconfig||/autoconfig.json],methods=[GET],produces=[application/json] }:{ bean:"endpointHandlerMapping", method:"publicjava.lang.Objectorg.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()" } }
/metrics
{ mem:499404, mem.free:257591, processors:8, instance.uptime:4284997, uptime:4294909, systemload.average:1.84521484375, heap.committed:437248, heap.init:262144, heap.used:179656, heap:3728384, nonheap.committed:62848, nonheap.init:24000, nonheap.used:62156, nonheap:133120, threads.peak:18, threads.daemon:6, threads.totalStarted:176, threads:16, classes:10294, classes.loaded:10294, classes.unloaded:0, gc.ps_scavenge.count:11, gc.ps_scavenge.time:405, gc.ps_marksweep.count:0, gc.ps_marksweep.time:0, datasource.primary.active:0, datasource.primary.usage:0, counter.status.200.autoconfig:1, counter.status.200.beans:1, counter.status.200.configprops:1, counter.status.200.dump:1, counter.status.200.env:1, counter.status.200.health:1, counter.status.200.info:1, counter.status.200.mappings:1, gauge.response.autoconfig:81, gauge.response.beans:15, gauge.response.configprops:105, gauge.response.dump:76, gauge.response.env:4, gauge.response.health:43, gauge.response.info:1, gauge.response.mappings:4 }
/shutdown
要真正生效,得配置文件开启
endpoints.shutdown.enabled:true
/trace
记录最近100个请求的信息
[{ "timestamp":1452955704922, "info":{ "method":"GET", "path":"/metrics", "headers":{ "request":{ "Accept-Encoding":"gzip,deflate,sdch", "Upgrade-Insecure-Requests":"1", "Accept-Language":"zh-CN,zh;q=0.8,en;q=0.6", "User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_10_5)AppleWebKit/537.36(KHTML,likeGecko)Chrome/47.0.2526.111Safari/537.36", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Connection":"keep-alive", "Host":"localhost:8080" }, "response":{ "Content-Type":"application/json;charset=UTF-8", "X-Application-Context":"application:8080", "Date":"Sat,16Jan201614:48:24GMT", "status":"200" } } } },{ "timestamp":1452951489549, "info":{ "method":"GET", "path":"/autoconfig", "headers":{ "request":{ "Accept-Encoding":"gzip,deflate,sdch", "Upgrade-Insecure-Requests":"1", "Accept-Language":"zh-CN,zh;q=0.8,en;q=0.6", "User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_10_5)AppleWebKit/537.36(KHTML,likeGecko)Chrome/47.0.2526.111Safari/537.36", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Connection":"keep-alive", "Host":"localhost:8080" }, "response":{ "Content-Type":"application/json;charset=UTF-8", "X-Application-Context":"application:8080", "Date":"Sat,16Jan201613:38:09GMT", "status":"200" } } } }]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。