使用Actuator检查与监控
生活随笔
收集整理的這篇文章主要介紹了
使用Actuator检查与监控
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我們?nèi)绾伪O(jiān)控SpringBoot的健康狀況,其實對于SpringBoot是很有必要去監(jiān)控和檢查的,因為我們通過這個方式呢,是當前程序運行的一個狀態(tài),那我們講監(jiān)控SpringBoot健康狀況的當中,會講兩種方式,第一種是使用Actuator插件,檢查SpringBoot的狀態(tài),第二種可以使用可視化的監(jiān)控報表,SpringBootAdmin,來監(jiān)控我們SpringBoot的健康狀況,我們先講解第一種,使用Actuator檢查與監(jiān)控,在這里我們先說一下,如果SpringBoot想用Actuator來做監(jiān)控的話,來做健康檢查的話,他的使用步驟是什么樣的,第一步我們需要在pom文件里添加Actuator的坐標,并且通過坐標會導(dǎo)入相應(yīng)的坐標,在pom文件中添加Actuator的坐標,這是第一個步驟,第二個步驟,在全局配置文件中,設(shè)置關(guān)閉安全限制,也就是默認的對于訪問信息,安全限制是開啟的,那么我們就沒法去獲取安全信息,當然這個在不同的版本當中是有區(qū)別的,比如說我們現(xiàn)在,打開我們的pom文件,現(xiàn)在我們用的springboot用的是1.5.12.RELEASE,我沒記錯的話是在1.5以下,不包括1.5,他的這個版本當中,與Actuator使用是不用關(guān)閉安全限制的,在1.5以上對于安全限制呢,他默認是開啟的,需要在配置文件當中去關(guān)閉,如果我們把上面兩個步驟做完,我們就可以使用Actuator插件,SpringBoot就可以去做健康監(jiān)控了,那我們接下來就跟著這個步驟,去完成相應(yīng)的操作,打開我們的pom文件,在這里我們需要添加一個坐標,這個坐標是什么呢,我們把它copy過來,還是org.springframework.boot下的一個jar包,jar包叫什么呢,artifactId叫spring-boot-starter-actuator,其實這個坐標也很好記,把我們的WEB啟動器,后面的WEB改成actuator就可以了,因為它是springboot的一個插件,給他的groupId也都是相同的,這是第一步,第二步我們說過,需要去關(guān)閉安全限制,那么在哪去設(shè)置安全限制呢,在全局配置文件當中,打開我們的項目看一下,其實我們現(xiàn)在沒有一個全局配置文件,這些都加入了其他字符了,就不再是默認的springboot的配置文件了,那我們需要重新創(chuàng)建一個全局配置文件,在這里我拷貝一個,我們新建的就是springboot全局配置文件的,他的名稱叫application.properties,在這里我們把端口號去掉,在這里我們需要加入什么呢,加入一句話management.security.enabled=false默認的是true,我們把它改成false,這樣就關(guān)閉了安全限制,我們把這兩項設(shè)好以后,接下來我們再把springboot程序啟動一下,找到啟動類,運行,我們觀察控制臺,在這里我們看,控制臺它會輸出這樣的信息,其實這些信息就是為我們提供了健康狀況做不同檢查的URI的一個標記,比如這里我們找一個最簡單的,像這個healthMapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.
Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.a
Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto
Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+j
Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+j
Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actua
Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot
Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1
Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1
Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+js
Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+j
Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuato
Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot
Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json |
Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+jso/health這表示什么意思呢,在我的筆記當中已經(jīng)給大家羅列出來了
對應(yīng)控制臺里的URI,比如我們找health,他表示什么呢,顯示應(yīng)用程序運行健康信息,這是最簡單的一個信息了,我們接下來就看怎么通過URI,去獲取springboot的基本信息,我們把這個URIcopy一下,打開瀏覽器,我們在這里去訪問一下,后面直接加我們拷貝的URI就可以了localhost:8080/health{status: "UP",diskSpace: {status: "UP",total: 104857595904,free: 12969869312,threshold: 10485760}
}這是一個JSON格式的字符串,返回給springboot的一個基本信息,這里我們來看一下,第一個status是狀態(tài),UP表示什么呢,就是當前這個狀態(tài)是正常的,就是你的springboot項目是正常運行的,然后還有一個diskSpace,就是你的磁盤空間,在磁盤空間里呢,運行狀態(tài)也是正常的,total就是你當前項目的磁盤,服務(wù)器所在的磁盤,總空間,free是剩余空間,就是可用空間,然后還有一個threshold,這是什么呢,邊界值,邊界值是什么意思呢,當前你要在你的磁盤里面運行你的springboot程序,那么你的磁盤空間至少要有10485760這么多,至少要提供10M的空間,所以這是一個邊界值,所以我們通過health可以得到基本的顯示,當然這里還有其他的,再找一個比較常見的,你像這個env,這是什么呢,看環(huán)境變量的,我們拿過來,在這里我們把它訪問一下http://localhost:8080/env這個時候的信息就會多一些,那么對于這樣的信息,你會發(fā)現(xiàn)他也是JSON格式的了,那這個時候我們怎么辦呢,當然我們也可以用工具來做JSON格式的轉(zhuǎn)換,比如我們可以找一下JSON在線解析的工具json在線解析https://www.sojson.com/然后我們把信息copy一下,然后放到在線工具當中,在這里我們看一下,profiles: [ ],profiles現(xiàn)在什么都沒有,所以是空的,不用管它,然后有一個server.ports: {local.server.port: 8080
}當前你的程序所監(jiān)聽的一個端口,8080,然后還有一個servletContextInitParams: { }就是你上下文初始化所需要的參數(shù),那我們這里沒有相應(yīng)的參數(shù),所以是空的,然后下面就是你的系統(tǒng)屬性systemPropertiesjava.runtime.name: "Java(TM) SE Runtime Environment",
sun.boot.library.path: "C:\Program Files\Java\jdk1.8.0_151\jre\bin",
java.vm.version: "25.151-b12",
user.country.format: "US",
java.vm.vendor: "Oracle Corporation",
java.vendor.url: "http://java.oracle.com/",
path.separator: ";",
java.vm.name: "Java HotSpot(TM) 64-Bit Server VM",
file.encoding.pkg: "sun.io",
user.country: "CN",
user.script: "",
sun.java.launcher: "SUN_STANDARD",
sun.os.patch.level: "",
PID: "8904",
java.vm.specification.name: "Java Virtual Machine Specification",
user.dir: "C:\JavaEE_Workspace\springboot-hello",
java.runtime.version: "1.8.0_151-b12",
java.awt.graphicsenv: "sun.awt.Win32GraphicsEnvironment",
org.jboss.logging.provider: "slf4j",
java.endorsed.dirs: "C:\Program Files\Java\jdk1.8.0_151\jre\lib\endorsed",
os.arch: "amd64",
java.io.tmpdir: "C:\Users\Leon.sun\AppData\Local\Temp\",
line.separator: " ",
java.vm.specification.vendor: "Oracle Corporation",
user.variant: "",
os.name: "Windows 8.1",
sun.jnu.encoding: "GBK",
spring.beaninfo.ignore: "true",在這里有java.runtime.name,表示你當前JAVA虛擬機的一個版本,虛擬機的一個名稱,我們用的是Java(TM) SE Runtime Environment,然后還有你用的JDK的路徑,我們用的是C:\Program Files\Java\jdk1.8.0_151\jre\bin,然后還有當前JVM的版本,還有URL,還有分隔符,還有VM里面核心的名稱是什么,Java HotSpot(TM) 64-Bit Server VM,在這里我們可以看到跟環(huán)境變量相關(guān)的信息,這里讀的這一塊就是虛擬機的一些信息,下面還有其他的配置信息,這是對env,看我們springboot環(huán)境變量的一個方式,還有一個是什么呢,我們還可以通過/dump,來查看他的dump信息localhost:8080/dump其實大家對dump并不陌生吧,舉個最簡單的例子,我們用debug去調(diào)式的時候,在debug模式下,左側(cè)顯示線程的信息,其實就是dump里面的一些信息,在沒有springboot提供的Actuator工具的時候,如果我們想要看dump信息,其實這是一件非常麻煩的事,我們得借助JDK當中的一些工具,通過工具才能查看dump的信息,如果感興趣的呢,我在這里就不講了,在JVM檢查他的健康狀況,就有對于dump文件的查看,然后我們也把這個copy,在這里我們可以看到,是我們線程的信息{threadName: "DestroyJavaVM",threadId: 33,blockedTime: -1,blockedCount: 0,waitedTime: -1,waitedCount: 0,lockName: null,lockOwnerId: -1,lockOwnerName: null,inNative: false,suspended: false,threadState: "RUNNABLE",stackTrace: [ ],lockedMonitors: [ ],lockedSynchronizers: [ ],lockInfo: null
}ThreadId線程ID是多少,還有鎖的時間,沒有鎖,blockedCount鎖的數(shù)量,沒有,還有l(wèi)ockName鎖的名稱,保持本地線程inNative,也沒有本地線程也是false,還有這個線程是否是掛起的suspended,也是false的,這些其實就是dump文件給我們輸出的dump信息,可以查看springboot在運行時的一些狀況,那么至于其他的URI表示什么意思呢,就不一一講解了,表格去看一下,你也可以去試一下,我相信大家去讀一下也是能讀懂的,我們主要是講一下Actuator的一個使用,其實相對于來說,Actuator比SpringBootAdmin還要簡單一些,畢竟他不是一個可視化的一個報表,我們主要講一下什么是監(jiān)控健康狀況,怎么去監(jiān)控
<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></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
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);}}
?
總結(jié)
以上是生活随笔為你收集整理的使用Actuator检查与监控的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot核心注解介绍
- 下一篇: 为什么要用RabbitMQ