<div class="show-content-free"> <blockquote> <h3>Spring Boot Admin 用于监控基于 Spring Boot 的应用,它是在 Spring Boot Actuator 的基础上提供简洁的可视化 WEB UI。</h3> </blockquote> <h2>1. 什么是Spring Boot Admin?</h2> <hr> <p>Spring Boot Admin(<strong>下文简称SBA</strong>)是一个社区开源项目,用于管理和监控你的Spring Boot应用。应用经过SBA Client注册到SBA Server中,可经过HTTP请求或者Spring Cloud发现(例如Eureka、Consul),UI展现经过Vue在Spring Boot Actuator端点上获取应用监控数据进行管理。</p> <h2>2. 开始使用</h2> <hr> <h3>2,1 配置好你的SBA Server服务端程序</h3> <h4>2.1.1 添加spring-boot-admin-starter-server的Maven依赖到你的pom.xml中:</h4> <pre class="hljs xml"><code class="xml"><span class="hljs-tag"><<span class="hljs-name">dependency</span>></span> <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>de.codecentric<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span> <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-admin-starter-server<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span> <span class="hljs-tag"><<span class="hljs-name">version</span>></span>2.0.2<span class="hljs-tag"></<span class="hljs-name">version</span>></span> <span class="hljs-tag"></<span class="hljs-name">dependency</span>></span> <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span> <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>de.codecentric<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span> <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-admin-server-ui<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span> <span class="hljs-tag"><<span class="hljs-name">version</span>></span>2.0.2<span class="hljs-tag"></<span class="hljs-name">version</span>></span> <span class="hljs-tag"></<span class="hljs-name">dependency</span>></span> <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span> <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span> <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-security<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span> <span class="hljs-tag"></<span class="hljs-name">dependency</span>></span> <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span> <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span> <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-web<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span> <span class="hljs-tag"></<span class="hljs-name">dependency</span>></span> </code></pre> <h4>2.1.2 打开你的Spring Boot启动文件中添加@EnableAdminServer 注解用于激活SBA Server配置:</h4> <pre class="hljs java"><code class="java"><span class="hljs-keyword">import</span> de.codecentric.boot.admin.server.config.EnableAdminServer; <span class="hljs-keyword">import</span> org.springframework.boot.SpringApplication; <span class="hljs-keyword">import</span> org.springframework.boot.autoconfigure.SpringBootApplication;java
<span class="hljs-meta">@SpringBootApplication</span> <span class="hljs-meta">@EnableAdminServer</span> <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Application</span> </span>{git
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{ SpringApplication.run(Application.class, args); }
} </code></pre>github
<p><strong>注意若是你须要将应用以war形式部署,请将启动文件作以下改变:</strong></p> <pre class="hljs java"><code class="java"><span class="hljs-keyword">import</span> de.codecentric.boot.admin.server.config.EnableAdminServer; <span class="hljs-keyword">import</span> org.springframework.boot.SpringApplication; <span class="hljs-keyword">import</span> org.springframework.boot.autoconfigure.SpringBootApplication; <span class="hljs-keyword">import</span> org.springframework.boot.builder.SpringApplicationBuilder; <span class="hljs-keyword">import</span> org.springframework.boot.web.servlet.support.SpringBootServletInitializer;web
<span class="hljs-meta">@SpringBootApplication</span> <span class="hljs-meta">@EnableAdminServer</span> <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Application</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">SpringBootServletInitializer</span> </span>{spring
<span class="hljs-meta">@Override</span> <span class="hljs-function"><span class="hljs-keyword">protected</span> SpringApplicationBuilder <span class="hljs-title">configure</span><span class="hljs-params">(SpringApplicationBuilder builder)</span> </span>{ <span class="hljs-keyword">return</span> builder.sources(Application.class); } <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{ SpringApplication.run(Application.class, args); }
} </code></pre>浏览器
<h4>2.1.3 在你的SBA Server中的 application.yml 中进行相关配置:</h4> <pre class="hljs bash"><code class="bash">spring: <span class="hljs-comment"># 配置SBA Client链接的安全帐号密码</span> security: user: name: admin password: admin boot: admin: ui: <span class="hljs-comment"># 修改网页显示的tab标题</span> title: <span class="hljs-string">"应用监控管理"</span> <span class="hljs-comment"># 修改网页的brand的图标和标题</span> brand: <span class="hljs-string">"<img src='assets/img/icon-spring-boot-admin.svg'><span>应用监控管理</span>"</span> server: port: 7070 </code></pre> <h4>2.1.4 进行Spring Security相关配置:</h4> <pre class="hljs java"><code class="java"><span class="hljs-keyword">import</span> de.codecentric.boot.admin.server.config.AdminServerProperties; <span class="hljs-keyword">import</span> org.springframework.security.config.annotation.web.builders.HttpSecurity; <span class="hljs-keyword">import</span> org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; <span class="hljs-keyword">import</span> org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; <span class="hljs-keyword">import</span> org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; <span class="hljs-keyword">import</span> org.springframework.security.web.csrf.CookieCsrfTokenRepository;安全
<span class="hljs-meta">@EnableWebSecurity</span> <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SecurityConfig</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">WebSecurityConfigurerAdapter</span> </span>{ <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> String adminContextPath;bash
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">SecurityConfig</span><span class="hljs-params">(AdminServerProperties adminServerProperties)</span> </span>{ <span class="hljs-keyword">this</span>.adminContextPath = adminServerProperties.getContextPath(); } <span class="hljs-meta">@Override</span> <span class="hljs-function"><span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">configure</span><span class="hljs-params">(HttpSecurity http)</span> <span class="hljs-keyword">throws</span> Exception </span>{ SavedRequestAwareAuthenticationSuccessHandler successHandler = <span class="hljs-keyword">new</span> SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter(<span class="hljs-string">"redirectTo"</span>); successHandler.setDefaultTargetUrl(adminContextPath + <span class="hljs-string">"/"</span>); http.authorizeRequests() .antMatchers( adminContextPath + <span class="hljs-string">"/assets/**"</span>, adminContextPath + <span class="hljs-string">"/login"</span> ).permitAll() .anyRequest().authenticated() .and() .formLogin().loginPage(adminContextPath + <span class="hljs-string">"/login"</span>).successHandler(successHandler).and() .logout().logoutUrl(adminContextPath + <span class="hljs-string">"/logout"</span>).and() .httpBasic().and() .csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) .ignoringAntMatchers( <span class="hljs-string">"/instances"</span>, <span class="hljs-string">"/actuator/**"</span>, adminContextPath + <span class="hljs-string">"/logout"</span> ); }
} </code></pre>网络
<h3>2.2 注册你的客户端应用</h3> <blockquote> <p>为了注册你的应用在SBA Server中,你能够使用SBA Client 或者使用Spring Cloud Discovery(例如:Eureka, Consul, ...)。</p> </blockquote> <h4>2.2.1 配置你的Spring Boot Admin客户端</h4> <p>每个想注册的应用都必须包含SBA Client,同时为了确保Actuator端点的安全,建议添加 <strong>spring-boot-starter-security</strong> 依赖用于保护端点安全访问。<br> 添加 <strong>spring-boot-admin-starter-client</strong> 的Maven依赖到你的pom.xml中:</p> <pre class="hljs xml"><code class="xml"><span class="hljs-tag"><<span class="hljs-name">dependency</span>></span> <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>de.codecentric<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span> <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-admin-starter-client<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span> <span class="hljs-tag"><<span class="hljs-name">version</span>></span>2.0.2<span class="hljs-tag"></<span class="hljs-name">version</span>></span> <span class="hljs-tag"></<span class="hljs-name">dependency</span>></span> <span class="hljs-comment"><!-- 可选择添加下面依赖 --></span> <span class="hljs-tag"><<span class="hljs-name">dependency</span>></span> <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span> <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-starter-security<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span> <span class="hljs-tag"></<span class="hljs-name">dependency</span>></span> </code></pre> <h4>2.2.2. 在你的SBA Client中的 <strong>application.yml</strong> 中配置你的SBA Server的服务地址:</h4> <pre class="hljs bash"><code class="bash">spring: boot: admin: client: <span class="hljs-comment"># 这个URL地址是SBA Server的服务地址,你须要将你的应用注册到该地址上</span> url: http://localhost:7070 <span class="hljs-comment"># 配置链接到监测管理平台的Security安全密码</span> username: admin password: admin instance: metadata: <span class="hljs-comment"># 配置发送到SBA Server的SBA Client的端点安全密码</span> user.name: <span class="hljs-variable">${spring.security.user.name}</span> user.password: <span class="hljs-variable">${spring.security.user.password}</span> security: user: name: root password: root <span class="hljs-comment"># 官方文档中有提到, SpringBoot 的 Logging 配置的级别有7个:TRACE , DEBUG , INFO , WARN , ERROR , FATAL , OFF</span> logging: <span class="hljs-comment"># 设置日志保存的路径,path和file只须要设置一个,指定path则日志名称固定为spring.log</span> path: /java-log <span class="hljs-comment"># 打印日志的级别</span> level: root: info <span class="hljs-comment"># 在默认状况下大多数Actuator的端点并无彻底公开,这里我将全部端点都进行公开进行管理</span> management.endpoints.web.exposure.include: <span class="hljs-string">"*"</span> app
</code></pre>
<h4>2.2.3. 若是你添加了 <strong>spring-boot-starter-security</strong> 依赖,你须要进行以下配置使SBA Server服务端可以访问SBA Client客户端的Actuator端点:</h4> <pre class="hljs java"><code class="java"><span class="hljs-keyword">import</span> org.springframework.context.annotation.Configuration; <span class="hljs-keyword">import</span> org.springframework.security.config.annotation.web.builders.HttpSecurity; <span class="hljs-keyword">import</span> org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
<span class="hljs-meta">@Configuration</span> <span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">SecurityConfig</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">WebSecurityConfigurerAdapter</span> </span>{
<span class="hljs-meta">@Override</span> <span class="hljs-function"><span class="hljs-keyword">protected</span> <span class="hljs-keyword">void</span> <span class="hljs-title">configure</span><span class="hljs-params">(HttpSecurity http)</span> <span class="hljs-keyword">throws</span> Exception </span>{ http.httpBasic().and() .authorizeRequests().antMatchers(<span class="hljs-string">"/actuator/**"</span>).authenticated() .anyRequest().permitAll(); }
} </code></pre>
<h3>3.至此相关配置已经完成,如今让咱们启动SBA Server服务端程序,打开浏览器输入<a href="http://localhost:7070" target="_blank" rel="nofollow">http://localhost:7070</a> 访问它。</h3>
<div class="image-container" style="max-width: 700px; max-height: 345px; background-color: transparent;"> <div class="image-view" data-width="1920" data-height="949"><img data-original-src="//upload-images.jianshu.io/upload_images/7089499-e8258ce3badab3be.png" data-original-width="1920" data-original-height="949" data-original-format="image/png" data-original-filesize="52194" style="cursor: zoom-in;" class="" src="https://img2018.cnblogs.com/blog/1112483/201906/1112483-20190610150321306-288700741.png"></div> </div><br><br><br> <p>咱们能够看到SBA Server跳转到了登陆页面提示咱们登陆,这时候咱们输入咱们在application.yml中配置的帐号密码进行登陆:</p> <br> <div class="image-container" style="max-width: 431px; max-height: 397px; background-color: transparent;"> <div class="image-view" data-width="431" data-height="397"><img data-original-src="//upload-images.jianshu.io/upload_images/7089499-83269364e36c29d0.png" data-original-width="431" data-original-height="397" data-original-format="image/png" data-original-filesize="17275" style="cursor: zoom-in;" class="" src="https://img2018.cnblogs.com/blog/1112483/201906/1112483-20190610150411912-1666681706.png"></div> </div><br><br> <p>输入用户名和密码后点击Login后跳转到咱们的应用监控管理首页:</p> <br> <div class="image-container" style="max-width: 700px; max-height: 345px; background-color: transparent;"> <div class="image-view" data-width="1920" data-height="949"><img data-original-src="//upload-images.jianshu.io/upload_images/7089499-72bd1b0d05d4b874.png" data-original-width="1920" data-original-height="949" data-original-format="image/png" data-original-filesize="50527" style="cursor: zoom-in;" class="" src="https://img2018.cnblogs.com/blog/1112483/201906/1112483-20190610150454196-1804564636.png"></div> </div><br><br> 这时咱们看到是没有应用注册进来的,页面是数据是空白的,整个页面简洁干净,接下去让咱们启动一个SBA Client客户端程序注册进来<br> <div class="image-container" style="max-width: 700px; max-height: 345px; background-color: transparent;"> <div class="image-view" data-width="1920" data-height="949"><img data-original-src="//upload-images.jianshu.io/upload_images/7089499-575f1b73a9f994b6.png" data-original-width="1920" data-original-height="949" data-original-format="image/png" data-original-filesize="52659" style="cursor: zoom-in;" class="" src="https://img2018.cnblogs.com/blog/1112483/201906/1112483-20190610150536704-1308118067.png"></div> </div><br><br> 启动一个SBA Client后,能够看到页面上出现了一个客户端程序注册进来了<br> <div class="image-container" style="max-width: 700px; max-height: 345px; background-color: transparent;"> <div class="image-view" data-width="1920" data-height="949"><img data-original-src="//upload-images.jianshu.io/upload_images/7089499-d84eb022f3069fe7.png" data-original-width="1920" data-original-height="949" data-original-format="image/png" data-original-filesize="83527" style="cursor: zoom-in;" class="" src="https://img2018.cnblogs.com/blog/1112483/201906/1112483-20190610150609688-626626406.png"></div> </div> <p>下图是你的应用的基本信息查看,包括线程使用图表,堆内存使用图表,非堆内存使用图表等等</p><br><br> <div class="image-view" data-width="1920" data-height="1080"><img data-original-src="//upload-images.jianshu.io/upload_images/7089499-3c2c62382daf9be1.png" data-original-width="1920" data-original-height="1080" data-original-format="image/png" data-original-filesize="104437" style="cursor: zoom-in;" class="" src="https://img2018.cnblogs.com/blog/1112483/201906/1112483-20190610150642488-341401263.png"></div> <br> <p>下图是你的应用的日志打印</p> <br> <div class="image-view" data-width="1920" data-height="1080"><img data-original-src="//upload-images.jianshu.io/upload_images/7089499-3aac83ee693a9351.png" data-original-width="1920" data-original-height="1080" data-original-format="image/png" data-original-filesize="202490" style="cursor: zoom-in;" class="" src="https://img2018.cnblogs.com/blog/1112483/201906/1112483-20190610150713228-1347024027.png"></div> <br> <p>下图是你的应用的网络URL请求状况监控</p> <br><br> <div class="image-container" style="max-width: 700px; max-height: 393px; background-color: transparent;"> <div class="image-view" data-width="1920" data-height="1080"><img data-original-src="//upload-images.jianshu.io/upload_images/7089499-7b0fa09063c0d95a.png" data-original-width="1920" data-original-height="1080" data-original-format="image/png" data-original-filesize="152871" style="cursor: zoom-in;" class="" src="https://img2018.cnblogs.com/blog/1112483/201906/1112483-20190610150744789-193538763.png"></div> </div> <br><br><br> <h3>这里就不过多演示了,能够看出这个经过这个监控平台咱们能够方便快捷的管理监控咱们的应用,不再用打开Linux命令行查看咱们项目运行的状况,怎么样功能是否是很强大。</h3> <p>最后贴上如下官方文档地址<br> <a href="http://codecentric.github.io/spring-boot-admin/2.0.2/#_what_is_spring_boot_admin" target="_blank" rel="nofollow">spring-boot-admin 官方文档地址</a><br> <a href="https://github.com/codecentric/spring-boot-admin" target="_blank" rel="nofollow">spring-boot-admin GitHub地址</a></p>
</div>