springboot监控与管理

作者: gluawwa | 来源:发表于2018-08-19 21:53 被阅读34次

      当我们决定用spring boot作为微服务框架时,除了它强大的快速开发功能之外,还因为它在starter POM中提供了一个特殊依赖模块spring-boot-starter-actuator。引入该模块能够自动为spring boot构建的应用提供一系列监控的端点。

    初识actuator

      在现有的Spring boot应用中引入该模块非常简单,只需在pom依赖中加入spring-boot-starter-actuator的依赖即可,具体如下:

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

      增加依赖之后,重新启动应用。此时,我们可以在控制台看到如下输出:

    D6B5A290-ADA6-4FBC-ABE8-1B2683E7183B.png
      上图中显示了一批端点定义,这些端点并非我们在程序中创建,而是由spring-boot-starter-actuator模块根据应用依赖和配置自动创建出来的监控和管理端点。比如我们可以访问http://localhost:8080/actuator/health接口获取如下信息:
    {"status":"UP"}
    

      完成上述配置之后,需要加application.properties文件中加入如下配置,否则会出现下文中的端点404的情况。

    management.endpoints.web.exposure.include=*
    

    原生端点

      spring-boot-starter-actuator模块中有一些已经实现的原生端点,根据端点的作用,可以将端点分为以下三大类:
        应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与spring boot应用相关的配置信息。
        度量指标类:获取应用程序运行过程中用于监控的度量指标,比如内存信息、线程池信息、http请求统计等。
        操作控制:提供了对应用的关闭等操作类功能。

    应用配置类

      由于spring boot为了改善传统spring应用复杂的配置内容,采取了包扫描和自动化配置的机制来加载原本集中于xml文件的各项内容,这使得我们分析应用中资源和实例的各种关系变得困难,而这类端点可以帮助我们获得一系列spring应用配置的详细报告,比如自动化配置的报告、bean创建的报告、环境属性的报告等。
      /actuator/conditions:该端点用来获取应用的自动化配置报告,其中包括所有自动化配置的候选项目。同时还列出了没个候选项是否满足自动化配置的先决条件。
        positiveMatches中返回的是条件匹配成功的自动化配置
        negativeMatches中返回的是条件匹配不成功的自动化配置
      /actuator/conditions:该端点用来获取上下文中创建的所有bean。
      /actuator/configprops:该端点用来获取应用中配置的属性报告。从返回示例中,我们看到了该短信的配置信息,prefix属性代表属性的配置前缀,propertis代表各个属性的名称和值。如果我们要关闭该端点就可以使用management.health.diskspace.enabled=false来完成设置。

    {
        "diskSpaceHealthIndicatorProperties": {
            "prefix": "management.health.diskspace",
            "properties": {
                "path": "/Users/wenkunzhao/IdeaProjects/spring-cloud/.",
                "threshold": 10485760
            }
        }
          ...
    }
    

      /actuator/env:该端点用来获取应用所加载的配置信息。另外,为了配置的安全,对于一些类似密码的敏感信息,该端点会进行隐私保护,但我们要有让属性名中包含password、secret、key这些关键字,这样该端点在返回他们时会使用*来替代实际值。
      /actuator/mappings:该端点用来返回spring mvc控制器映射关系报告。
      /actuator/info:该端点用来返回应用自定义信息。默认情况下,该端点会返回空json。我们可以在application.properties文件中设置一些属性,比如下面:

    info.app.name="spring-boot"
    info.app.version="1.0.0"
    

      再访问/info端点,我们可以得到如下信息:

    {
        "app": {
            "name": "\"spring-boot\"",
            "version": "\"1.0.0\""
        }
    }
    

    度量指标类

      /actuator/metrics:该端点可以提供应用运行状态饿完整度量指标。我们可以通过/metrics/{name}接口更细粒度的获取度量信息,比如可以通过/metrics/mem.free来获取当前可用内存数量
      actuator/health:该端点可以获取应用的各类健康指标信息。在spring-boot-starter-actuator模块中自带实现了一些常用资源的检测器,这些检测器都通过HealthIndicator接口实现,并且会根据依赖关系的引入实现自动装配。如果我们需要实现自定义检测器,则需要实现HealthIndicator接口,并让spring管理。
      /actuator/threaddump:该端点可以获取程序运行中的线程信息。
      /actuator/httptrace:该端点用来返回基本的http跟踪信息,默认情况下,跟踪信息的存储采用org.springframework.boot.actuate.trace.InMemoryTraceRepository实现的内存方式,始终保留最近的100条请求记录。记录格式如下:

    {
        "traces": [{
            "principal": null,
            "request": {
                "headers": {
                    "accept": [
                        "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
                    ],
                    "accept-encoding": [
                        "gzip, deflate"
                    ],
                    "accept-language": [
                        "zh-cn"
                    ],
                    "connection": [
                        "keep-alive"
                    ],
                    "host": [
                        "localhost:8080"
                    ],
                    "upgrade-insecure-requests": [
                        "1"
                    ],
                    "user-agent": [
                        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15"
                    ]
                },
                "method": "GET",
                "remoteAddress": null,
                "uri": "http://localhost:8080//actuator/trace"
            },
            "response": {
                "headers": {},
                "status": 404
            },
            "session": null,
            "timeTaken": 1,
            "timestamp": "2018-08-19T13:36:53.131Z"
        }]
    }
    

    操作控制类

      在原生端点中,只提供了一个用来关闭应用的端点/shutdown(在后续引入Eureka后,会引入更多端点)。可通过如下配置开启它:

    #1.X
    #endpoint.shutdown.enabled=true
    #2.0
    management.endpoint.shutdown.enabled=true
    

      在配置了上述属性之后,只需要post访问该应用的shutdown端点即可关闭该应用,十分危险。所以真正在生产环境使用时,需要加入一定的保护机制,比如定制actuator的端点路径,整合spring security进行安全校验等。

    相关文章

      网友评论

        本文标题:springboot监控与管理

        本文链接:https://www.haomeiwen.com/subject/omhhiftx.html