当前位置 : 首页 » 文章分类 :  开发  »  Spring-Boot-Actuator

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

注意
禁用的端点将从应用程序上下文中完全删除。如果您只想更改端点公开(对外暴露)的技术,请改为使用 includeexclude 属性

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


上一篇 Hexo博客(25)自建博客评论系统

下一篇 Swagger

阅读
评论
1.6k
阅读预计7分钟
创建日期 2019-05-06
修改日期 2020-11-17
类别

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论