SpringBoot第二十二篇:应用监控之Actuator

作者:追梦1819
原文:https://www.cnblogs.com/yanfei1819/p/11226397.html
版权声明:本文为博主原创文章,转载请附上博文链接!

引言

  很多文章都将 SpringBoot Actuator 的 Endpoint 翻译为 "端点"。不过我认为这这翻译失去了原有的意思。故本文中的 endpoint 依旧是 endpoint,不翻译为"端点"。

  通过引入 spring-boot-starter-actuator ,可以使用 SpringBoot 为我们提供的准生产环境下的应用监控和管理功能。我们可以通过 HTTP、JMX、SSH协议进行操作。自动得到审计、监控和指标操作。


步骤:

引入maven依赖;

通过 HTTP 方式访问监控端点;

可进行 shutdown(post提交,此端点默认关闭)。


原生endpoint

  SpringBoot 的 Actuator 有很多原生的端点,详细查看。Spring Boot 2.0 中的端点和之前的版本有较大不同,使用时需注意。启动时不是可以直接访问,需要先将其暴露出来。

本文中,我们讲述几个常用的端点。

health

主要用来检查应用的运行状态。如果应用有异常,同时给我们反馈异常原因。比如数据库连接异常,磁盘空间过小等异常。

info

自定义应用程序的配置信息。

例如,在配置文件中配置如下信息:

info.app.name=actuator info.app.versoin=1.0.0 info.app.data=2019-06-25 12:00:00 info.app.author=yanfei1819

启动项目,访问:8080/actuator/info,可以得到如下响应:

{"app":{"name":"actuator","versoin":"1.0.0","data":"2019-06-25 12:00:00","author":"yanfei1819"}}

beans

该 endpoint 展示了 bean 的别名、类型、是否单例、类的地址、依赖等信息。

conditions

Spring Boot 的自动配置功能非常便利,但有时候也意味着出问题比较难找出具体的原因。使用 conditions 可以在应用运行时查看代码了某个配置在什么条件下生效,或者某个自动配置为什么没有生效。

heapdump

展示Jvm 的堆文件 heapdump。

shutdown

远程关闭应用的端点,不过需要注意两点:

需要在配置文件中配置 management.endpoint.shutdown.enabled=true;

只支持 POST 请求。

mappings

程序中所有的 URI 路径,以及与控制器的关系。

threaddump

查看线程信息,例如线程名、线程ID、线程的状态、是否等待锁资源等。


使用

创建项目,引入 maven 依赖:

<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>

启动项目,控制台打印信息:

SpringBoot第二十二篇:应用监控之Actuator

可以看出此时只暴露了两个 endpoint。

访问 :8080/actuator ,可以看到两个端点是:

{ "_links": { "self": { "href": "http://localhost:8080/actuator", "templated": false }, "health": { "href": "http://localhost:8080/actuator/health", "templated": false }, "health-component": { "href": "http://localhost:8080/actuator/health/{component}", "templated": true }, "health-component-instance": { "href": "http://localhost:8080/actuator/health/{component}/{instance}", "templated": true }, "info": { "href": "http://localhost:8080/actuator/info", "templated": false } } }

如果我们需要访问所有的原生 endpoint,需要在配置文件中加入:management.endpoints.web.exposure.include=* 。

重新启动项目,控制台日志是:

SpringBoot第二十二篇:应用监控之Actuator

访问 :8080/actuator ,可以看到所有端点是:

{ "_links": { "self": { "href": "http://localhost:8080/actuator", "templated": false }, "auditevents": { "href": "http://localhost:8080/actuator/auditevents", "templated": false }, "beans": { "href": "http://localhost:8080/actuator/beans", "templated": false }, "caches-cache": { "href": "http://localhost:8080/actuator/caches/{cache}", "templated": true }, "caches": { "href": "http://localhost:8080/actuator/caches", "templated": false }, "health": { "href": "http://localhost:8080/actuator/health", "templated": false }, "health-component": { "href": "http://localhost:8080/actuator/health/{component}", "templated": true }, "health-component-instance": { "href": "http://localhost:8080/actuator/health/{component}/{instance}", "templated": true }, "conditions": { "href": "http://localhost:8080/actuator/conditions", "templated": false }, "configprops": { "href": "http://localhost:8080/actuator/configprops", "templated": false }, "env": { "href": "http://localhost:8080/actuator/env", "templated": false }, "env-toMatch": { "href": "http://localhost:8080/actuator/env/{toMatch}", "templated": true }, "info": { "href": "http://localhost:8080/actuator/info", "templated": false }, "loggers": { "href": "http://localhost:8080/actuator/loggers", "templated": false }, "loggers-name": { "href": "http://localhost:8080/actuator/loggers/{name}", "templated": true }, "heapdump": { "href": "http://localhost:8080/actuator/heapdump", "templated": false }, "threaddump": { "href": "http://localhost:8080/actuator/threaddump", "templated": false }, "metrics": { "href": "http://localhost:8080/actuator/metrics", "templated": false }, "metrics-requiredMetricName": { "href": "http://localhost:8080/actuator/metrics/{requiredMetricName}", "templated": true }, "scheduledtasks": { "href": "http://localhost:8080/actuator/scheduledtasks", "templated": false }, "httptrace": { "href": "http://localhost:8080/actuator/httptrace", "templated": false }, "mappings": { "href": "http://localhost:8080/actuator/mappings", "templated": false } } }

  读者可以逐个访问,查看对应的返回信息。

  当然,也可以通过配置 management.endpoints.web.exposure.exclude=info,trace 选择部分 endpoint 暴露。

  同时,Actuator 默认所有的监控点路径都在/actuator/*,当然如果有需要这个路径也支持定制。management.endpoints.web.base-path=http://www.likecs.com/manage。


自定义endpoint

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygjsx.html