您的位置:首页 > 编程语言 > Java开发

springboot监控actuator使用手册

2017-07-17 17:00 956 查看

1. 引用起步

gradle

dependencies {
//设置程序监控
compile("org.springframework.boot:spring-boot-starter-actuator")
}


maven

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


2. 基本使用

2.1 获得Bean装配报告

http://localhost:8080/beans端点提供的Spring应用程序上下文Bean信息

{
"bean": "application",//Bean的ID
"dependencies": [ //当前Bean注入的Bean ID列表
"readingListRepository",
"amazonProperties"
],
"resource": "URL [jar:file:/../readinglist-0.0.1-SNAPSHOT.jar!",//.class文件的物理位置
"scope": "singleton",//Bean的作用域
"type": "readinglist.Application$$EnhancerBySpringCGLIB$$f363c202"//Java类型
}


出于安全考虑,默认不能访问,需要将安全选项关掉。

management.security.enabled=false


2.2 /env端点报告所有可用的属性

基本上,任何能给Spring Boot应用程序提供属性的属性源都会列在/env的结果里,同时会显示具体的属性。内容很多,不方便具体的查看。

springboot提供了单个属性值得查看。只需要在请求时在/env后加上属性名即可。举例来说,查看文件编码的配置:http://localhost:8080/env/file.encoding

{
"file.encoding": "UTF-8"
}


2.3 /mappings映射所有路径

在应用程序相对较小的时候,很容易搞清楚控制器都映射到了哪些端点上。如果Web界面的 控制器和请求处理方法数量多,那最好能有一个列表,罗列出应用程序发布的全部端点。

{[/User/Add],//路径
methods=[GET],//请求方式
produces=[application/json]}//返回Json
: {
"bean": "requestMappingHandlerMapping",
"method": "public java.lang.String com.maxrocky.sso.controller.user.UserController.index()"//方法名
}


2.4 /metrics端点提供运行时数据

举个例子,了解应用程序的内存情况 (可用或空闲)有助于决定给JVM分配多少内存。

{
"mem": 930065,
"mem.free": 328999,
"processors": 8,
"instance.uptime": 943842,
"uptime": 1002818,
"systemload.average": 2.3662109375,
"heap.committed": 847872,
"heap.init": 262144,
"heap.used": 518872,
"heap": 3728384,
"nonheap.committed": 83904,
"nonheap.init": 2496,
"nonheap.used": 82193,
"nonheap": 0,
"threads.peak": 32,
"threads.daemon": 26,
........
}


作用前缀
垃圾收集器gc.*
内存mem.*
heap.*
类加载器classes.*
系统processors、uptime instance.uptime、
线程池threads.*
数据源datasource.*
Tomcat会话httpsessions.*
HTTPcounter.status.* 、 gauge.response.*

2.5 /trace端点会记录下Web请求的细节

/trace端点能报告所有Web请求的详细信息,包括请求方法、路径、时间戳以及请求和响应的 头信息。

[
{
"timestamp": 1426378239775,
"info": {
"method": "GET",
"path": "/metrics",
"headers": {
"request": {
"accept": "*/*",
"host": "localhost:8080",
"user-agent": "curl/7.37.1"
},
"response": {
"X-Content-Type-Options": "nosniff",
"X-XSS-Protection": "1; mode=block",
"Cache-Control":
"no-cache, no-store, max-age=0, must-revalidate",
"Pragma": "no-cache",
"Expires": "0",
"X-Frame-Options": "DENY",
"X-Application-Context": "application",
"Content-Type": "application/json;charset=UTF-8",
"Transfer-Encoding": "chunked",
"Date": "Sun, 15 Mar 2015 00:10:39 GMT",
"status": "200"
} }
} }
]


2.6 /dump端点提供了应用程序线程的快照

{
"threadName": "container-0",
"threadId": 19,
"blockedTime": -1,
"blockedCount": 0,
"waitedTime": -1,
"waitedCount": 64,
"lockName": null,
"lockOwnerId": -1,
"lockOwnerName": null,
"inNative": false,
"suspended": false,
"threadState": "TIMED_WAITING",
"stackTrace": [
{
"className": "java.lang.Thread",
"fileName": "Thread.java",
"lineNumber": -2,
"methodName": "sleep",
"nativeMethod": true
}, {
} ],
"lockedMonitors": [],
"lockedSynchronizers": [],
"lockInfo": null
},
... ]


2.7 /health监控应用程序健康情况

{"status":"UP"}


/health端点输出的某些信息可能涉及内容,因此对未经授权的请求只能提供简单的健康状 态。

但是我们已经将安全策略关闭了,所以可以看到更多的信息

{
"status": "UP",
"diskSpace": {
"status": "UP",
"total": 249769230336,
"free": 179990880256,
"threshold": 10485760
},
"db": {
"status": "UP",
"ssoDataSource": {
"status": "UP",
"database": "MySQL",
"hello": 1
},
"configurationDataSource": {
"status": "UP",
"database": "MySQL",
"hello": 1
}
}
}


2.8 /shutdown关闭应用程序(post请求)

post,post,post

很显然,关闭运行中的应用程序是件危险的事情,因此这个端点默认是关闭的。如果没有显 式地开启这个功能,那么POST请求的结果是这样的:

{"message":"This endpoint is disabled"}


要开启该端点,可以将
endpoints.shutdown.enabled
设置为true。

# application.properties,远程关闭程序
endpoints.shutdown.enabled=true


2.9 /info端点展示应用信息

默认只是一个空的json,你可以通过配置带有info前缀的属性向/info端点

的响应添加内容。

例如,你希望在响应中添加联系邮箱。

可以在application.properties里设置名为 info.contactEmail的属性:

info.contactEmail=kingboyworld@163.com


现在再访问/info端点,就能得到如下响应:

{
"contactEmail":"support@myreadinglist.com"
}


2.10 更改原有的映射路径

例如,shutdown端口比较敏感,可以更改为localhost:8080/mykill等其他路径。(实际使用中一般用security来进行安全控制)。

只需要在配置文件中增加一行:

endpoints.shutdown.id=mykill


2.11 启用和禁用端点

启用/禁用:

endpoints.metrics.enabled=true/false


只启用某一个

#先关全部
endpoints.enabled=false
#再打开一个
endpoints.metrics.enabled=true


至于如何创建自定义的端点,用的人应该不多。需要的话可以看springboot实战的第七章,写的很详细。

一般来说,要对这些端点进行保护,总不能谁都可以查看或者操作这些信息,这就要结合spring security来进行保护了,后续再写了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  actuator springboot 监控