帮助我们来监控SpringBoot健康状况,那么其实SpringBoot Admin呢,跟Actuator的功能是一样的,
他们两个最大的区别是什么呢,我们讲的Actuator,监控到的信息,需要通过一个URI来访问,并且返回的
是一堆字符串,那么我们还要拿到这些JSON格式的字符串,去通过在线解析,做JSON解析这样的工具,我们才能
更方面的看到里面的内容,其实即便是这样呢,拿到解析出来的结果呢,查看信息的时候也不是那么太方便,
那么其实SpirngBoot Admin这个工具呢,就是将这些信息,健康信息,这些JSON字符串,在他的平台下,以一个URI
报表的形式,做显示的,那么也就是说,我们用户在查一些报告的时候,状态信息的时候,我们再通过他的UI界面去
查看,这样对于我们获取一些信息,会变得更加方便一些,所以这是我们SpringBoot Admin,相比Actuator这个小插件,
他最大的一个区别,那我们先来介绍一下SpringBoot Admin,如果我们项目当中想要使用SpirngBoot Admin,SpringBoot
健康监控检查的时候,我们需要有两个概念,一个是服务端,一个是客户端,也就是说SpringBoot Admin,其实它是通过他
的服务端程序,然后去监听他的客户端,在他的客户端当中,根据所监听到的信息,拿到服务端当中,在他的UI当中做展示,
这样的一个结构,所以如果我们的项目当中要用它,那我们需要干嘛呢,第一步,去发现我们的服务端,使用SpringBoot Admin
的步骤,第一步我们先需要搭建服务端,那么其实他的服务端也是一个SpringBoot的项目,那么我们需要去创建一个SpringBoot
项目,怎么创建呢,我们是用集成IDEA工具去创建也可以,还有我们之前讲过的快速创建也可以,比如我们就通过在线创建的
方式
spring.io
https://start.spring.io/
这里我们要创建是maven project,我们用个是JAVA,我们一直用的是1.5.12版本,接下来就是我们项目的一些信息,比如groupId,
我们还是叫com.learn,然后artifactId叫springboot-server,然后我们选择相应的坐标,我们还是用一个WEB启动器就可以了,
然后Generator Project,这个时候我们会发现,这个项目已经被我们创建了,并且现在正在下载,然后我们把这个项目拿过来,
启动类有了,配置文件也有了,pom文件我们打开看一下,这块搞定以后呢,我们接下来搭建这个server,首相我们要去访问SpringBoot
Admin的官网,这个工具他放到了github上,我们访问github的首页
github.com
https://github.com/
在这里我们去搜,搜spring boot admin
https://github.com/search?q=spring+boot+admin
打开了我们来看一下,这是springboot工具的一些选择,第一个不是,我们看他的语言,它是JavaScript的,第二个是
codecentric/spring-boot-admin,是Java的,这个是我们所要的,然后我们点他进来,这个时候我们打开spring boot admin
的首页
https://github.com/codecentric/spring-boot-admin
在这里我们可以看到,spring boot admin 工具,他的社区活跃度还是挺高的,然后我们往下看,他有一个让你当前用哪个版本的
选择
Reference Guide
这里有1.3.7的,有1.4.6的,有1.5.7的,还有2.0.0的,2.0.0是刚出来的,我们用1.5.7的,这样我们就选中它进来
https://codecentric.github.io/spring-boot-admin/1.5.7/
然后我们看一下,首先这里做了一个spring boot admin的介绍,什么是spring boot admin,这个大家也能够翻译出来,
它是一个监听spring boot的社区项目,然后他这里通过注册,客户端的注册,使用Spring Cloud的这样一个程序,通过注册
这样一个机制,然后通过UI来显示他的一些信息,并且告诉你这个UI是通过AngularJS去做的,
codecentric’s Spring Boot Admin is a community project to manage and monitor your Spring Boot
® applications. The applications register with our Spring Boot Admin Client (via HTTP) or are
discovered using Spring Cloud ® (e.g. Eureka, Consul). The UI is just an AngularJs application
on top of the Spring Boot Actuator endpoints.
那么往下看,看这里,pom.xml
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>1.5.7</version>
</dependency>
</dependencies>
2.1. Setting up Spring Boot Admin Server
设置你当前服务端的pom文件,也就是你现在要搭建的是一个服务端,你必须要把这个坐标导入,这个坐标里放的是什么呢,
就是spring-boot-admin-starter-server,说白了就是服务端的一个启动器,我们用的版本是1.5.7的,然后这里有个地方我们
需要注意,我们现在用的是1.5.7,还有1.4.6的,其实这两个版本是有一个区别的
https://codecentric.github.io/spring-boot-admin/1.4.6/
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>1.4.6</version>
</dependency>
在jar包的结构上,是有区别的,在1.4.6的这个版本下呢,我们需要导入两个坐标,一个是他的server启动器,还有一个是他的UI,
但是在1.5以后呢,他把这两个jar包整合成一个了,所以就没有我们看到的两个坐标,看一下1.5.7,只有一个坐标,这是1.4.6和
1.5.7两个的区别,但是你要用1.4.6,我们就把dependecy拷贝过来,然后加入到我们的server的pom文件当中,这样我们就完成了
第一步导入相应的坐标,我们把它整理到笔记当中,第一步搭建一个SpringBoot项目,我们是通过快速构建的方式构建的,
第一步创建项目,然后第二步访问springboot admin的首页,就是这里
https://github.com/codecentric/spring-boot-admin
这是第二个步骤,第三个步骤是什么呢,需要在项目当中修改pom文件,添加坐标,添加spring boot admin的坐标,
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>1.5.7</version>
</dependency>
这是第二步,第三步我们要干嘛,我们还是打开首页往下看,我们除了要在server端添加坐标以外,我们还需要修改我们的启动器,
我们server端的启动器,在启动类上添加这三个坐标
https://codecentric.github.io/spring-boot-admin/1.5.7/
@Configuration
@EnableAutoConfiguration
@EnableAdminServer
public class SpringBootAdminApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminApplication.class, args);
}
}
这三个注解,其实这三个注解我们只要加一个就可以,加一个EnableAdminServer就可以,这两个不用加了,为什么不用加了,
你看这两个,一个叫Configuration,一个叫EnableAutoConfiguration,这两个注解我们在讲SpringBoot核心注解的时候讲到过,
也就是我们的启动类,其实是自带这两个注解的,@SpringBootApplication注解当中,已经包含了,那既然是这样的话,就不用再添加那
两个注解了,只要加最后一个就可以了,
@EnableAdminServer
@SpringBootApplication
public class SpringbootServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootServerApplication.class, args);
}
}
这是第三步了,修改启动类,添加@EnableAdminServer这个注解,这是第三步,第四步我们看看还要做什么呢,再往下就是客户端的了,
相关的配置信息就没有了,服务端就配置完事了,这样就完成了一个spring boot admin的一个搭建,接下来我们再看客户端,那么客户端
是谁呢,其实客户端就是我们需要监控的工程,这就是客户端,在我们项目当中,我们是不是有一个springboot helloworld的一个工程,
打算我们用springboot admin去监控的,那么他就是客户端,可是这个客户端并没有和服务端建立一定的联系,那么我们要告诉他
让这个服务端去监听这个客户端,去对他做健康检查,我怎么通知他呢,这是客户端的信息,首先你要去客户端去添加一个坐标,这个
坐标是什么呢,导入客户端的一个启动器,我们把这个坐标拿过来,
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.5.7</version>
</dependency>
打开我们需要监听的客户端项目,打开pom文件,然后把client坐标加入进去,第一步修改客户端的pom文件,添加依赖,第二步
我们再看一下,需要修改配置文件
spring.boot.admin.url: http://localhost:8080
management.security.enabled: false
如果你是yml你要改成这个,这两个是什么呢,下面这个应该不陌生了,这是访问权限的一个设置,关键是上面这个,
spring.boot.admin.url,它是通过客户端的信息,我们在这不都是看到客户端的信息,要将这些信息发送给哪个服务端,
这里就是配置我们服务端的URL的,然后客户端会将服务端发送这些信息,发送到我们服务端,服务端拿到这些信息以后,
在UI做一些人性化的展示,我们需要把它copy到客户端文件当中,management.security.enabled这个在我们之前的
文件当中已经有了,这个已经有过了,spring.boot.admin.url: http://localhost:8080,
我们只要把这个拿过来,然后放到这儿,后面的URL要根据你当前服务端的地址,这块配置的是你当前服务端的地址,
端口来做一个修改,我们先把它整理到笔记当中,先看服务端,服务端没有设置端口就是8080,我们改一下吧,
我们给服务端的server设置一个端口,它是9090
server.port=9090
服务端的端口,然后客户端,就是用默认的,8080,一个是9090,然后这一块我们是不是要写9090
spring.boot.admin.url=http://localhost:9090
我们刚刚把服务端的改成9090的了,这一块写的是9090的端口,服务端就在我本机上,所以我用localhost,
当然你也可以使用127.0.0.1,表示springboot amdin服务端的IP地址以及端口号,
修改客户端的appliaction.properties的配置文件,咱们再往下看,还有其他的,那么这里就没有说其他的了,
这里是发现Spring Cloud微服务的一些监控,监控eureka,那我们现在项目搭建好了,我们接下来就可以启动一下,
看看是如何做项目监控的,首先我们来启动服务端,找到他的启动类,观察控制台,启动没有问题,然后这个时候我们就可以
通过9090端口,去访问我们的服务端了,我们看看访问会得到一个什么样的效果
localhost:9090
这个时候我们可以看到一个页面,这个页面里有一些信息,我们现在看的是Applications菜单下的,但是我们看这里什么都没有,
没有的原因是什么呢,是因为我们现在被监听的客户端还没有启动呢,所以我们现在回来去把被监听的客户端启动,启动完了以后,
我们再来刷新一下,其实马上在他的管理页面里,会马上显示被监听的信息了,我们可以在这里去看他的详细信息,就可以看到当前
程序的详细监控信息,那么至于这些详细信息表示什么含义呢,其实整个过程还是比较简单的
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.learn</groupId>
<artifactId>springboot-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-hello</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- springBoot的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
<version>1.5.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
server.port=9090
package com.learn.springbootserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import de.codecentric.boot.admin.config.EnableAdminServer;
@EnableAdminServer
@SpringBootApplication
public class SpringbootServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootServerApplication.class, args);
}
}
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.learn</groupId>
<artifactId>springboot-hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-hello</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.12.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- springBoot的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.5.7</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
#server.port=8888
hello=China
num=${random.int}
#msg=Hello World ${hello}
msg=Hello World ${hello} ${num}
#server.port=${random.int[1024,9999]}
#management.security.enabled=false
spring.boot.admin.url=http://localhost:9090
management.security.enabled=false
package com.learn.springboothello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootHelloApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootHelloApplication.class, args);
}
}