springboot-actuator应用后台监控

知识追寻者[同公众号]      2022-05-18     356

关键词:

一 前言

springboot 额外的特色是提供了后台应用监控,可以通过 HTTP 或者 JMX的方式管理监控应用,本文主讲HTTP方式;其主要的功能是监控应用的健康状态,查看环境变量等;

二 pom.xml

springboot 2.1.1,主要引入 actuator 依赖,web依赖用于测试;

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

三 默认开启端点

3.1 默认端点 health

直接编写主程序入口,启动;浏览器输入 http://localhost:8080/actuator/health;结果如下,状态是UP;

技术图片 翻翻源码heath状态码如下

public OrderedHealthAggregator() {
        this.setStatusOrder(Status.DOWN, Status.OUT_OF_SERVICE, Status.UP, Status.UNKNOWN);
    }
  1. DOWN 服务无法获得,状态码503;
  2. .OUT_OF_SERVICE 服务无法获得,状态码503;
  3. UP 获得服务,状态码200;
  4. UNKNOWN 获得未知服务,状态码200;

在 application.yml 中配置 healthy 信息 示例如下:

management:
  endpoint:
    health:
      show-details: always

打印详细信息: 技术图片 基本配置如下:

  1. never :默认,表示不显示详细信息;
  2. when-authorized:详细信息显示给 认证过的用户;使用 management.endpoint.health.roles 配置
  3. always: 显示详细信息给所有用户

3.2 默认端点 info

浏览器输入 http://localhost:8080/actuator/info; 展示空信息如下图:

技术图片 在application.yml 中 配置工程 info 信息 示例如下;

# 配置信息
info:
  actuator:
    name: springboot-actutor
    version: 1.0.0
    author: zszxz

展示结果如下: 技术图片

四 HTTP端点说明

端点 端点描述 默认值
auditevents 当前应用的审计事件 Yes
beans 显示spring IOC 容器加载的所有bean Yes
caches 显示可获得的缓存 Yes
conditions 显示自动配置通过condition判断匹配或者不匹配的配置信息 Yes
configprops 显示 通过 @ConfigurationProperties 配置的属性信息 Yes
env spring环境变量属性信息 Yes
flyway 显示flyway 配置数据库已经迁移的信息 Yes
health 显示应用的健康信息 Yes
httptrace 显示 HTTP 轨迹信息默认最新的100 HTTP request或response Yes
info 显示自定义的应用信息 Yes
integrationgraph 显示spring 整合 graph 信息 Yes
loggers 显示配置文件中日志修改信息 Yes
liquibase 显示 任意的 Liquibase 数据库已经迁移的信息 Yes
metrics 显示当前应用的指标 Yes
mappings 显示 @RequestMapping paths. 配置的路径信息 Yes
scheduledtasks 显示任务调度信息 Yes
sessions 删除或者恢复Spring Session会话,不支持web响应式编程 Yes
shutdown 关闭应用 No
threaddump 执行一个线程转储 Yes

五 配置开启端点

application.yml 中配置需要开启的端点,其中 * 表示开启所有端点,示例如下:

management:
  endpoints:
    web:
      exposure:
        # 使用通配符 * 表示匹配所有端点
        # 排除的端点
        exclude: caches
        # 包括的端点
        include: info,health,beans,env,shutdown,threaddump

5.1 threaddump示例

http://localhost:8080/actuator/threaddump ;用于返回线程快照,分析线程阻塞,死锁等,部分内容如下

