SpringBoot1.x与监控(六)
由于2.x和1.x的监控不一样,此处先讲1.x
一 SpringBoot1.x监控
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</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"
}
}
SpringBoot1.x与监控(六)的更多相关文章
- 朱晔的互联网架构实践心得S1E4:简单好用的监控六兄弟
朱晔的互联网架构实践心得S1E4:简单好用的监控六兄弟 [下载本文PDF进行阅读] 这里所说的六兄弟只指ELK套件(ElasticSearch+Logstash+Kibana)以及TIG套件(Tele ...
- 朱晔和你聊Spring系列S1E6:容易犯错的Spring AOP
阅读PDF版本 标题有点标题党了,这里说的容易犯错不是Spring AOP的错,是指使用的时候容易犯错.本文会以一些例子来展开讨论AOP的使用以及使用过程中容易出错的点. 几句话说清楚AOP 有关必要 ...
- 朱晔的互联网架构实践心得S1E1:Pilot
朱晔的互联网架构实践心得S1E1:Pilot 最近几年写博客确实写得少了,初出茅庐的时候什么都愿意去写,现在写一点东西之前会反复斟酌是否有价值.工作十几年了,做了N多个互联网系统,业务涉及教育.游戏. ...
- Kafka实战解惑
目录 一. kafka简介二. Kafka架构方案三. Kafka安装四. Kafka Client API 4.1 Producers API 4.2 Consumers API 4.3 消息高可靠 ...
- 朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招
朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招 概览 标题中的高并发架构设计是指设计一套比较合适的架构来应对请求.并发量很大的系统,使系统的稳定性.响应时间符合预期并且能在极端的情况下自 ...
- 深入剖析 RabbitMQ —— Spring 框架下实现 AMQP 高级消息队列协议
前言 消息队列在现今数据量超大,并发量超高的系统中是十分常用的.本文将会对现时最常用到的几款消息队列框架 ActiveMQ.RabbitMQ.Kafka 进行分析对比.详细介绍 RabbitMQ 在 ...
- 一文带你了解nginx基础
学习nginx,就要先了解什么是nginx,为什么使用nginx,最后才是了解怎么使用nginx nginx简介 nginx安装 一.Linux中安装nginx 二.Docker中安装nginx 三. ...
- SpringBoot入门及深入
一:SpringBoot简介 当前互联网后端开发中,JavaEE占据了主导地位.对JavaEE开发,首选框架是Spring框架.在传统的Spring开发中,需要使用大量的与业务无关的XML配置才能使S ...
- OC-引用计数器,内存管理,野指针
总结 全局断点 →-->+-->Add Exception Breakpoint 开启僵尸监听 打开Edit scheme -->Diagnostics-->Enable Zo ...
随机推荐
- Spring MVC-从零开始-第一个控制器(不考虑命名规范)
1.目录结构 (log4j.properties.mybatis-config.xml可忽略) 2.配置web.xml文件 <?xml version="1.0" encod ...
- Spring MVC-从零开始-EL(未完待续)
Spring MVC-从零开始-EL(未完待续)
- 如何免费使用GPU跑深度学习代码
从事深度学习的研究者都知道,深度学习代码需要设计海量的数据,需要很大很大很大(重要的事情说三遍)的计算量,以至于CPU算不过来,需要通过GPU帮忙,但这必不意味着CPU的性能没GPU强,CPU是那种综 ...
- java ThreadLocal使用
1.源码分析 此处以JDK1.8版本分析 1.1 set方法 /** * Sets the current thread's copy of this thread-local variable * ...
- 学习Python基础的整体概要
- 【maven的使用】1maven的概念与配置
maven是一个基于java平台的自动化构建工具.构建工具的发展由make->ant->maven->gradle其中gradle还在发展中,使用较少,学习难度比较大,所以目前占据主 ...
- Java后端工程师必备书单(从Java基础到分布式)
Java开发工程师一般负责后端开发,当然也有专门做Java Web的工程师,但是随着前后端的分离,越来越多的Java工程师需要往大后端方向发展. 今天我们就来介绍一下Java后端开发者的书单. 首先要 ...
- SQL server数据库系统部分常用的存储过程及说明
--SQL server数据库系统常用的存储过程 exec sp_databases --能看到所有具有权限的数据库名,大小和备注 exec sp_helpdb --数据库名,大小,管理员,创建时间状 ...
- Python flask构建微信小程序订餐系统☝☝☝
Python flask构建微信小程序订餐系统☝☝☝ 一.Flask MVC框架结构 1.1实际项目结构 1.2application.py 项目配置文件 Flask之flask-script模块使 ...
- Linux之常用命令I
一.Linux简介 1)Minix(只为教学,开源的)-->Linux(以前者为模板,添加了一些软件) 2)Linux分为内核版本和发行版本 区别:Linux内核版本就是核心版本,不用最新版本, ...