`
234390216
  • 浏览: 10238497 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462879
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775972
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398730
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395156
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:680166
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:531135
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1184996
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:468780
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151484
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68337
社区版块
存档分类
最新评论

Spring Boot(21)——监控和管理接口

阅读更多

Spring Boot提供的监控和管理接口

Spring Boot提供了收集一些系统信息和对系统进行管理的功能,并会把它们以JMX或Http的方式发布出来,用户可以把它们集成到自己的监控系统。需要使用这些功能时需要添加如下依赖。

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

Endpoint

Spring Boot把一类监控和管理称为一个Endpoint。打开jconsole可以看到发布在org.springframework.boot.Endpoint下的Endpoint。也可以通过浏览器访问/actuator看到通过Http发布的Endpoint。默认情况下绝大部分的Endpoint都会通过JMX发布(shutdown默认不发布),但只有少部分会通过Http发布,所以你通过JMX可以看到发布了很多Endpoint,而通过Http默认将只能看到info和health。每一个Endpoint都对应有一个唯一的id,常见的Endpoint有如下这些:

  • beans :列出应用中所有的Spring bean
  • conditions :列出所有的@ConditionalXXX匹配或不匹配的原因
  • configprops :列出所有的@ConfigurationProperties信息
  • env :列出Spring Environment中的属性信息(application.properties中指定的属性都将加入Environment中)
  • health :列出应用的健康状况
  • httptrace :列出最近100笔Http请求跟踪信息,包括请求信息和响应信息
  • info :列出应用的一些信息
  • loggers :可以查看和配置logger信息
  • metrics :可以查看metrics信息
  • mappings :可以查看路径映射信息
  • scheduledtasks :查看Spring定时任务信息
  • shutdown :可以用来停止应用
  • threaddump :进行Thread dump
  • heapdump :进行heap dump

能够发布哪些将依赖于你的Classpath下拥有哪些Endpoint。关于上面这些Endpoint的介绍请参考https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/html/production-ready-endpoints.html。可以通过management.endpoint.endpointId.enabled指定某个Endpoint是否可用,比如如果需要禁用info Endpoint,则可以指定management.endpoint.info.enabled=false

前面提到几乎所有的Endpoint都会发布到JMX,少数会发布到HTTP,这是由Spring Boot的Endpoint的默认发布策略决定的,可以通过management.endpoints.enabled-by-default来改变默认发布策略,比如默认发布的都改为不发布,可以指定management.endpoints.enabled-by-default=false。但是如果你想把默认不发布的Endpoint通过management.endpoints.enabled-by-default=true指定为发布则是不可行的。基于这种需求得使用更细粒度的控制。Spring Boot分别为JMX和Http发布方式提供了management.endpoints.jmx.exposuremanagement.endpoints.web.exposure,分别包含了include和exclude属性,用于控制需要发布和不发布的Endpoint。假如不想通过JMX方式发布beans和mappings这两个Endpoint,则可以配置management.endpoints.jmx.exposure.exclude=beans,mappings,而如果希望通过Web方式发布beans和mappings这两个Endpoint,则可以配置management.endpoints.web.exposure.include=beans,mappings。如果需要发布所有或者禁用所有,则可以使用*表示。比如需要通过Web方式发布所有的Endpoint,则可以配置management.endpoints.web.exposure.include=*management.endpoints.jmx.exposure.include属性的默认值是*,而management.endpoints.web.exposure.include的默认值是info, health,而exclude默认都是空。所以当你指定了management.endpoints.jmx.exposure.exclude=beans,mappings时发布的Endpoint将只剩下beans和mappings。exclude和include是可以一起使用的,比如需要通过Web方式发布除beans和mappings以外的所有Endpoint时可以如下配置。

management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=beans,mappings

当同时指定了include和exclude时,exclude将拥有更高的优先级,即exclude中包含的内容一定会被排除。

Endpoint无参读缓存

Spring Boot会对所有Endpoint的无参数的读操作的结果进行缓存,可以通过cache.time-to-live指定某个Endpoint的无参读操作的缓存时间,比如下面的配置指定了beans这个Endpoint的无参读操作的缓存时间是10秒。

management.endpoint.beans.cache.time-to-live=10s

Web方式发布的Endpoint的路径

Web方式发布的Endpoint的默认的根路径是/actuator,每一个是Endpoint会以Endpoint对应的id发布为二级路径,比如beans这个Endpoint的映射路径是/actuator/beans。可以通过management.endpoints.web.base-path调整根路径,通过management.endpoints.web.path-mapping.xxx调整具体某个Endpoint的路径。比如下面的代码就指定了Endpoint的根路径是/actuator1,loggers Endpoint的路径是loggers1,所以访问loggers Endpoint的最终路径是/actuator1/loggers1

management.endpoints.web.base-path=/actuator1
management.endpoints.web.path-mapping.loggers=loggers1

跨域访问Endpoint Http接口

前面提到了,Spring Boot提供的用于监控的Endpoint会以JMX或Http的方式发布,Http方式发布的都是Rest接口,响应都是JSON,没有界面。如果你提供自己的监控平台,在自己的监控平台需要访问这些监控信息,可能就会遇到浏览器的跨域问题。可以通过management.endpoints.web.cors.allowed-origins指定允许哪个域进行跨域访问。比如如果我们的Spring Boot应用部署在http://localhost:8081,监控平台部署在http://localhost:8080,则以下配置则允许监控平台访问我们Spring Boot应用上发布的Endpoint。

management.endpoints.web.cors.allowed-origins=http://localhost:8080

如果想更精细的控制跨域时只允许某些请求方式,则可以通过management.endpoints.web.cors.allowed-methods进行指定。

management.endpoints.web.cors.allowed-methods=GET,POST

定义自己的Endpoint

如果你需要定义自己的Endpoint,可以定义一个标注了@org.springframework.boot.actuate.endpoint.annotation.Endpoint的Class,然后把它定义为Spring容器中的一个bean。需要通过@Endpoint的id属性指定一个唯一的id,可以通过@ReadOperation@WriteOperation@DeleteOperation标注方法,分别对应GET、POST和DELETE请求。Endpoint的请求路径还是Endpoint的根路径加上具体Endpoint的id,如果如下的Endpoint的默认请求路径将是/actuator/hello

@Component
@Endpoint(id="hello")
public class HelloEndpoint {

    @ReadOperation
    public String hello() {
        return "Hello World";
    }
    
}

使用@Endpoint标注的Endpoint是可以通过JMX和Http方式发布的,如果只期望通过Http发布,可以使用@org.springframework.boot.actuate.endpoint.web.annotation.WebEndpoint,如果只期望通过JMX发布,可以使用@org.springframework.boot.actuate.endpoint.jmx.annotation.JmxEndpoint

指定Endpoint发布的端口和绑定地址

可能为了安全需要,你不希望Endpoint随着你的应用一起发布,并可对外访问。可以为Endpoint发布指定一个另外的端口,或者绑定另外一个内网ip。比如下面指定了绑定的端口号是8089,地址是127.0.0.1,即对应的Endpoint只能在本机通过localhost或127.0.0.1访问。

management.server.port=8089
management.server.address=127.0.0.1

如果想禁用通过Http方式发布Endpoint,可以设置management.server.port=-1

HealthEndpoint

HealthEndpoint是用来监控应用的健康状态的。其监控是基于org.springframework.boot.actuate.health.HealthIndicator接口的,由其health()返回的org.springframework.boot.actuate.health.Health来反应某个组件的健康状况,Spring Boot已经提供了一些HealthIndicator实现。如果需要实现自己的HealthIndicator,只需要把它定义为一个bean。

@Component
public class HelloHealthIndicator implements HealthIndicator {

    @Override
    public Health health() {
        if (System.currentTimeMillis()%2==0) {
            return Health.down().withDetail("error", "详细信息,可以是一个对象").build();
        }
        return Health.up().build();
    }

}

在通过/actuator/health查看应用的健康状况时默认只会返回一个总的状态,不会展示详细的每个组件的健康状况。可以通过配置management.endpoint.health.show-details=always返回每个组件的健康状况。

InfoEndpoint

InfoEndpoint用来展示应用的一些信息,它会把容器中所有org.springframework.boot.actuate.info.InfoContributor类型的bean发布的信息收集起来。Spring Boot提供了一个org.springframework.boot.actuate.info.EnvironmentInfoContributor实现,它允许我们把需要展示的应用信息以info.*的形式定义在application.properties文件中。下面的代码中就定义了info信息,包含属性name和app,其中app又是一个对象,包含一个description。访问InfoEndpoint时你会得到这样的信息:{"name":"Spring Boot","app":{"description":"Hello World"}}

info.name=Spring Boot
info.app.description=Hello World

如果有需要也可以实现自己的InfoContributor,并把它定义为bean。下面是一个简单的示例,

@Component
public class HelloInfoContributor implements InfoContributor {

    @Override
    public void contribute(Builder builder) {
        Map<String, Object> detailMap = new HashMap<>();
        detailMap.put("map.key1", "value1");
        detailMap.put("map.key2", "value2");
        detailMap.put("map.key1.key1.1", "value");
        
        Map<String, Object> otherMap = new HashMap<>(detailMap);
        detailMap.put("map.key1.key1.2", otherMap);
        
        builder
            .withDetail("key1", "value1")
            .withDetail("key1.key1.1", "value2")
            .withDetails(detailMap);
    }

}

实现InfoContributor时,如果你需要展示的信息有多层结构,应当把它们包装为一个Map。上面的代码对应的获取info的结果如下:

{
    name: "Spring Boot",
    app: {
        description: "Hello World"
    },
    key1: "value1",
    key1.key1.1: "value2",
    map.key2: "value2",
    map.key1: "value1",
    map.key1.key1.2: {
        map.key2: "value2",
        map.key1: "value1",
        map.key1.key1.1: "value"
    },
    map.key1.key1.1: "value"
}

参考文档

https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/html/production-ready-endpoints.htmlhttps://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/html/production-ready-monitoring.html

(注:本文是基于Spring Boot 2.0.3所写)

0
0
分享到:
评论

相关推荐

    Spring Boot系列——日志配置.docx

    总的来说,Spring Boot的日志配置具有很高的灵活性,开发者可以根据实际需求进行调整,确保日志系统既满足监控需要,又能高效地管理和存储日志数据。正确配置日志系统对于保障服务的高可用性和问题的及时解决至关...

    Spring-Boot-Demo

    首先,我们要理解Spring Boot的核心理念——约定优于配置。在Spring Boot项目中,我们不再需要手动编写大量的XML配置文件,而是通过自动配置类和starter模块来简化配置。对于Mybatis的整合,我们可以引入`spring-...

    spring boot admin server

    这个工具专门用于监控和管理Spring Boot应用,提供了一种可视化的方式来查看应用程序的状态、日志、健康检查等信息,极大地便利了开发人员对微服务架构的运维。 Spring Boot Admin Server是Spring Boot Admin的核心...

    Spring Boot Aspect 切面 AOP 拦截器 Interceptor 监控control请求耗时

    在Spring Boot中,我们可以通过实现`HandlerInterceptor`接口并重写其三个方法——`preHandle()`, `postHandle()`, 和 `afterCompletion()` 来创建自定义的拦截器。 `preHandle()` 方法在目标处理方法调用之前执行...

    Spring-Boot-demo

    《Spring Boot实战——基于mickjoust-boot-demo-master的深度解析》 Spring Boot以其简洁、快速的特性在Java开发领域中备受青睐,它通过“约定优于配置”的原则,极大地简化了Spring应用的初始搭建以及开发过程。本...

    《Learning Spring Boot 2.0》高清版

    本书首先介绍了Spring Boot的基础知识,包括如何快速入门,理解Spring Boot的核心理念——约定优于配置,以及它如何通过起步依赖和自动配置简化项目构建。书中详细讲述了如何使用Spring Initializr创建一个新的...

    spring boot 深入浅出源码

    进一步探索,我们还可以研究Spring Boot的健康检查、Actuator监控、Spring Data JPA的懒加载机制、AOP面向切面编程的实现,以及Spring Cloud Config的远程配置加载等。 总之,通过深入学习Spring Boot的源码,...

    springboot176基于Spring Boot的装饰工程管理系统.zip

    七、Actuator——监控与健康检查 Spring Boot Actuator提供了一组端点,用于监控应用的健康状态、性能指标、环境信息等。通过启用actuator相关依赖,并配置相应的安全设置,我们可以实时查看应用的运行状况。 八、...

    Spring Boot参考指南.pdf

    - **依赖管理**:阐述Spring Boot如何管理和简化依赖关系。 - **Maven**:具体介绍如何使用Maven构建工具进行项目构建。 - **继承starter parent**:通过继承starter parent POM来简化依赖管理。 - **在不使用...

    基于Java+Spring Boot实现的样本库实验室管理系统LIMS源码

    5. 监控与日志:Spring Boot集成了Actuator,可以对应用性能进行监控,同时Spring Boot的日志管理方便了问题排查和系统优化。 四、LIMS系统核心模块 1. 样本管理:系统的核心功能,包括样本的登记、分类、编码、...

    dubbo——与spring boot整合1

    在本篇内容中,我们将探讨如何将Apache Dubbo与Spring Boot进行整合,创建一个服务提供者(Provider)和一个服务消费者(Consumer)。首先,我们来理解一下这两个关键组件的定义:服务提供者是指实现了特定接口并...

    生成一个简单的Spring Boot应用程序.pdf

    - **健康检查**:通过Spring Boot Actuator提供应用的监控和管理接口。 - **异常处理**:统一异常处理机制,提高应用的健壮性和用户体验。 通过以上内容的学习,开发者可以更好地理解如何使用Spring Boot快速搭建...

    Spring-boot web项目实例

    4. **命令行接口(CLI)**:Spring Boot提供了一个命令行工具,可以用来快速启动新的项目,并进行测试和运行。 5. **健康检查和Actuator**:Actuator提供了许多端点,用于监控和管理应用,如查看应用健康状态、内存...

    spring boot相关书籍

    5. **Actuator**:Spring Boot的监控和健康检查组件,用于生产环境中的应用管理和维护。 6. **测试**:涵盖单元测试、集成测试以及端到端测试的策略和工具。 7. **云部署**:如何将Spring Boot应用部署到Docker、...

    SpringBoot Admin——监控中心

    Spring Boot Admin用于管理和监控SpringBoot应用程序。 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul,Zookeeper)发现。

    1、Spring Boot干货系列:(一)优雅的入门篇.docx

    2. **起步依赖**:Spring Boot 引入了一种新的依赖管理方式——“起步依赖”(Starter Dependencies)。这种方式允许开发者仅需声明项目需要的功能模块,如 web、security 等,Spring Boot 就会自动添加所有必要的...

    从零开始学Spring Boot与Shiro教程

    Spring Boot和Shiro是Java开发领域中的两个重要框架,它们分别专注于简化应用程序的启动和管理以及提供安全控制。本文将深入探讨这两个框架的核心概念、功能和如何协同工作,旨在帮助初学者快速上手。 首先,Spring...

    Spring Boot教程系列(ImportNew ).rar

    此外,Spring Boot还支持健康检查、日志管理、Actuator监控等一系列工具,帮助开发者更好地管理和维护应用。Actuator提供的各种端点可以实时查看应用状态,监控性能指标。 学习Spring Boot,你需要理解其核心理念,...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    涵盖使用Spring Boot 进行Java EE 开发的绝大数应用场景,包含:Web 开发、数据访问、安全控制、批处理、异步消息、系统集成、开发与部署、应用监控、分布式系统开发等。 第一部分 点睛Spring 4.x 第1 章 Spring ...

    spring-boot-master-源码.zip

    你可以从中探索Spring Boot的自动配置机制,理解starter的工作方式,学习如何创建自定义starter,深入研究Spring Data与数据库的交互,以及如何利用Actuator进行监控和管理应用。通过阅读和分析源码,你将能够更深入...

Global site tag (gtag.js) - Google Analytics