springboot监控与管理

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

初识actuator

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


            org.springframework.boot
            spring-boot-starter-actuator

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

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监控与管理)