{
	"threads": [{
		"threadName": "DestroyJavaVM",
		"threadId": 41,
		"blockedTime": -1,
		"blockedCount": 0,
		"waitedTime": -1,
		"waitedCount": 0,
		"lockName": null,
		"lockOwnerId": -1,
		"lockOwnerName": null,
		"inNative": false,
		"suspended": false,
		"threadState": "RUNNABLE",
		"stackTrace": [],
		"lockedMonitors": [],
		"lockedSynchronizers": [],
		"lockInfo": null
	}

5.2 beans示例

http://localhost:8080/actuator/beans ; 用于返回 spring 容器加载的所有bean,部分内容如下;

{
	"contexts": {
		"application": {
			"beans": {
				"endpointCachingOperationInvokerAdvisor": {
					"aliases": [],
					"scope": "singleton",
					"type": "org.springframework.boot.actuate.endpoint.invoker.cache.CachingOperationInvokerAdvisor",
					"resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.class]",
					"dependencies": ["environment"]
				},
				"defaultServletHandlerMapping": {
					"aliases": [],
					"scope": "singleton",
					"type": "org.springframework.web.servlet.HandlerMapping",
					"resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
					"dependencies": []
				}

5.3 关闭应用示例

普通情况下是没有开启这个配置,是比较危险的动作,会导致应用停止;修改application.yml配置如下

management:
  endpoints:
    web:
      exposure:
        # 使用通配符 * 表示匹配所有端点
        # 排除的端点
        exclude: caches
        # 包括的端点
        include: info,health,beans,env,shutdown
  endpoint:
    health:
      show-details: always
    # 开启关闭应用 需要post请求
    shutdown:
      enabled: true

访问地址 http://localhost:8080/actuator/shutdown; 注意仅支持使用POST请求,否则 会 405错误;

六 CORS 支持

application.yml 修改配置如下, allowed-origins 中允许跨域的ip地址; allowed-methods 配置 允许通过的请求,还有支持时间等;

management:
  endpoints:
    web:
      exposure:
        # 使用通配符 * 表示匹配所有端点
        # 排除的端点
        exclude: caches
        # 包括的端点
        include: info,health,beans,env,shutdown
      # 跨域处理
      cors:
        allowed-origins: http://localhost:8080/
        allowed-methods: post,delete,get,put
  endpoint:
    health:
      show-details: always
    # 开启关闭应用 需要post请求
    shutdown:
      enabled: true

七 修改默认路径

在 配置文件中添加 base-path , 会修改掉默认路径 actuator/endpoint;

management:
  endpoints:
    web:
      exposure:
        # 使用通配符 * 表示匹配所有端点
        # 排除的端点
        exclude: caches
        # 包括的端点
        include: info,health,beans,env,shutdown
      # 自定义配置监控路径
      base-path: /zszxz
      # 跨域处理
      cors:
        allowed-origins: http://localhost:8080/
        allowed-methods: post,delete,get,put
  endpoint:
    health:
      show-details: always
    # 开启关闭应用 需要post请求
    shutdown:
      enabled: true

示例url: http://localhost:8080/zszxz/info

结果如下

技术图片

八 其他配置说明

  1. 还可以引入 security 依赖 配置 账号密码,角色信息,达到访问控制,详细的可以参照官网;
  2. 还可以使用注解进行配置,自定义端点,详细参照官网;
  3. jmx支持,可以使用open jdk 自带的工具 jconsole 进行监控;

技术图片

在后台或应用未运行时监控 Bluecats 信标

】在后台或应用未运行时监控Bluecats信标【英文标题】:MonitoringBluecatsBeaconsinBackgroundorWhenappisnotrunning【发布时间】:2018-06-2809:40:37【问题描述】:我正在为我的应用程序使用bluecats信标。我想在用户应用程序未运行时检测用户是... 查看详情

后台模式下的 iOS 区域监控

...ode【发布时间】:2011-09-1919:47:51【问题描述】:我在我的应用程序中使用区域监控,我遇到了一个我找不到任何答案的问题。区域监控在后台模式下如何工作?根据位置感知PG:每次用户当前位置越过边界区域,系统生成适当的... 查看详情

iOS 后台状态监控通话状态

...oundstate【发布时间】:2016-06-0109:46:51【问题描述】:我的应用程序一直在录音,它应该在检测到电话时播放声音并停止录音。通话结束后,录音应该继续。我已经在前台使用CTCallCenter完成了这些任务。但是,当我的应用程序处于... 查看详情

iOS 延长信标监控的后台时间

...】:2020-01-1709:21:47【问题描述】:我正在开发一个iOSswift应用程序用于旅行,该应用程序的概念是在与用户验证旅行之后,而在旅行中,该应用程序一直在寻找蓝牙信标,我正在使用这个库来做到这一点@987654321@我看到这个库使... 查看详情

在后台监控期间接收来自信标区域检测的通知

...:2015-08-2509:05:52【问题描述】:我正在尝试创建一个基本应用程序,其中我创建了一个regionBootstrap用于对各种类型的信标进行后台监控,就像在参考应用程序中一样。但是,我不想在进入信标区域时将应用程序置于 查看详情

当应用程序后台运行时,Core Data 无法通过区域监控保存上下文

】当应用程序后台运行时,CoreData无法通过区域监控保存上下文【英文标题】:CoreDatamissestosavecontextwithregionmonitoringwhenappisbackgrounded【发布时间】:2015-02-2511:31:47【问题描述】:我在监控某些CLCircularRegion对象的应用程序中有一个... 查看详情

如何在 Android 的后台监控电池电量?

...布时间】:2013-09-2423:33:25【问题描述】:因此,对于我的应用,我想监控电池电量,即使我的应用已关闭,然后在电池电量低于某个百分比时发送通知。我知道如何创建像this这样的后台服务,但我不确定如何使用它来监控电池... 查看详情

后台 iBeacon 监控

...可以让更新更频繁?除此之外,还有其他方法可以让我的应用在后台保持活动状态,以便我获得 查看详情

iOS 日历在后台监控 - 它是如何完成的?

...问题描述】:我正在研究如何在活动即将开始时向我们的应用添加通知。其他只是日历的应用程序提供了此功能,但我的研究让我对它们如何实现这一点感到困惑。根据Apple文档:对于需要更多执行时间来执行的任务,您必须请... 查看详情

如何在奥利奥后台监控地理围栏?

...tps://developer.android.com/training/location/geofencing并且在Android当应用在后台时,如何获取地理围栏转换触发器?我也试过用BroadcastReceiver代替Inte 查看详情

iOS 在后台监控用户位置。

...问题描述】:我在这里阅读了许多帖子,这些帖子可以在应用程序处于后台时获取位置更新。我的问题是我可以在多大程度上在后台进行计算,我是否会像处理任何其他代码一样处理它,即只是一个方法调用等。非常感谢。【问... 查看详情

应用重启后监控 NSURLSession

】应用重启后监控NSURLSession【英文标题】:MonitoringNSURLSessionafterapprestart【发布时间】:2016-03-1110:40:45【问题描述】:我有一个用于监控下载任务的原型单视图应用程序。我正在尝试处理以下用例:当应用程序处于前台时,通过NS... 查看详情

iOS:从后台(信标)开始监控时,GPS 位置更新仅工作 10 秒

...】:2015-07-1617:26:57【问题描述】:我们正在尝试创建一个应用程序,当手机存在信标/iBeacon时,该应用程序会记录旅程的GPS日志。例如,如果您将信标放在汽车中, 查看详情

在后台连续运行一个广播接收器来监控网络状态。

...】:2013-03-0913:52:30【问题描述】:我正在编写一个android应用程序以在每分钟后在后台持续监控网络...我正在使用BroadcastReceiver...它在启动完成时启动...在Broadcas 查看详情

iOS 后台模式下的 GPS 监控

...通知用户(例如公交车站,不要错过),如果用户总是将应用程序置于前台模式,使用GPS位置检测就很容易了是否快到了。关键是如何在后台模式下实现。一种可能的解决方案是在后台模式下更新GPS,例如地图导航APP,但您知道... 查看详情

怎么查看手机app是不是在监测后台

打开手机设置,进入应用管理界面,查看后台运行的应用,若发现有未知的后台应用,则可能是被监控软件。检测系统更新:打开手机设置,进入系统更新界面,查看是否有未知的系统更新,若发现有,则可能是被监控软件。查... 查看详情

使用springbootactuator监控应用

微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题?在... 查看详情

服务器监控 iOS 应用

】服务器监控iOS应用【英文标题】:ServerMonitoringiOSApp【发布时间】:2013-09-0406:21:33【问题描述】:我是iOS编程的新手,我正在开发一个应用程序,它将每5分钟ping一次指定的服务器,并让用户知道服务器是否已启动。到目前为止... 查看详情