springboot actuator 监控
springboot1.5和springboot2.0 的actuator在启动日志上的差异就很大了.
springboot1.5在启动时会打印很多/XXX路径信息表示已暴露这些监控接口了, 而2.0是不一样的,2.0关闭了默认打印, 只能在trace日志级别查看,需要在application.yml中配置如下才可以正常输出web映射路径
logging:
level:
web: trace
2019-05-31 13:33:52.522 INFO 30044 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2019-05-31 13:33:52.523 INFO 30044 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2019-05-31 13:33:52.548 INFO 30044 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2019-05-31 13:33:52.548 INFO 30044 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2019-05-31 13:33:52.579 INFO 30044 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2019-05-31 13:33:52.800 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2019-05-31 13:33:52.800 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2019-05-31 13:33:52.801 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest,java.security.Principal) 2019-05-31 13:33:52.801 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String) 2019-05-31 13:33:52.802 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2019-05-31 13:33:52.802 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String) 2019-05-31 13:33:52.802 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2019-05-31 13:33:52.803 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2019-05-31 13:33:52.804 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.boot.actuate.endpoint.mvc.AuditEventsMvcEndpoint.findByPrincipalAndAfterAndType(java.lang.String,java.util.Date,java.lang.String) 2019-05-31 13:33:52.806 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.get(java.lang.String) 2019-05-31 13:33:52.807 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+json || application/json],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.set(java.lang.String,java.util.Map<java.lang.String, java.lang.String>) 2019-05-31 13:33:52.807 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2019-05-31 13:33:52.807 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2019-05-31 13:33:52.807 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2019-05-31 13:33:52.808 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException 2019-05-31 13:33:52.808 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke() 2019-05-31 13:33:52.809 INFO 30044 --- [ main] o.s.b.a.e.mvc.EndpointHandlerMapping : Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
springboot中使用actuator
pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
引完后直接启动即可.
默认访问大部分接口时是需要权限的 , 只有访问http://localhost:8080/info不需要, 为了研究方便, 可以暂时在application.properties中关闭权限管理
management.security.enabled=false
主要暴露的功能
HTTP方法 | 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) found no beans"
}
]
},
"negativeMatches": {
"CacheStatisticsAutoConfiguration": [
{
"condition": "OnBeanCondition",
"message": "@ConditionalOnBean (types: org.springframework.cache.CacheManager; SearchStrategy: all) found no beans"
}
]
}
}
/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": "Signal Dispatcher",
"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": "Reference Handler",
"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) SE Runtime Environment",
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: "Oracle Corporation",
java.vendor.url: "http://java.oracle.com/",
guice.disable.misplaced.annotation.check: "true",
path.separator: ":",
java.vm.name: "Java HotSpot(TM) 64-Bit Server VM",
file.encoding.pkg: "sun.io",
user.country: "CN",
sun.java.launcher: "SUN_STANDARD",
sun.os.patch.level: "unknown",
PID: "763",
java.vm.specification.name: "Java Virtual Machine Specification",
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: "Oracle Corporation",
os.name: "Mac OS X",
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: "Java Platform API Specification",
java.class.version: "51.0",
sun.management.compiler: "HotSpot 64-Bit Tiered Compilers",
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.Launcher spring-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: "Oracle Corporation",
awt.toolkit: "sun.lwawt.macosx.LWCToolkit",
java.vm.info: "mixed mode",
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: "Oracle Corporation",
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: