SpringBoot actuator 应用监控。

 

 

前言 :

今天在阅读 《SpringCloud微服务实战》一书时看到了SpringBoot actuator相关知识,而且本身也本地调试实践。以为SpringBoot这一套监控仍是挺有意思的,这里记录下学习过程。java

 

:本文基于 springBootVersion = '1.5.10.RELEASE'

算法

一:初识actuator

actuator是SpringBoot的一个组件,组件名称为:spring-boot-starter-actuator, 引入方式以下:
application配置文件:spring

#actuator
management.security.enabled= false
endpoints.health.sensitive= false

maven引入:sql

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

或者gradle:数据库

compile('org.springframework.boot:spring-boot-starter-actuator')

 

配置完成以后,启动项目,能够看到:


启动的时候会加载actuator的全部原生端点,后面会对一些经常使用的节点作解释。apache

二,体验Actuator

spring-bbot-starter-actuator模块中已经实现了一些原生端点,根据端点的做用,能够将原生端点分为三大类:安全

  • 应用配置类:获取应用程序中加载的应用配置、环境变量、自动化配置报告等与Spring Boot应用密切相关的配置类信息。
  • 度量指标类:获取应用程序运行过程当中用于监控的度量指标,好比内存信息、线程池信息、HTTP请求统计等。
  • 操做控制类:提供了对应用的关闭等操做类功能。

下面就来详细测试这几种原生端点,以及看下他们的有用信息和强大的功能。

2.1 应用配置类服务器

 因为Spring Boot为了改善传统Spring引用繁杂的配置内容,采用了包扫描和自动化配置的机制来加载本来集中于XML文件中的各项内容。虽然这样的作法让咱们的代码变得很是简洁,可是整个应用的实例建立和依赖关系等信息都离散到了各个配置类的注解上,这使咱们分析整个应用中资源的实例的各类关系变得很是困难。而这类端点能够帮助咱们轻松获取一系列关于Spring 应用配置内容的详细报告,好比自动化配置的报告、Bean建立的报告、环境属性的报告等。session

 

  • /autoconfig:该端点用来获取应用的自动化配置报告,其中包括全部自动化配置的候选项。同时还列出每一个候选项是否知足自动化配置的各个先决条件。因此,该端点能够帮助咱们方便地找到一些自动化配置为何没有生效的缘由。该报告内容将自动化配置内容分为如下两部分:
    positiveMatchers:返回的是条件匹配成功的自动化配置。
    negativeMatches :
    返回的是条件匹配不成功的自动化配置。

    这里只是展现一部份内容,方便展现而省略了不少信息。
    {
        "positiveMatches": {
            "PageHelperAutoConfiguration": [
                {
                    "condition": "OnBeanCondition",
                    "message": "@ConditionalOnBean (types: org.apache.ibatis.session.SqlSessionFactory; SearchStrategy: all) found bean 'sqlSessionFactory'"
                }
            ]
        },
        "negativeMatches": {
            "EncryptionBootstrapConfiguration.RsaEncryptionConfiguration": {
                "notMatched": [
                    {
                        "condition": "EncryptionBootstrapConfiguration.KeyCondition",
                        "message": "Keystore nor key found in Environment"
                    }
                ],
                "matched": [
                    {
                        "condition": "OnClassCondition",
                        "message": "@ConditionalOnClass found required class 'org.springframework.security.rsa.crypto.RsaSecretEncryptor'; @ConditionalOnMissingClass did not find unwanted class"
                    }
                ]
            }
        }
    }

    当咱们发现有一些指望的配置没有生效时,咱们能够经过该端点来查看没有生效的具体缘由。架构

  • /beans:该端点用来获取应用上下文中建立的全部Bean。


    如上图所示,咱们能够看到每一个Bean中都包含了下面的这些信息:
    bean:Bean的名称
    scope:Bean的做用域
    type:Bean的Java类型
    resource:class文件的具体路径
    dependencies:以来的Bean名称

  • /configprops:该端点用来获取应用中配置的属性信息报告。prefix属性表明了属性的配置前缀,properties表明了各个属性的名称和值。
    因此,咱们能够经过该报告来看到各个属性的配置路径,好比咱们要关闭该端点,就能够经过使用endpoints.configprops.enabled=false来完成配置。

     

  • /env:该端点预/configprops不一样,它用来获取应用全部可用的环境属性报告。包括环境变量、JVM属性、应用的配置属性、命令行中的参数。从下面该端点返回的示例片断中,能够看到它不只返回了应用的配置属性,还返回了系统属性、环境变量等丰富的配置信息,其中还包括了应用尚未使用的配置,因此它能够帮助咱们方便地看到当前应用能够加载的配置信息,并配合@ConfigurationProperties注解将它们引入到咱们的应用程序中来进行使用。另外,为了配置属性的安全,对于一些相似密码等敏感信息,该端点都会进行隐私保护,可是咱们须要让属性中包含password、secret、key 这些关键词,这样该端点再返回它们的时候都会使用*来替代实际的属性值。

     

  • /mappings:该端点用来返回全部Spring MVC 的控制器映射关系报告。从下面的示例片断中,咱们能够看到该报告的信息与咱们在启用Spring MVC的Web应用时输出的日志信息相似,其中bean属性标识了该映射关系的请求处理器,method属性标识了该映射关系的具体处理类和处理函数。

