SpringBoot1.x与监控(六)

由于2.x和1.x的监控不一样,此处先讲1.x

一 SpringBoot1.x监控

pom.xml

1         <dependency>
2             <groupId>org.springframework.boot</groupId>
3             <artifactId>spring-boot-starter-actuator</artifactId>
4         </dependency>

 

显示信息

10-15 15:57:11.548  INFO 11388 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-10-15 15:57:11.548  INFO 11388 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.29
2019-10-15 15:57:11.657  INFO 11388 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-10-15 15:57:11.657  INFO 11388 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1027 ms
2019-10-15 15:57:11.970  INFO 11388 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2019-10-15 15:57:11.970  INFO 11388 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'metricsFilter' to: [/*]
2019-10-15 15:57:11.970  INFO 11388 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2019-10-15 15:57:11.970  INFO 11388 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2019-10-15 15:57:11.970  INFO 11388 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2019-10-15 15:57:11.985  INFO 11388 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2019-10-15 15:57:11.985  INFO 11388 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'webRequestLoggingFilter' to: [/*]
2019-10-15 15:57:11.985  INFO 11388 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'applicationContextIdFilter' to: [/*]
2019-10-15 15:57:12.251  INFO 11388 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6b1274d2: startup date [Tue Oct 15 15:57:10 CST 2019]; root of context hierarchy
2019-10-15 15:57:12.298  INFO 11388 --- [           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-10-15 15:57:12.298  INFO 11388 --- [           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-10-15 15:57:12.329  INFO 11388 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2019-10-15 15:57:12.329  INFO 11388 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2019-10-15 15:57:12.360  INFO 11388 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2019-10-15 15:57:12.563  INFO 11388 --- [           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-10-15 15:57:12.574  INFO 11388 --- [           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-10-15 15:57:12.574  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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()
2019-10-15 15:57:12.575  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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-10-15 15:57:12.575  INFO 11388 --- [           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()
​

 

在配置文件application.properties中加入

management.security.enabled=false
info.app.id=hello
info.app=world #可以随意配置info开头的信息

 

下面进行各个节点测试

http://localhost:8080/health
{
  "status": "UP",
  "diskSpace": {
    "status": "UP",
    "total": 322541973504,
    "free": 218166931456,
    "threshold": 10485760
  }
}

 

http://localhost:8080/info
​
{"app":"world","app.id":"hello"}
http://localhost:8080/dump
​
{
    "threadName": "DestroyJavaVM",
    "threadId": 40,
    "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": "http-nio-8080-AsyncTimeout",
    "threadId": 38,
    "blockedTime": -1,
    "blockedCount": 0,
    "waitedTime": -1,
    "waitedCount": 653,
    "lockName": null,
    "lockOwnerId": -1,
    "lockOwnerName": null,
    "inNative": false,
    "suspended": false,
    "threadState": "TIMED_WAITING",
    "stackTrace": [
      {
        "methodName": "sleep",
        "fileName": "Thread.java",
        "lineNumber": -2,
        "className": "java.lang.Thread",
        "nativeMethod": true
      },
      {
        "methodName": "run",
        "fileName": "AbstractProtocol.java",
        "lineNumber": 1133,
        "className": "org.apache.coyote.AbstractProtocol$AsyncTimeout",
        "nativeMethod": false
      },
      {
        "methodName": "run",
        "fileName": "Thread.java",
        "lineNumber": 745,
        "className": "java.lang.Thread",
        "nativeMethod": false
      }
    ],
http://localhost:8080/env
​
{
  "profiles": [],
  "server.ports": {
    "local.server.port": 8080
  },
  "commandLineArgs": {
    "spring.output.ansi.enabled": "always"
  },
  "servletContextInitParams": {},
  "systemProperties": {
  .....
  }
http://localhost:8080/beans
​
 {
    "context": "application",
    "parent": null,
    "beans": [
      {
        "bean": "actuatorApplication",
        "aliases": [],
        "scope": "singleton",
        "type": "com.example.demo.ActuatorApplication$$EnhancerBySpringCGLIB$$90808ed2",
        "resource": "null",
        "dependencies": []
      },
      {
        "bean": "org.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory",
        "aliases": [],
        "scope": "singleton",
        "type": "org.springframework.core.type.classreading.CachingMetadataReaderFactory",
        "resource": "null",
        "dependencies": []
      },
      {
        "bean": "org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration",
        "aliases": [],
        "scope": "singleton",
        "type": "org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration$$EnhancerBySpringCGLIB$$15f9df49",
        "resource": "null",
        "dependencies": []
      },
http://localhost:8080/health
​
{
  "status": "UP",
  "diskSpace": {
    "status": "UP",
    "total": 322541973504,
    "free": 218146656256,
    "threshold": 10485760
  }
}
http://localhost:8080/metrics
​
{
  "mem": 277267,
  "mem.free": 168703,
  "processors": 4,
  "instance.uptime": 785901,
  "uptime": 789830,
  "systemload.average": -1,
  "heap.committed": 235520,
  "heap.init": 262144,
  "heap.used": 66816,
  "heap": 3702784,
  "nonheap.committed": 42816,
  "nonheap.init": 2496,
  "nonheap.used": 41748,
  "nonheap": 0,
  "threads.peak": 36,
  "threads.daemon": 26,
  "threads.totalStarted": 42,
  "threads": 28,
  "classes": 6055,
  "classes.loaded": 6055,
  "classes.unloaded": 0,
  "gc.ps_scavenge.count": 5,
  "gc.ps_scavenge.time": 49,
  "gc.ps_marksweep.count": 1,
  "gc.ps_marksweep.time": 38,
  "httpsessions.max": -1,
  "httpsessions.active": 0,
  "gauge.response.beans": 12,
  "gauge.response.env": 8,
  "gauge.response.dump": 58,
  "gauge.response.health": 24,
  "gauge.response.star-star.favicon.ico": 25,
  "counter.status.200.beans": 2,
  "counter.status.200.star-star.favicon.ico": 1,
  "counter.status.200.health": 1,
  "counter.status.200.dump": 1,
  "counter.status.200.env": 2
}

当加入git.properties

git.branch=master
git.commit.id=xjkd33s
git.commit.time=2017-12-12 12:12:56

 

http://localhost:8080/info
​
{
  "app": "world",
  "app.id": "hello",
  "git": {
    "commit": {
      "time": "2017-12-12 12:12:56",
      "id": "xjkd33s"
    },
    "branch": "master"
  }
}

 

检查健康监控的时候,测试如下

加入redis的依赖

      
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

 

配置(测试用,随便填的地址)

spring.redis.host=118.24.44.169
http://localhost:8080/health       ##会查出redis的信息
{
  "status": "DOWN",
  "diskSpace": {
    "status": "UP",
    "total": 322541973504,
    "free": 218147446784,
    "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"
  }
}

 

二 定制断点信息

  • 定制断点一般通过endpoints+端点名+属性名来设置。

    • 修改端口id(endpoints.beans.id=mybean)

      修改结果:http://localhost:8080/mybean 要这样才能登陆

    • 修改端口id(endpoints.beans.path=/bean)

      修改结果:http://localhost:8080/bean 要这样才能登陆

    • endpoints.beans.enabled=false

      修改结果:http://localhost:8080/bean 无法登陆

    • endpoints.enabled=false

      修改结果:所有的监控都无法登陆

    • endpoints.beans.enabled=true

    修改结果:http://localhost:8080/bean 只有这个能登陆

    • management.context-path=/manage

      修改结果:访问要加路径/manage

    • management.port=8181

      修改结果:访问的端口改成8181

三 自定义健康状态指示器

  • 编写一个指示器 实现 HealthIndicator 接口

  • 指示器的名字 xxxxHealthIndicator

  • 加入容器中

    package com.example.demo;
    ​
    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() {
    ​
            //自定义的检查方法
            //Health.up().build()代表健康
            return Health.down().withDetail("msg","服务异常").build();
        }
    }
    ​

     

    测试结果:

    http://localhost:8080/manage/health
    ​
    {
      "status": "DOWN",
      "myApp": {
        "status": "DOWN",
        "msg": "服务异常"
      },
      "diskSpace": {
        "status": "UP",
        "total": 322541973504,
        "free": 218143944704,
        "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"
      }
    }

     

 

posted @ 2019-10-15 16:56  天宇轩-王  阅读(533)  评论(0编辑  收藏  举报