这篇文章介绍了如何在dockerized环境中的设置Spring Boot Admin 1.X。在测试和生产环境中,我们需要手动检查每个Spring Boot应用程序,这些很有挑战性。
为什么选择Spring Boot Admin?我们可以一次性监控所有节点中的所有Spring Boot应用程序。我们可以监控什么呢?很多,比如系统和应用指标等等。在本文中,我们将重点关注 日志 , 运行状况检查 和 java melody 信息 。
先来看看如何设置?
让我们使用 Spring Initializr 创建一个新的Spring Boot应用程序。选择1Spring Boot Admin(服务器)的依赖关系。在 pom.xml中 的Maven文件看起来像如下:
<dependencies> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-server</artifactId> </dependency> </dependencies>
在主应用程序java类中添加@EnableAdminServer注释启用管理服务:
@SpringBootApplication @EnableAdminServer public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
我们还通过application.properties指定了一个具体的端口:
server.port=8181
在现有的Spring Boot应用程序中,您只需要添加Spring Boot Admin客户端依赖项spring-boot-admin-starter-client:并在应用程序属性中指定Spring Boot Admin Server URL:
spring.application.name=hive-gw
spring.boot.admin.url=http://localhost:8181
Spring Boot Admin将使用相同的 spring.application.name 对所有Spring Boot应用程序进行 分组 。
如果我们在同一网络上运行docker容器(docker -net = XXX),则无需执行任何操作。如果不是在同一网段需要将Spring Boot Admin客户端配置为使用IP而不是主机名。这可以通过配置完成:
spring.application.name=hive-gw
spring.boot.admin.url=http://localhost:8181
spring.boot.admin.client.prefer-ip=true
Actuator提供了有关应用程序的一些基本信息。我们可以通过添加 InfoContributor 配置类来扩展“ /info” 提供的信息:
@Component public class MyCustomConfiguration implements InfoContributor { @Override public void contribute(Builder builder) { builder.withDetail("key", "value"); } }
现在,来自我们应用程序的 / info 端点的响应将是:
{ key: "value" }
所有Spring Boot应用程序都应该有Maven插件 spring-boot-maven-plugin 。感谢这个插件,我们可以公开构建info:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <id>build-info</id> <goals> <goal>build-info</goal> </goals> </execution> </executions> </plugin>
最后, / info 端点将如下:
{ build: { version: "0.0.1-SNAPSHOT", artifact: "demo", name: "demo", group: "com.example", time: 1533796864000 }, key: "value" }
当我们在环境中遇到问题时,这些Actutor对我们的帮助很大,因为我们可以在运行时启用/禁用日志记录器以查看 调试 信息,同时可以搜索记录器名称并通过UI更改日志级别,而且可以通过UI查看日志。
为了启用日志Actuator,无需执行任何操作。对于LogFile Actuator,只需要为Spring Boot客户端配置所要跟踪日志文件的位置:
spring.application.name=hive-gw
spring.boot.admin.url=http://localhost:8181
spring.boot.admin.client.prefer-ip=true
logging.file=/opt/spring-boot/logs/hiveGateway.log
在实际环境中,当用户开始抱怨因为某些功能不起作用时,可能大多数时候是由第三方系统停止工作引起的。我们可以添加健康检查。使用 AbstractHealthIndicator 通过 / health 公开它们:
@Configuration public class MyHealthCheck extends AbstractHealthIndicator { private final String address = "my third party address" @Override protected void doHealthCheck(Builder builder) throws Exception { builder.withDetail("address", address); URL url = new URL(address); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.connect(); int httpCode = connection.getResponseCode(); builder.withDetail("response", httpCode); if (HttpResponseCodes.SC_OK == httpCode) { builder.up(); } else { builder.down(); } } }
Spring Boot Admin将根据健康检查的结果管理客户端何时关闭或启动。它将允许我们实施断路器,从而确保整个系统在所有情况下都能正常工作。
JavaMelody提供了许多有关服务的指标,运行了多长时间等等,甚至可以看到每个查询sql所做的解释计划。它还提供了一个UI,我们可以在其中查看所有这些。
JavaMelody团队为Spring Boot Admin 开发了一个插件,为每个客户端添加自定义选项卡。要启用它,您需要将这些依赖项添加到Spring Boot Admin服务器应用程序:
<!-- Enable Java Melody --> <dependency> <groupId>net.bull.javamelody</groupId> <artifactId>spring-boot-admin-server-ui-javamelody</artifactId> </dependency> <dependency> <groupId>net.bull.javamelody</groupId> <artifactId>javamelody-core</artifactId> </dependency>
并在属性中启用收集服务器:
server.port=8181 javamelody.collectserver.enabled=true javamelody.init-parameters.storage-directory=/tmp/javamelody