1. Actuator
actuator
是spring boot
项目中非常强大一个功能,有助于对应用程序进行监视和管理,通过 restful api
请求来监管、审计、收集应用的运行情况,针对微服务而言它是必不可少的一个环节。
endpoints
是actuator
的核心部分,它用来监视应用程序及交互,spring-boot-actuator
中已经内置了非常多的 endpoints(health、info、beans、httptrace、shutdown等等)
,同时也允许我们自己扩展自己的端点。
以下是一些非常有用的actuator endpoints列表:
Endpoint ID | Description |
---|---|
auditevents | 显示应用暴露的审计事件 (比如认证进入、订单失败) |
info | 显示应用的基本信息 |
health | 显示应用的健康状态 |
metrics | 显示应用多样的度量信息 |
loggers | 显示和修改配置的loggers |
logfile | 返回log file中的内容(如果logging.file或者logging.path被设置) |
httptrace | 显示HTTP足迹,最近100个HTTP request/repsponse |
env | 显示当前的环境特性 |
flyway | 显示数据库迁移路径的详细信息 |
liquidbase | 显示Liquibase 数据库迁移的纤细信息 |
shutdown | 让你逐步关闭应用 |
mappings | 显示所有的@RequestMapping路径 |
scheduledtasks | 显示应用中的调度任务 |
threaddump | 执行一个线程dump |
heapdump | 返回一个GZip压缩的JVM堆dump |
2. admin监控
应用程序在通过actuator暴露程序自身信息时,我们就可以通过外界监控服务来监控该应用程序。
最为人所知的监控方案是:Prometheus+Grafana ,prometheus强大的监控功能加上grafana丰富的仪表盘,绝对是大厂的首选方案。
但我这里要介绍的是spring boot admin,虽然和前者相比相形见绌,但核心功能基本都实现了。最关键的原因是,spring boot admin不管是服务端搭建,还是客户端使用,实在是太简单了,原生的spring boot支持,下面讲讲客户端接入方案。
1、eureka接入方案
eureka是注册中心,只要 admin 服务端注册在eureka上,原则上来说,它应该可以获取到所有注册到eureka的客户端程序的ip地址,主动去集成admin客户端。
的确是这样,在打开admin 的web页面后,能看到eureka上的所有服务都被集成进来。但基本都处于离线或失败状态,如果想要集成成功,还需要暴露actuator endpoints,并且引入spring-boot-admin-starter-client
依赖。
pom.xml
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
2.0.2.RELEASE
org.springframework.boot
spring-boot-starter-actuator
de.codecentric
spring-boot-admin-starter-client
2.1.0
application.properties
#eureka
eureka.instance.prefer-ip-address=true
eureka.client.service-url.defaultZone=http://ip:port/eureka
#actuator
management.endpoints.web.exposure.include=*
2、 非eureka接入方案
如果不依赖eureka注册中心,该如何集成spring boot admin的监控呢?每个admin客户端手动的指定admin服务端的地址。
pom.xml
org.springframework.boot
spring-boot-starter-actuator
de.codecentric
spring-boot-admin-starter-client
2.1.0
application.properties
#eureka
eureka.instance.prefer-ip-address=true
eureka.client.service-url.defaultZone=http://ip:port/eureka
#actuator
management.endpoints.web.exposure.include=*
#spring boot admin
spring.boot.admin.client.url=http://ip:port
3. 日志监控
spring boot admin的web 页面中有关于日志的模块,主要的作用有两个:
- Logfile日志文件:实时在线查看应用程序的日志文件。
- Loggers日志级别:动态设置应用程序,各个包路径的日志输出级别。
这两个功能的确很实用,我特地把这端从spring boot admin中单独拿出来。
正常来说,日志都输出在linux服务器上,开发人员不可能都有权限访问服务器里的文件。他们需要有只读权限
,便于他们查看服务器日志,ok!admin上的Logfile
模块就提供了这个功能。
线上系统的日志输出级别基本都是info
,但是线上遇到bug时,我们更希望日志级别是debug
,甚至更低,便于我们分析日志信息。但我们总不能为了看详细日志,手动改一下代码里的日志输出级别,然后重新部署吧。这是我们就可以使用admin的Loggers
功能,你可以设置程序中任何包路径的日志输出级别,修改完后立即动态生效。
开启Logfile
Loggers默认就实现了,不需要特别配置,主要是Logfile要麻烦一些:
- 应用程序的日志是输出成日志文件的。
- acuator搜集输出的日志文件信息。
如application.properties
#日志输出文件路径为./log/ (默认文件名 spring.log)
logging.path=./log
#搜集日志文件信息
management.endpint.logfile.external-file= ./log/spring.log