Gatus的功能
先簡單列點Gatus的功能(部分選項省略):
- Health dashboard監控服務健康狀態
- HTTP
- ICMP
- TCP
- DNS
- 自定義健康狀態條件
- 儲存監控紀錄
- PostgreSQL
- 儀錶板
- 告警通知
- Slack
- Telegram
等等,這些功能Prometheus + Grafana 不都有嗎?
確實,講到監控、告警,最常聽到的就是Prometheus + Grafana的王道組合了
但對一些小公司或小專案,這個王道組合有點太大了。我記憶力非常堪憂,剛學的東西,兩個禮拜後記住的比例斷崖式下降,尤其是PromQL真的很難背,也不常用
這時候Gatus的優勢就出來了
首先,啟動速度非常快,自帶儀錶板,簡單設定一個config.yaml就能用了
再來它還有一個特點,它是主動發起請求。Prometheus是拉取機器的資料,沒有被呼叫的服務當然也不會有資料。Gatus這種作法可以主動檢查例如API等等服務是否有問題,避免被使用的那一刻才爆炸
我前公司有一些平常沒在用的API,DevOps也無力架設相關的系統,Gatus這種小巧的監控真的非常適合
設定config
Gatus的文件真的寫得非常詳細、容易理解。這裡簡單列出我比較會用到的功能:
- 監控endpoints列表
- name
- url
- interval:間隔多久呼叫一次
- conditions:符合這些條件才算通過
- HTTP status code
- Response time
- Body的結構,是否存在key,array長度等等
- Certificate是否即將過期
- Domain是否即將過期
config.yaml
1endpoints:
2- group: newslist
3 name: news24h
4 url: https://api.cnyes.com/media/api/v1/newslist/category/news24h
5 interval: 30m
6 conditions:
7 - "[STATUS] == 200"
8 - "[RESPONSE_TIME] < 1000"
9 - "len([BODY].items.data) > 0"
10 - "[CERTIFICATE_EXPIRATION] > 48h"
重複的內容太多,看得眼花撩亂?既然config是yaml格式,當然也可以用yaml的繼承
1# 先寫一個基本設定,&名稱
2endpoint-200: &endpoint-200
3 conditions:
4 - "[STATUS] == 200"
5 - "[RESPONSE_TIME] < 1000"
6
7# 來繼承它!<<: *名稱
8endpoints:
9 - grouop: logo wall
10 name: adContents
11 url: https://api.cnyes.com/media/api/v1/adContents/Home_float_btn_D
12 interval: 30m
13 <<: *endpoint-200
告警
官方有提供一卡車的告警通知串接方案,小專案的話,使用Telegram很方便 告警可以簡單設定下列內容:
- 告警訊息
- send-on-resolved:是否觸發警報後後續不再告警
- failure-threshold:需要連續幾次檢查不通過才告警
可以設定多種告警,然後在endpoints裡面的alerts陣列指定告警通知
config.yaml
1alerting:
2 telegram:
3 token: ${TELEGRAM_TOKEN}
4 id: ${TELEGRAM_CHAT_ID}
5 default-alert:
6 enabled: true
7 description: "health check failed"
8 send-on-resolved: true
9 failure-threshold: 2
10endpoints:
11 - group: newslist
12 name: news24h
13 url: https://api.cnyes.com/media/api/v1/newslist/category/news24h
14 interval: 30m
15 conditions:
16 - "[STATUS] == 200"
17 - "[RESPONSE_TIME] < 1000"
18 - "len([BODY].items.data) > 0"
19 - "[CERTIFICATE_EXPIRATION] > 48h"
20 alerts:
21 - type: telegram
部署
官方提供K8S, Docker和Terraform等等部署方式
這邊紀錄Docker的啟動方式,官方有提供image非常方便! compose.yaml
1version: "3.8"
2services:
3 gatus:
4 image: twinproduction/gatus:latest
5 ports:
6 - 80:8080
7 volumes:
8 - ./config:/config
9 restart: always
10 stop_signal: SIGINT
11 stop_grace_period: 10s
12 environment:
13 - TELEGRAM_TOKEN=${TELEGRAM_TOKEN}
14 - TELEGRAM_CHAT_ID=${TELEGRAM_CHAT_ID}
儀錶板
上面的compose映射了80 port,打開http://localhost:80看看儀錶板吧
監控首頁
- 群組名稱
- endpoint名稱
- 平均回應時間
- 從舊到新顯示最近的檢查結果
- 綠色:正常
- 紅色:檢查不合格
監控內頁
點擊進入各個endpoint,可以看到更詳細的內容和圖表
- 時間軸顯示回應時間
- 最新健康狀態
- 最近事件
- 監控開始日期
- 監控有問題的日期
- 回復正常的日期
參考
- https://github.com/TwiN/gatus
- https://blog.wu-boy.com/2022/03/automated-service-health-dashboard-gatus/