Spring-Boot-Actuator
Spring Boot Actuator 使用笔记
Actuator 是 Spring Boot 提供的对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息,例如自动化配置信息、创建的 Spring beans 以及一些环境属性等。
Spring Boot Actuator 2.2 官方文档
https://docs.spring.io/spring-boot/docs/2.2.0.RELEASE/reference/html/production-ready-features.html#production-ready
Spring Boot 2.0官方文档之 Actuator (官方文档的完全翻译,翻译的很好)
https://blog.csdn.net/alinyua/article/details/80009435
maven 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置
management.port=11111 #actuator暴露接口使用的端口,为了和api接口使用的端口进行分离
management.info.git.mode=full
management.health.diskspace.enabled=true
management.health.db.enabled=true
management.health.redis.enabled=true
management.health.consul.enabled=false
management.health.elasticsearch.enabled=false
management.health.jms.enabled=false
management.health.mail.enabled=false
management.health.mongo.enabled=false
management.health.rabbit.enabled=false
management.health.solr.enabled=false
# actuator暴露的health接口权限是由两个配置: management.security.enabled 和 endpoints.health.sensitive组合的结果进行返回的。当两个都是false时未认证访问才全部返回
# actuator的health接口是否需要安全保证
endpoints.health.sensitive=false
endpoints.trace.enabled=false
endpoints.jmx.enabled=false
endpoints.dump.enabled=false
management.endpoint.<id>.enabled
关闭/启用端点
默认情况下,除 shutdown
以外的所有端点均已启用
注意,这里仅仅是开启支持,并不是暴露为 Web 端点,端点必须暴露为 Web 端点才能被访问
要配置单个端点的启用,请使用 management.endpoint.<id>.enabled
属性。
以下示例启用 shutdown 端点:
management.endpoint.shutdown.enabled=true
management.endpoints.enabled-by-default
全局端口默认配置
如果想关闭所有端点,然后打开指定的端点,可以将 management.endpoints.enabled-by-default
设为 false,以下示例启用 health 端点并禁用所有其他端点:
management.endpoints.enabled-by-default=false
management.endpoint.health.enabled=true
注意
禁用的端点将从应用程序上下文中完全删除。如果您只想更改端点公开(对外暴露)的技术,请改为使用 include
和 exclude
属性
management.endpoints.web.exposure.include
暴露哪些端点
management.endpoints.jmx.exposure.exclude
不通过 jmx 暴露的端点management.endpoints.jmx.exposure.include
通过 jmx 暴露哪些端点, 默认值 *
management.endpoints.web.exposure.exclude
不通过 http 暴露的端点management.endpoints.web.exposure.include
通过 http 暴露的端点 ,默认值 info, health
exclude 属性优先于 include 属性。
这里的优先级是指同一端点ID,同时出现在 include 属性表和 exclude 属性表里,exclude 属性优先于 include 属性,即此端点没有暴露。
全部放开请使用 *
,或把需要开放的接口端点使用 ,
隔开,如:env,health
,
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.include=env,health
yaml 的配置 *
请加上 "
(引号,单引号或双引号都可以)
management.endpoints.web.exposure.include: '*'
management.endpoints.web.base-path
端点路径
默认情况下,端点通过使用端点的ID在 /actuator
路径下的HTTP上公开。例如,beans端点暴露在 /actuator/beans
下。
如果要将端点映射到其他路径,则可以使用 management.endpoints.web.path-mapping
属性。
另外,如果您想更改基本路径,则可以使用 management.endpoints.web.base-path
属性
以下示例将 /actuator/health
重新映射到 /healthcheck
:
management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.health=healthcheck
还可以引用 pom.xml 中的 properties 配置项
<properties>
<endpoint.url>/disqus/actuator</endpoint.url>
</properties>
例如
management.context-path=@endpoint.url@
management.security.enabled
不启用安全策略,即开放所有端点,在 Spring boot 2.0 中已弃用此配置项,使用 management.endpoints.web.exposure.include=*
配置类暴露所有端点
management.security.enabled=false
安全问题
actuator 暴露出的端口会泄漏很多服务信息,如果不加访问限制会有安全隐患。
解决:
1、若不需要 actuator 来做监控,直接在 pom.xml 去掉 actuator 即可
2、actuator 加认证
引入 spring-boot-starter-security 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
在 application.properties 中指定 actuator 的端口以及开启 security 功能,配置访问权限验证,这时再访问 actuator 功能时就会弹出登录窗口,需要输入账号密码验证后才允许访问。
management.port=8099
management.security.enabled=true
security.user.name=admin
security.user.password=admin
actuator 越权脱库示例
Springboot actuator 不可不注意的安全问题 - 可越权 - 可脱库
https://xie.infoq.cn/article/1b1969e8503ab63ced3473f5f
actuator 未授权访问漏洞
端点
/actuator 列出所有endpoints
http://localhost:8001/comments/actuator
http://localhost:8002/statistic/actuator
http://api.masikkk.com/comments/actuator
http://api.masikkk.com/statistic/actuator
/actuator/prometheus Prometheus监控
如果是 Spring web 监控,默认会启用 Prometheus 监控数据端点,供 Prometheus 刮取
http://localhost:8001/comments/actuator/prometheus
http://localhost:8002/statistic/actuator/prometheus
http://api.masikkk.com/comments/actuator/prometheus
http://api.masikkk.com/statistic/actuator/prometheus
/actuator/env 获取全部环境属性
/actuator/health 健康检查
/actuator/info 服务信息
/actuator/beans bean信息
/actuator/conditions 自动配置条件信息
/actuator/mappings URI和Controller映射关系
Spring Boot (十九):使用 Spring Boot Actuator 监控应用
http://www.ityouknow.com/springboot/2018/02/06/spring-boot-actuator.html
Spring Boot Actuator监控端点小结
http://blog.didispace.com/spring-boot-actuator-1/
Spring Boot Actuator 使用
https://www.jianshu.com/p/af9738634a21
spring boot报错 : Full authentication is required to access this resource
https://www.jianshu.com/p/d10e0cee4adb
actuator/metrics 运行指标
actuator/metrics 端点用来返回当前应用的各类重要度量指标,比如:内存信息、线程信息、垃圾回收信息、tomcat、数据库连接池等
查看SpringBoot内置Tomcat连接数
server.tomcat.mbeanregistry.enabled
设为 true:
server:
tomcat:
mbeanregistry:
enabled: true
http://localhost:8080/actuator/metrics 中能看到好多Tomcat指标
"tomcat.cache.access",
"tomcat.cache.hit",
"tomcat.connections.config.max",
"tomcat.connections.current",
"tomcat.connections.keepalive.current",
"tomcat.global.error",
"tomcat.global.received",
"tomcat.global.request",
"tomcat.global.request.max",
"tomcat.global.sent",
"tomcat.servlet.error",
"tomcat.servlet.request",
"tomcat.servlet.request.max",
"tomcat.sessions.active.current",
"tomcat.sessions.active.max",
"tomcat.sessions.alive.max",
"tomcat.sessions.created",
"tomcat.sessions.expired",
"tomcat.sessions.rejected",
"tomcat.threads.busy",
"tomcat.threads.config.max",
"tomcat.threads.current"
拼到 url 后面可直接查看指标内容
http://localhost:8080/actuator/metrics/tomcat.connections.current
{
"name":"tomcat.connections.current",
"description":null,
"baseUnit":"connections",
"measurements":[
{
"statistic":"VALUE",
"value":13
}
],
"availableTags":[
{
"tag":"name",
"values":[
"http-nio-8768"
]
}
]
}
Monitoring Springboot 2.0 Tomcat server Thread utilization
https://stackoverflow.com/questions/57572370/monitoring-springboot-2-0-tomcat-server-thread-utilization
下一篇 Swagger
页面信息
location:
protocol
: host
: hostname
: origin
: pathname
: href
: document:
referrer
: navigator:
platform
: userAgent
: