`
dwj147258
  • 浏览: 194626 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Springboot监控之一:SpringBoot四大神器之Actuator

 
阅读更多

1.

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

如何使用

在pom文件中添加spring-boot-starter-actuator依赖

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

启动应用,日志里会打印actuator相关信息如下,

没有spring-boot-starter-actuator依赖之前如下,

Actuator功能点说明

Spring Boot Actuator的关键特性是在应用程序里提供众多Web端点,通过它们了解应用程序 运行时的内部状况。有了Actuator,你可以知道Bean在Spring应用程序上下文里是如何组装在一 起的,掌握应用程序可以获取的环境属性信息,获取运行时度量信息的快照…… Actuator提供了13个端点,具体如表7-1所示。 

/info端点显示应用程序的基本描述

/info,这个endpoint显示应用程序的基本描述,在之前的实践例子中我们看过它的返回信息,属性值来自appliaction.properties,同时也可以使用占位符获取pom.xml文件中的信息。任何以info.开头的属性都会在访问http://localhost:8080/info时显示。

例如/info:首先在application.properties文件中添加对应的属性值,符号@包围的属性值来自pom.xml文件中的元素节点。

info.build.artifact=@project.artifactId@
info.build.name=@project.name@
info.build.description=@project.description@
info.build.version=@project.version@

要获取配置文件中的节点值,需要在pom文件中进行一定的配置,首先在<build>节点里面添加:

<resources>
 <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
 </resource>
</resources>

然后在<plugins>节点里面增加对应的插件:

复制代码
<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-resources-plugin</artifactId>
 <version>2.6</version>
 <configuration>
    <delimiters>
       <delimiter>@</delimiter>
    </delimiters>
    <useDefaultDelimiters>false</useDefaultDelimiters>
 </configuration>
</plugin>
复制代码

然后运行应用程序,访问http://localhost:8080/info,可以看到下列信息

  • /env提供应用程序的环境变量,如果你在调试时想知道某个配置项在运行时的值,可以通过这个endpoint访问——访问http://localhost:8080/env,可以看到很多方面的配置,例如,class path resources—[tomcat.https.properties]、applicationConfig—[classpath:/application.properties]、commonsConfig、systemEnvironment、systemProperties等。
    这些变量的值由Environment实例中的PropertySource实例保存,根据这些属性值所在的层次,有可能在运行时已经做了值替换,跟配置文件中的不一样了。为了确认某个属性的具体值,例如book.count.rate属性,可以访问http://localhost:8080/env/book.counter.rate来查询,如果跟配置文件中的不一样,则可能是被系统变量或者命令行参数覆盖了。EnvironmentEndpoint类负责实现上述功能,有兴趣可以再看看它的源码;
  • /configprops提供不同配置对象,例如WebConfiguration.TomcatSslConnectionProperties,它与/env不同的地方在于它会表示出与配置项绑定的对象。尝试下访问http://localhost:8080/configprops,然后在网页中查询custom.tomcat.https,可以看到我们之前用于配置TomcatSslConnector对象的属性值(参见:让你的Spring Boot工程支持HTTP和HTTPS)。

    TomcatSslConnector对应的属性值
  • /autoconfig以web形式对外暴露AutoConfiguration 信息,这些信息的解释可以参考Spring Boot:定制自己的starter一文,这样我们就不需要通过“修改应用程序的日志级别和查看应用的启动信息”来查看应用的自动配置情况了。
  • /beans,这个endpoint列出所有由Spring Boot创建的bean。

    /beans显示所有Spring Boot创建的bean
  • /mappings,这个endpoint显示当前应用支持的URL映射,该映射关系由HandlerMapping类维护,通过这个endpoint可以查询某个URL的路由信息。

    /mappings查看URL映射

 

  • /health提供应用程序的健康状态,或者是某个核心模块的健康状态

/health端点所提供的所有信息都是由一个或多个健康指示器提供的。表7-3列出了Spring Boot 自带的健康指示器:

 

  • /metrics,这个endpoint查看应用程序的度量值

下表 /metrics端点报告的度量值和计数器,

/metrics端点会返回所有的可用度量值,但你也可能只对某个值感兴趣。要获取单个值,请 求时可以在URL后加上对应的键名。例如,要查看空闲内存大小,可以向/metrics/mem.free发一 个GET请求:

垃圾收集器

 

http

counter.status后的值是HTTP状态码,随后是所请 求的路径。举个例子,counter.status.200.metrics表明/metrics端点返回200(OK)状态码 的次数。 HTTP的度量信息在结构上也差不多,却在报告另一类信息。它们全部以gauge.response开头, 表明这是HTTP响应的度量信息。前缀后是对应的路径。度量值是以毫秒为单位的时间,反映了 近处理该路径请求的耗时。举个例子,代码清单7-6里的gauge.response.beans说明上一次 请求耗时169毫秒。 这里还有几个特殊的值需要注意。root路径指向的是根路径或/。

star-star代表了那些Spring 认为是静态资源的路径,包括图片、JavaScript和样式表,其中还包含了那些找不到的资源。这就 是为什么你经常会看到counter.status.404.star-star,这是返回了HTTP 404 (NOT FOUND) 状态的请求数。 

 

/trace追踪Web请求

/trace端点能报告所有Web请求的详细信息,包括请求方法、路径、时间戳以及请求和响应的 头信息。代码清单7-7是/trace输出的一个片段,其中包含了整个请求跟踪项。 

正如method和path属性所示,你可以看到这个跟踪项是一个针对/metrics的请求。 timestamp属性(以及响应中的Date头)告诉了你请求的处理时间。headers属性的内容是请 求和响应中所携带的头信息。 虽然代码清单7-7里只显示了一条跟踪项,但/trace端点实际能显示近100个请求的信息,包 含对/trace自己的请求。它在内存里维护了一个跟踪库。稍后在7.4.4节里,你会看到如何创建一 个自定义的跟踪库实现,以便将请求的跟踪持久化。 

/dump导出线程活动

/dump端点会生成当前线程活动的快照。完整的线程导出报告里会包含应用程序的每个线程。为了节省空间,下面只放了 一个线程的内容片段。如你所见,其中包含很多线程的特定信息,还有线程相关的阻塞和锁状态。 本例中,还有一个跟踪栈(stack trace),表明这是一个Tomcat容器线程。 

/shutdown端点关闭应用程序

为了关闭应用程序,你要往/shutdown发送一个POST请求。很显然,关闭运行中的应用程序是件危险的事情,因此这个端点默认是关闭的。要开启该端点,可以将endpoints.shutdown.enabled设置为true。举例来说,可以把如 下内容加入application.yml,借此开启/shutdown端点: 

endpoints.shutdown.enabled=true

GET请求提示不支持,如下图:

用fiddler模拟一个POST请求,可以成功关闭应用,如下图: 

 

上述各个endpoint是Spring Boot Actuator提供的接口和方法,接下来看看我们自己定制的HealthIndicator,我们只需要实现HealthIndicator接口,Spring Boot会收集该接口的实现,并加入到/health这个endpoint中。

在我们的例子中,我们为每个CrudRepository实例都创建了一个HealthIndicator实例,为此我们创建了一个CompositeHealthIndicator实例,由这个实例管理所有的DbHealthIndicator实例。作为一个composite,它会提供一个内部的层次关系,从而可以返回JSON格式的数据。

代码中的HealthAggregator实例的作用是:它维护一个map,告诉CompositeHealthIndicator如何决定所有HealthIndicator代表的整体的状态。例如,除了一个repository返回DOWN其他的都返回UP,这时候这个composite indicator作为一个整体应该返回UP还是DOWN,HealthAggregator实例的作用就在这里。

Spring Boot使用的默认的HealthAggregator实现是OrderedHealthAggregator,它的策略是手机所有的内部状态,然后选出在DOWN、OUT_OF_SERVICE、UP和UNKNOWN中间具有最低优先级的那个状态。这里使用策略设计模式,因此具体的状态判定策略可以改变和定制,例如我们可以创建定制的HealthAggregator

最后需要考虑下安全问题,通过这些endpoints暴露出很多应用的信息,当然,Spring Boot也提供了配置项,可以关闭指定的endpoint——在application.properties中配置<name>.enable=false

还可以通过设置management.port=-1关闭endpoint的HTTP访问接口,或者是设置其他的端口,供内部的admin服务访问;除了控制端口,还可以设置仅仅让本地访问,只需要设置management.address=127.0.0.1;通过设置management.context-path=/admin,可以设置指定的根路径。综合下,经过上述设置,在本地访问http://127.0.0.1/admin/health来访问健康状态。

可以在防火墙上屏蔽掉不是/admin/*的endpoints访问请求,更进一步,利用Spring Security可以配置验证信息,这样要访问当前应用的endpoints必须使用用户名和密码登陆。

二、连接Actuator的远程 shell

Actuator通过REST端点提供了不少非常有用的信息。另一个深入运行中应用程序内部的方式 是使用远程shell。Spring Boot集成了CRaSH,一种能嵌入任意Java应用程序的shell。Spring Boot 还扩展了CRaSH,添加了不少Spring Boot特有的命令,提供了与Actuator端点类似的功能。 要使用远程shell,只需加入远程shell的起步依赖即可。你需要这样的Gradle依赖:

compile("org.springframework.boot:spring-boot-starter-remote-shell") 

如果用Maven构建项目,你需要在pom.xml文件里添加如下依赖: 

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

添加了远程shell依赖后,就可以构建并运行应用程序了。在启动的时候,可以看到要写进日 志的一行密码。这行密码所在的行大概是这样的: 

Using default password for shell access: c59b152d-f7e2-41de-86f1-6c3e9e38229b

现在你可以通过SSH工具连接shell了,它监听的端口号是2000。如果你用的是Unix的ssh命 令,那么它看起来大概是这样的: 

账号密码分别是user/c59b152d-f7e2-41de-86f1-6c3e9e38229b

登陆成功后,显示如下:

远程shell提供了24个可以在运行应用程序上下文中执行的命令,其中大部分都是CRaSH自带 的。但Spring Boot也添加了一些。表7-4列出了这些Spring Boot特有的命令。 

 

例如用autoconfig生成了一个与Actuatord的/autoconfig端点类似的报告。

 

metrics

三、通过JMX监控应用程序 

除了REST端点和远程shell,Actuator还把它的端点以MBean的方式发布了出来,可以通过 JMX来查看和管理。使用JMX是管理Spring Boot应用程序的一个好方法,如果你已在用JMX管理 应用程序中的其他MBean,则尤其如此。 

Actuator的端点都发布在org.springframework.boot域下。比如,你想要查看应用程序的请求映 射关系,那么可以看一下图7-6(通过JConsole查看请求映射端点)。 

连接成功后,

如你所见,在requestMappingEndpoint下可以找到请求映射端点,位于org.spring- framework.boot域中的Endpoint下。Data属性中包含了该端点所要输出的JSON内容。 和其他MBean一样,端点MBean有可供调用的操作。大部分端点MBean只有访问操作,返回 其中的某个属性,但/shutdown端点提供了一些有趣(同时具有毁灭性)的操作,如下图所示,点击shutdown的方框,应用就停止了。

 

分享到:
评论

相关推荐

    springboot底层机制实现: zzw-springboot项目

    1. **自动配置**:SpringBoot的核心特性之一是自动配置。通过`@SpringBootApplication`注解,SpringBoot会扫描指定包及其子包下的所有类,寻找`@ConfigurationProperties`、`@Bean`等注解,自动创建并装配bean。zzw-...

    一个使用springboot actuator监控应用的实战项目例子

    一个使用springboot actuator监控应用的实战项目例子,对于想使用actuator来监控应用的初级程序员来说是一个不错的学习例子! 关注我!给我留言或者私信发邮箱,看到的话可以给你们发资源哦~

    SpringBoot2.0-Actuator监控参数说明

    SpringBoot2.0-Actuator是Spring Boot框架中的一个强大组件,主要负责提供应用程序的监控和管理能力。在Spring Boot应用中,Actuator通过暴露一系列的端点(endpoints),使得开发者可以方便地查看和操作应用程序的...

    SpringBoot开发:SpringBoot微服务架构设计与实践PDF

    1. SpringBoot简介与优势 Spring Boot是由Pivotal团队提供的全新框架,其设计目标是简化新Spring应用的初始搭建以及开发过程。...·监控和管理:SpringBoot提供了Actuator模块,可以监控和管理应用的健康状态、指标等。

    11springboot+actuator监控1

    总的来说,Spring Boot Actuator是Spring Boot的强大特性之一,它极大地简化了微服务的监控和管理,帮助开发者确保应用的稳定性和高可用性。通过深入学习和正确使用Actuator,我们可以更好地理解应用的运行情况,...

    SpringBoot四大神器之Actuator的使用小结

    SpringBoot四大神器之Actuator的使用小结 Actuator是Spring Boot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看、相关功能统计等。它可以帮助开发者快速了解应用程序的运行情况,进行问题...

    IDEA+SpringBoot+SpringSecurity:整个SpringSecurity的实现过程,可应用于线上产品

    同时,配合SpringBoot的Actuator模块,可以实时监控应用的安全状态,及时发现并解决潜在问题。 总之,SpringSecurity为SpringBoot应用提供了全面的安全防护,通过IDEA的集成开发环境,我们可以便捷地实现和配置...

    prometheus+springboot监控集成.docx

    Prometheus是一款流行的开源监控和报警工具,它与SpringBoot的集成可以帮助开发者实时监控应用程序的性能和健康状况。本文将详细介绍如何从零开始部署Prometheus服务器,监控SpringBoot工程,并利用Grafana展示监控...

    SpringBoot 监控管理模块actuator没有权限的问题解决方法

    SpringBoot 监控管理模块actuator 是一个功能强大且灵活的监控管理模块,它提供了一系列的监控和管理功能,例如自动配置报告、 Beans 列表、配置属性、环境变量、健康信息、metrics 等等。然而,在使用 SpringBoot ...

    配套linux监控+springboot服务监控json文件

    对于Springboot应用,可以使用Actuator模块暴露监控端点,让Prometheus能够抓取服务的运行状态信息。 Grafana则是一个流行的可视化平台,它允许用户从各种数据源(包括Prometheus)中拉取数据并创建自定义的仪表盘...

    zabbix5.0模板-spring boot actuator 1.x 监控模板

    zabbix5.0模板-spring boot actuator 1.x 监控模板

    springboot-restapi:初始提交

    4. **Actuator**:提供了丰富的监控和管理端点,便于生产环境中的应用运维。 **REST API** REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,强调状态转移,使数据...

    springboot-learn::rose:springboot通用框架集成示例,涉及多种网站监控,数据缓存,网络通信,持久层,权限管理,常用工具等

    基础框架:springboot 2.1.3.RELEASE 编辑工具:IDEA 2019.1 开发基础:JDK 1.8.0_191 依赖工具:apache-maven-3.6.0 数据库:MySQL 5.7 基础篇 名称 博文地址 原始地址 SpringBoot入门案例Hello World SpringBoot...

    使用SpringBoot Actuator监控应用示例

    SpringBoot Actuator是Spring Boot框架中的一个核心组件,专门用于应用程序的监控和管理。它提供了一组丰富的端点(endpoints),允许开发者深入了解应用程序的运行状态、性能指标、配置信息等,从而帮助优化和维护...

    springboot-apirest:springboot-示例

    标题 "springboot-apirest:springboot-示例" 暗示了这是一个关于使用Spring Boot构建RESTful API的项目。Spring Boot是Java生态系统中的一个流行框架,它简化了创建独立、生产级别的基于Spring的应用程序。RESTful ...

    SpringBoot.zip

    5. **健康检查和Actuator**:SpringBoot Actuator提供了各种端点来监控应用的健康状态、metrics、审计等,有利于微服务架构下的运维管理。 6. **零XML配置**:SpringBoot推崇“约定优于配置”,大量减少了XML配置...

    详解关于springboot-actuator监控的401无权限访问

    在本篇文章中,我们将详解关于Spring Boot Actuator监控的401无权限访问问题,该问题是Spring Boot开发中常见的错误之一。我们将通过实践演示如何解决该问题,并提供相应的配置参数和解决方案。 什么是Spring Boot ...

    springboot-buildingblocks:SpringBoot课程项目

    此外,SpringBoot对Actuator的支持,提供了一组端点来监控和管理应用的健康状况、环境信息、审计事件等,这对于微服务环境下的应用管理和监控至关重要。 再者,SpringBoot的配置文件`application.properties`或`...

Global site tag (gtag.js) - Google Analytics