zoukankan      html  css  js  c++  java
  • SpringBoot Actuator监控【转】

    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()
    View Code

    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: "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

    仅展示部分

    {
        "/webjars/**": {
            "bean": "resourceHandlerMapping"
        },
        "/**": {
            "bean": "resourceHandlerMapping"
        },
        "/**/favicon.ico": {
            "bean": "faviconHandlerMapping"
        },
        "{[/ticket],methods=[GET]}": {
            "bean": "requestMappingHandlerMapping",
            "method": "public com.example.simple.bean.Ticket com.example.starterdemo.controller.TicketController.getDefaultTicket(java.lang.String)"
        },
        "{[/error]}": {
            "bean": "requestMappingHandlerMapping",
            "method": "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)"
        },
        "{[/error],produces=[text/html]}": {
            "bean": "requestMappingHandlerMapping",
            "method": "public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)"
        },
        "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}": {
            "bean": "endpointHandlerMapping",
            "method": "public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()"
        },
        "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}": {
            "bean": "endpointHandlerMapping",
            "method": "public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()"
        }
       
    }

    resourceHandlerMapping 位于org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#resourceHandlerMapping   Bean声明中

    /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; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/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, 16 Jan 2016 14:48:24 GMT",
              "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; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/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, 16 Jan 2016 13:38:09 GMT",
              "status": "200"
          }
        }
      }
    }]

     

    修改监控属性

    server.port=8080
    
    #禁用监控端口的安全认证
    management.security.enabled=false
    
    #用于/info的监控访问
    info.app.id=appid1
    info.app.name=boboapp
    
    #还能使用git.properties 以git.开头的属性, 暂未研究 git.xxx.xxx=yyy
    
    #自定义/beans监控端点的名称,如果没有手动指明endpoints.beans.path则访问路径默认等于id同名路径
    endpoints.beans.id=mybeans
    #指定beans监控端点的访问路径成/my-beans, 所以不能通过/beans或/mybeans来访问了
    endpoints.beans.path=my-beans
    
    
    #关闭所有端点
    #endpoints.enabled=false
    
    #开启某个端点,它的优先级高于endpoints.enabled
    endpoints.beans.enabled=true
    
    #定制所有端点的访问根路径,最好是指定访问根路径,然后用security进行权限控制
    management.context-path=/endpoints
    #再起一个额外端口来使用监控管理功能,这时需要使用http://localhost:18080/endpoints/my-beans来访问端点,如果port=-1代表禁用管理端点
    management.port=18080
    
    
    #当在pom.xml中引入redis和actuator之后, 使用http://localhost:18080/endpoints/health,将能看到redis状态
    spring.redis.host=localhost

    在本地redis未启动时访问http://localhost:18080/endpoints/health

    {
    "status": "DOWN",
    "diskSpace": {
    "status": "UP",
    "total": 520721788928,
    "free": 254064136192,
    "threshold": 10485760
    },
    "redis": {
    "status": "DOWN",
    "error": "org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool"
    }
    }

     在本地redis启动时,访问 http://localhost:18080/endpoints/health 得到正常状态

    {
    "status": "UP",
    "diskSpace": {
    "status": "UP",
    "total": 520721788928,
    "free": 254064136192,
    "threshold": 10485760
    },
    "redis": {
    "status": "UP",
    "version": "3.2.100"
    }
    }

    自定义监控 

     默认指示器都在spring-boot-actuator-1.5.21.RELEASE.jar包下, 如RedisHealthIndicator

    要自定义指示器只需要添加一个HealthIndicator接口的实现类即可, 并返回Health对象

    package com.example.actuator.indicator;
    
    import org.springframework.boot.actuate.health.Health;
    import org.springframework.boot.actuate.health.HealthIndicator;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyAppHealthIndicator implements HealthIndicator {
    
        @Override
        public Health health() {
            int num = 1;
            if( 1 == num ){
                return Health.up().build();
            }else{
                return Health.down().withDetail("errorMessage","xx接口服务异常中").build();
            }
        }
    }

    此时访问 http://localhost:18080/endpoints/health 能看到myapp属性如下

    {
    "status": "UP",
    "myApp": {
    "status": "UP"
    },
    "diskSpace": {
    "status": "UP",
    "total": 520721788928,
    "free": 254064111616,
    "threshold": 10485760
    },
    "redis": {
    "status": "UP",
    "version": "3.2.100"
    }
    }

    springboot2差异

    在springboot2中

    根路径/变成了/actuator

    #actuator端口 
    management.server.port=9001
    #修改访问路径  2.0之前默认是/   2.0默认是 /actuator  可以通过这个属性值修改  
    management.endpoints.web.base-path=/monitor
    #开放所有页面节点  默认只开启了health、info两个节点
    management.endpoints.web.exposure.include=*
    #显示健康具体信息  默认不会显示详细信息  
    management.endpoint.health.show-details=always

    参考

    springboot(十九)使用actuator监控应用==>https://www.cnblogs.com/eer123/p/9220757.html   备份  $$$$$springboot(十九)使用actuator监控应用【纯转】==https://www.cnblogs.com/whatlonelytear/p/10971895.html
     

    我的git项目地址

    https://gitee.com/KingBoBo/springboot-08-actuator

  • 相关阅读:
    art-template学习(一)之特性和安装
    Velocity学习(四)之判断是否为空以及为什么要使用{}来明确标识变量
    Velocity学习(三)之 ${} 和$!{}、!${}区别
    sqlcode、sqlerrm
    批量删除存储过程
    cursor 与refcursor及sys_refcursor的区别 (转载)
    分享最近写的几个存储过程
    中国人寿数据库死锁处理
    合理计划 dictionary cache 大小
    表空间、数据文件对应关系
  • 原文地址:https://www.cnblogs.com/whatlonelytear/p/10894119.html
Copyright © 2011-2022 走看看