2.2 度量指标类
上面咱们所介绍的应用配置端点类所提供的信息报告在应用启动的是否就已经基本肯定了其返回内容,能够说是一个静态报告。而度量指标类端点提供的报告内容则是动态变化的,这些端点提供了应用程序在运行过程当中一些快照信息,好比内存使用状况、HTTP请求统计、外部资源指标等。这些端点对于咱们构建微服务架构中的监控系统很是有帮助,因为Spring Boot 应用自身实现了这些端点,因此咱们能够很方便地利用它们来收集咱们想要的信息,以定制出各类自动化策略。下面,咱们就来看看这些强大的端点功能。

  • metrics:该端点用来返回当前应用的各种重要度量指标,好比内存信息、线程信息、垃圾回收信息等。

    从上面的示例中,咱们看到有以下这些重要的度量值:
    系统信息:包括处理器数量processors、运行时间uptime和instance.uptime、系统平均负载systemload.average。
    mem.*: 内存概要信息,包括分配给应用的总内存数量以及当前空闲的内存数量。这些信息来自java.lang.Runtime。
    heap.*: 堆内存使用状况。这些信息来自java.lang.management.MemoryMXBean接口中getHeapMemoryUsage方法获取的java.lang.management.MemoryUsage。
    nonheap.*: 非堆中内存使用状况。这些信息来自java.lang.management.MemoryMXBean接口中getNonHeamMemoryUsage方法获取的java.lang.management.MemoryUsage。
    thrads.*: 线程使用状况,包括线程数、首付线程数(daemon)、线程峰值(peak)等,这些数据均来自java.lang.management.ThreadMXBean。
    classes.*: 应用加载和卸载的类统计。这些数据均来自java.lang.management.ClassLoadingMXBean。
    gc.*: 垃圾收集器的相信信息。包括垃圾回收次数:gc.ps_scavenge.count,垃圾回收消耗时间:gc.ps_scavenge.time,标记-清除算法的次数:gc.ps_marksweep.count,标记清除算法耗时gc.ps_markweep.time
    httpsessions.*: Tomecat容器的会话使用状况。包括最大会话数:httpsession.max和获取会话数:httpsessions.active。该度量指标信息仅在引用嵌入式Tomcat做为容器时才提供。
    gauge.*: HTTP请求的性能指标之一,它主要用来反映一个绝对数值。
    counter.*: HTTP请求的性能指标之一,它主要用来计数器来使用,记录了增长量和减小量。

    /metrics端口能够提供应用运行状态的完整度量报告,这项功能很是实用,可是对于监控系统中各项监控功能,它们的监控内容、数据收集频率都有所不一样,若是每次都经过整年获取报告的方式来收集,略显粗暴。因此咱们能够经过?metrics/{name}接口来更细粒度地获取度量信息。好比咱们能够经过/metrics/mem.free来获取当前可用内存数量。

  • /health:该端点用来获取应用的各种健康指标信息。在spring-boot-starter-actuator模块中自带实现了一些经常使用资源的健康指标检测器。这些检测器都经过HealthIndicator接口实现,而且会根据依赖关系的引入实现自动化配置,好比下面列出的这些:
    检测器 功能
     DiskSpaceHealthIndicatior  低磁盘空间检测
     DataSOurceHealthIndicator    检测DataSource的链接是否可用
     MongoHealthIndicator  检测Mongo数据库是否可用
     RabbitHealthIndicator    检测Rabbit服务器是否可用
     RedisHealthIndicator    检测Redis服务器是否可用
     SolrHealthIndicator  检测Solr服务器是否可用

 

 




  • /dump:该端点用来暴露程序运行过程当中的线程信息。它使用java.lang.management.ThreadMXBean的dumpAllThreads方法来返回全部包含有同步信息的活动线程详情。
  • trace: 该端点用来返回基本的HTTP跟踪信息。默认状况下,跟踪信息的存储采用org.springframework.boot.actuate.trace.InMemoryTraceRepository实现的内存方式,始终保留最近的100条请求记录。

 

2.3 操做控制类

 在原生端点中,只提供了一个用来关闭应用的端点:/shutdown ,能够经过以下配置开启它:
 endpoints.shutdown.enabled=true

在配置了上述属性以后,只须要访问该应用的/shutdown 端点就能实现关闭该应用的远程操做。因为开放关闭应用的操做自己是一件很是危险的事,因此真正在线上使用的时候,须要对其加入必定的保护机制。好比定制actuator的端点路径、整合Spring Security进行安全校验等。

三:总结

恰好本身维护的项目在往spring cloud迁移,如今恰好能够利用业余时间来学习微服务相关的知识。spring-boot-actuator确实能够带来不少咱们想不到的收获,并且对于运维也是很是有好多。在这里感谢 《Spring Cloud 微服务实战》这本书,文章中不少内容是经过读书来学习到的,这里只是作个总结。若有纰漏还请你们多多指教。

相关文章
相关标签/搜索