利用Actuator構(gòu)建Spring Boot的監(jiān)控

當(dāng)我們的服務(wù)發(fā)布的時(shí)候,需要一些能夠監(jiān)控應(yīng)用依賴服務(wù)的服務(wù),而且這些服務(wù)需要能夠以合適的接口開(kāi)放給我們。

Spring Boot提供了一個(gè)Actuator組件幫助我們構(gòu)建這個(gè)體系。

加入這個(gè)監(jiān)控非常簡(jiǎn)單,在pom.xml添加一個(gè)dependency

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

這里以mongo服務(wù)做一個(gè)例子,在包中加入一個(gè)mongo監(jiān)控類:

import org.bson.Document;
import org.springframework.boot.actuate.health.AbstractHealthIndicator;
import org.springframework.boot.actuate.health.Health;

import com.mongodb.MongoClient;

public class MongoMonitor extends AbstractHealthIndicator {

    private final MongoClient client;

    public MongoMonitor(MongoClient client) {
        this.client = client;
    }

    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {

        try {

            Document document = new Document();

            document.put("buildInfo",1);
            Document result = client.getDatabase("test").runCommand(document);

        }catch (Exception e){

            System.out.println("mongo失去響應(yīng) 告警!!!!");

            throw e;
        }

        builder.up().withDetail("mongoClient",client.getAddress());
    }
}

以這個(gè)MongoMonitor為例,一般加入Actuator的監(jiān)控類需要繼承AbstractHealthIndicator這個(gè)抽象類,然后在doHealthCheck()方法中加入監(jiān)測(cè)服務(wù)健康的方法。

builder.up()方法表示服務(wù)總是在健康狀態(tài)。

然后在Spring Boot的容器中注冊(cè)這個(gè)健康檢測(cè)類:

@Bean
HealthIndicator mongoHealthIndicator(MongoClient mongoClientMain){
  return new MongoMonitor(mongoClientMain);
}

啟動(dòng)這個(gè)服務(wù)之后,如果是web應(yīng)用可以通過(guò)url看到這個(gè)服務(wù)的健康狀況:

?  ~ http get http://localhost:8080/health
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Date: Thu, 14 Jul 2016 12:45:16 GMT
Server: Apache-Coyote/1.1
Transfer-Encoding: chunked
X-Application-Context: application

{
    "diskSpace": {
        "free": 124176261120,
        "status": "UP",
        "threshold": 10485760,
        "total": 249821663232
    },
    "mongo": {
        "mongoClient": {
            "host": "127.0.0.1",
            "port": 27017,
            "socketAddress": "127.0.0.1:27017"
        },
        "status": "UP"
    },
    "status": "UP"
}

依賴服務(wù)掛掉的時(shí)候:

?  ~ http get http://localhost:8080/health
HTTP/1.1 503 Service Unavailable
Connection: close
Content-Type: application/json;charset=UTF-8
Date: Thu, 14 Jul 2016 12:51:14 GMT
Server: Apache-Coyote/1.1
Transfer-Encoding: chunked
X-Application-Context: application

{
    "diskSpace": {
        "free": 124172673024,
        "status": "UP",
        "threshold": 10485760,
        "total": 249821663232
    },
    "mongo": {
        "error": "com.mongodb.MongoTimeoutException: Timed out after 1000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=127.0.0.1:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused}}]",
        "status": "DOWN"
    },
    "status": "DOWN"
}

如果我們啟用的不是一個(gè)web應(yīng)用,那么我們也可以通過(guò)jmx的方式來(lái)監(jiān)測(cè)這個(gè)應(yīng)用的健康,使用jdk自帶的jconsole連接到對(duì)應(yīng)的應(yīng)用,可以在mbean中看到當(dāng)前應(yīng)用的健康情況:

通過(guò)jmx查看應(yīng)用依賴服務(wù)的健康狀況

以上就是一個(gè)簡(jiǎn)單的Actuator健康監(jiān)測(cè)應(yīng)用了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,262評(píng)論 6 342
  • 第11章 Spring Boot應(yīng)用監(jiān)控 在實(shí)際的生產(chǎn)系統(tǒng)中,我們?cè)鯓又牢覀兊膽?yīng)用運(yùn)行良好呢?我們往往需要對(duì)系統(tǒng)...
    光劍書架上的書閱讀 9,782評(píng)論 0 19
  • 此篇翻譯的是Spring Boot官方指南 Part III. 使用 Spring Boot (Using Spr...
    K天道酬勤閱讀 6,943評(píng)論 0 21
  • 最近迷上小馬寶莉這套書,發(fā)生在小馬谷和水晶帝國(guó)的小馬們之間的故事。里面的小馬各自都有特長(zhǎng),屁股上都有相應(yīng)的可愛(ài)標(biāo)志...
    皮皮絡(luò)閱讀 1,855評(píng)論 2 2

友情鏈接更多精彩內(nèi)容