iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
0
Modern Web

BeeGo系列 第 21

Health check

  • 分享至 

  • xImage
  •  

Health check 是包在 toolbox 模組裡,開發小組說 toolbox 是借鏡 Dropwizard 所建立的。

Health check 主要是提供一個介面,讓外部的服務得以檢查網站是否還存活,像是 AWS ELB 都有地方可以去設定怎麼檢查後面 EC2 實體的狀態 (為你的Classic Load balancer設定運作狀態檢查),這時候就可以把這個 Health check 的 endpoint 填到 ELB 設定去。

Django 也有類似的 package 可以做,我之前用的是 django-health-check ,設定跟使用上都蠻簡單的。好,不多說廢話了,現在來介紹。

設定

首先需要啟用 Admin 介面,先在設定檔裡加入

EnableAdmin = true

加入以後,重新啟動程式,這時候會出現如下的字樣

Admin server Running on :8088

這表示 Admin 介面已經可以通過 port 8088 來存取了。

如果想要修改 port 或是調整 listen address,可以修改設定裡的 AdminAddr / AdminPort (或是加入)

AdminAddr = ""
AdminPort = 8088

檢查程式

建立 checks 目錄,在裏面建立一個 database.go 檔案

package checks

import (
        "errors"
        "math/rand"
)

type DatabaseCheck struct {
}

func (dc *DatabaseCheck) Check() error {
        if dc.isConnected() {
                return nil
        } else {
                return errors.New("can't connect database")
        }
}

func (dc *DatabaseCheck) isConnected() bool {
        x := rand.Intn(100)
        if x%2 == 1 {
                return false
        }
        return true
}

因為 toolbox.AddHealthCheck() 需要的介面是要有 Check() 函式,所以在 database.go 裡新增一個 struct 並實作 Check()。Check() 是給 toolbox 呼叫的,而 isConnect() 則是主要檢查的函式,這邊為了要摹擬成功跟失敗的情況,所以使用亂數來決定回傳 true 或 false。

有了檢查程式以後,接著在 main 裡,使用 toolbox.AddHealthCheck() 加進去。

// main.go
import (
        // ...省略...
        // 匯入剛剛寫的檢查程式
        "github.com/elleryq/ithome-iron-beego/checks"
        // ...省略...
)

// ...

func init() {
        // ...省略...
        // toolbox
        toolbox.AddHealthCheck("database", &checks.DatabaseCheck{})
}
// ...

存檔以後,重新編譯、執行程式。

打開瀏覽器,在網址列輸入 http://localhost:8088/ ,就可以看到我們剛剛加入的檢查了。

多 refresh 幾次,就可以看到檢查的效果。

小結

試用以後,我要修正一下之前所說的,本來以為可以填到 ELB 的設定,但是在刷 /healthcare 頁面時,頁面並沒有回傳不同的HTTP狀態碼,這樣ELB的運作狀態檢查就無法判斷。我覺得可以試著加入不同的HTTP狀態碼,這樣才不需要去解析頁面做判斷。

另外就是只有HTML,不能輸出JSON,比較不利於後續的處理。

會提這兩個,也是因為 django-health-check 有提供這些功能,所以才會這樣說。

完整的程式:https://github.com/elleryq/ithome-iron-beego/tree/day_21

參考資料


上一篇
Docker
下一篇
Tasks
系列文
BeeGo30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言