Spring Boot有四大神器,分别是auto-configuration、starters、cli、actuator,本文主要讲actuator。actuator是spring boot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看、相关功能统计等。

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) 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

{

{

[/metrics || /metrics.json], methods = [GET], produces = [application / json]

}: {

bean: "endpointHandlerMapping",

method: "public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()"

}, {

[/beans || /beans.json], methods = [GET], produces = [application / json]

}: {

bean: "endpointHandlerMapping",

method: "public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()"

}, {

[/health || /health.json], produces = [application / json]

}: {

bean: "endpointHandlerMapping",

method: "public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(java.security.Principal)"

}, {

[/info || /info.json], methods = [GET], produces = [application / json]

}: {

bean: "endpointHandlerMapping",

method: "public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()"

}, {

[/trace || /trace.json], methods = [GET], produces = [application / json]

}: {

bean: "endpointHandlerMapping",

method: "public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()"

}, {

[/autoconfig || /autoconfig.json], methods = [GET], produces = [application / json]

}: {

bean: "endpointHandlerMapping",

method: "public java.lang.Object org.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; 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"

}

}

}

}]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java.vm.info_SpringBoot四大神器之Actuator的使用小结相关推荐

  1. Springboot监控之一:SpringBoot四大神器之Actuator之3-springBoot的监控和管理--指标说明...

    Spring Boot包含很多其他的特性,它们可以帮你监控和管理发布到生产环境的应用.你可以选择使用HTTP端点,JMX或远程shell(SSH或Telnet)来管理和监控应用.审计(Auditing ...

  2. Spring Boot:四大神器之CLI

    文章目录 简介 优势 一.安装 Spring Boot CLI 二.测试 2.1 Spring Boot CLI 创建 Hello World 示例 2.2 @Grab 2.3 @ Controlle ...

  3. Spring Boot四大神器之Auto Configuration

    Spring Boot非常简单容易上手,它隐藏了很多内容而不需要你去关心.但对于一个好的开发人员也许希望知道Spring Boot自动配置背后到底发生了什么? Spring Boot并不属于一种新的技 ...

  4. appuim java 脚本_APP自动化测试神器之Appium-QQ登录脚本实战(java版)

    在前文中,我们已经完成了如下知识点的铺垫: 一.QQ登录脚本测试用例 下面我们就来着手实现QQ轻聊版本应用的登录业务脚本的开发和运行.打开android模拟器上的qq应用 点击首页上的登录按钮 在登录 ...

  5. Spring Boot四大神器之Starter

    1.概述 依赖管理是任何复杂项目的关键方面.手动完成这些操作并不理想; 你花在它上面的时间越多,你在项目的其他重要方面所花费的时间就越少. 构建Spring Boot启动器是为了解决这个问题.Star ...

  6. Spring Boot四大神器之CLI

    1.简介 Spring Boot CLI 为Spring Cloud 提供了Spring Boot 命令行功能.您可以编写groovy脚本来运行Spring Cloud 组件应用程序(例如@enabl ...

  7. 十三、机器学习四大神器之XGBoost、LightGBM、Catboost和NGBoost

    前言: XGBoost.LightGBM 和 Catboost 是三个基于 GBDT(Gradient Boosting Decision Tree)代表性的算法实现 GBDT 是机器学习中的一个非常 ...

  8. Java 面试/笔试题神整理 [Java web and android]

    Java 面试/笔试题神整理 一.Java web 相关基础知识 1.面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并 ...

  9. APP自动化测试神器之Appium-Python环境部署及脚本实战

    Appium is an open source test automation framework for use with native, hybrid and mobile web apps. ...

最新文章

  1. c语言 java高并发_Java高并发解决方式 2019.docx
  2. oracle几个状态,oracle启动的四个状态
  3. 实用算法实现-第6篇 线段树
  4. 如何使 子页面顶部栏 覆盖app.json中的顶部栏
  5. java实用教程——组件及事件处理——DocumentEvent事件
  6. CF573D-Bear and Cavalry【动态dp】
  7. linux树莓派 ssh密码,树莓派之SSH连接经验
  8. vulcan 编程_如何用Next代替流星— Vulcan Next Starter简介
  9. 年薪百万是社会认同,更是自身价值体现
  10. (转)javascript 从数组中删除指定值(不是指定位置)的元素
  11. 苏宁金融一站式API网关演进之路
  12. 批处理修改网关和dns服务器,[转载]使用批处理自动修改IP地址网关和DNS
  13. Ps的一些小知识,还有快捷键
  14. 云队友丨任正非内部演讲:星光不问赶路人
  15. Win10文件名排序
  16. “九型人格”-你的团队用了吗
  17. 谈个人网站发展及赚钱
  18. waf防火墙是什么?有什么作用
  19. 趣图:程序员的日常工作
  20. java多线程实现龟兔赛跑

热门文章

  1. 字母c在计算机硬盘,字母c
  2. github+jekyll 搭建博客最全教程(一次性完成)
  3. Galera Cluste(mysql主从复制)
  4. 《平凡的世界》-田晓霞和孙少平 读后感
  5. #SAS进阶-SAS宏介绍
  6. dz论坛防止非法请问admin.php,DZ论坛如何防止注册机发布垃圾信息
  7. 唱作俱佳 腾讯AI艾灵领唱中国新儿歌
  8. 数字化转型的主要工作
  9. Android 微信扫码登陆
  10. 量化投资_止盈止损在策略中的有效性(改编)