自动化的监控运维机制
自动化的监控运维机制的运行基础是不间断地收集各个微服务应用的各项指标情况,并根据这些基础指标信息来制定监控和预警规则,更进一步做到自动化的运维操作。
为了让运维系统能够获取各个微服务应用的相关指标以及实现一些常规操作控制, 需要开发一套专门用于植入各个微服务应用的接口供监控系统采集信息。
引入spring-boot-starter-actuator模块
引入spring-boot-starter-actuator模块能够自动为Spring Boot构建的应用提供一系列用于监控的端点。
Spring Cloud在实现各个微服务组件的时候, 进一步为该模块做了不少扩展
上图显示了一批端点定义, 这些端点由spring-boot-starter-actuator模块根据应用依赖和配置自动创建出来的监控和管理端点。通过这些端点,可以实时获取应用的各项监控指标。
权限的配置
先暂时关闭掉,在application.properties中添加如下:
management.security.enabled=false
spring-boot-starter-actuator端点分类
根据端点的作用, 可以将原生端点分为以下三大类。
应用配置类:获取应用程序中加载的应用配置、 环境变量、 自动化配置报告等。
度量指标类:获取应用程序运行过程中的度量指标, 比如内存信息、 线程池信息、 HTTP请求统计等。
操作控制类:提供了对应用的关闭等操作类功能。
应用配置类
自动化配置的报告、 Bean创建的报告、 环境属性的报告等。
应用配置类——/autoconfig
应用的自动化配置报告, 其中包括所有自动化配置的候选项。 同时还列出了每个候选项是否满足自动化配置的各个先决条件。
每个自动化配置候选项中都有一 系列的条件
应用配置类——/beans
/beans: 该端点用来获取应用上下文中创建的所有Bean。
bean: Bean 的名称。
scope: Bean 的作用域。
type: Bean 的 Java 类型。
resource: class 文件的具体路径。
dependencies: 依赖的 Bean 名称。
应用配置类——/configprops
/configprops: 该端点用来获取应用中配置的属性信息报告。
如要关闭该端点,可以设置endpoints.configprops.enabled为false。
应用配置类——/env
/env: 该端点用来获取应用所有可用的环境属性报告。 包括环境变量、JVM属性、应用的配置属性、命令行中的参数。
应用配置类——/mappings
/mappings: 该端点用来返回所有Spring MVC的控制器映射关系报告。
bean属性表示该映射关系的请求处理器, method属性表示了该映射关系的具体处理类和处理函数。
应用配置类——/info
/info: 该端点用来返回 一些应用自定义的信息。
需要以info为前缀。
度量指标类—— /metrics
/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接口中getNonHeapMemoryUsage方法获取的java.lang.management.MemoryUsage。
Threads.: 线程使用情况,包括线程数、守护线程数(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_marksweep.time。
这些数据均来自java.lang.management.GarbageCollectorMXBean。
链接 : Tomcat容器的会话使用情况。 包括最大会话链接
gauge.: HTTP请求的性能指标之一,它主要用来反映一个绝对数值。 比如上面示例中的"gauge.response.info": 51.0,, 它表示上一次info请求的延迟时间为51毫秒。
counter.: HTTP请求的性能指标之一,它主要作为计数器来使用,记录了增加量和减少量。 上述示例中的"counter.status.200.info": 1, 它代表了info请求返回200状态的次数为1。
star-star代表了对静态资源的访问:
"gauge.response.star-star.favicon.ico": 17.0,
"counter.status.200.star-star.favicon.ico": 1
/metrics/mem.free类似格式获取具体某个健康数据。
度量指标类 /metrics 自定义
注入org.springframework.boot.actuate.metrics.CounterService
、org.springframework.boot.actuate.metrics.GaugeService
,
访问几次该链接:
度量指标类 /health
/health: 用来获取应用的各类健康指标信息。
在spring-boot-starter-actuator模块中实现了一些常用资源的健康指标检测器。这些检测器都实现了HealthIndicator接口,会根据依赖关系的引入实现自动化装配
度量指标类 /health——自定义健康指标检测器
度量指标类 /dump
该端点用来暴露程序运行中的线程信息。它使用 java.lang.management.ThreadMXBean的dumpAllThreads方法来返回所有含有同步信息的活动线程详情。
度量指标类 /trace
该端点用来返回基本的HTTP跟踪信息。默认情况下,跟踪信息的存储采用org.springfrarework.boot.actuate.trace.InMemoryTraceRepository实现的内存方式, 始终保留最近的100条请求记录。
操作控制类
需要通过配置开启。
在原生端点中, 只提供了一个用来关闭应用的端点: /shutdown。
可以通过如下配置开启它:
endpoints.shutdown.enabled=true