kevin wang's blog

Logstash 的服務健康檢查機制

May 02, 2021

近期公司的 Kibana 在查詢 Log 的時候總覺得 Log 少了,
後來有一天 OP 人員告知查詢不到 Log 了,
花了一些時間追查才發現 Logstash 服務掛了。
修復完成後也開始計畫建立 Logstash 的 Health Check 機制。

Logstash Health Check API

根據官方的文章

透過呼叫

curl -XGET ‘localhost:9600/?pretty’

可以得到類似以下的回應

{
   "host": "skywalker",
   "version": "7.12.1",
   "http_address": "127.0.0.1:9600"
}

一個良好的監控…

一個良好的監控至少要滿足

  • 監控本身是高 SLA 的,不需要被監控
  • 監控成本要低
  • 監控設定要能夠進版控
  • 監控要容易部屬與維護
  • 要隨時能知道發生異常

由於公司的 Logstash 目前是在 AWS 雲端,
目前公司大部分服務的告緊機制也是使用 Route53 Health Check 服務,
所以決定先採用 AWS CLI 建立 Route53 Health Check 服務來完成告警機制。 Route53 Health Check 本身沒有額外費用,
只存在 Route53 的費用,
Route53 費用可以參考 AWS 說明

建立 Route53 HealthCheck

透過以下指令可以建立

aws route53 create-health-check --cli-incpu-json '{...}'

題外話: AWS CLI 的使用技巧

一開始在使用 AWS CLI 的時候,
有些參數會不知道怎麼填寫,
可以透過 AWS CLI 的 —generate-cli-skeleton 參數產生 Json 骨架,
也可以透過 AWS CLI 的查詢指令來查詢帳號內線上的設定來幫助自己寫出正確的設定。

Health Check 沒有通過!?

建立完以後,
發現 Health Check 始終不通過,
在通過 Health Check 歷程中突然想到,
應該要將 Route53 Health Check 服務用到的 IP 加進 Security Group。

添加 Route53 Health Check Service IP

AWS 本身有提供各服務有用到的 IP 服務有用到的 IP

透過以下指令可以建立 Security Group

aws ec2 modify-instance-attribute --cli-input-json '{...}'

再來是建立 Security Group inbound rule

aws ec2 authorize-security-group-ingress --cli-input-json '{...}'

掛載 Security Group 到 EC2 上

aws ec2 modify-instance-attribute --cli-input-json '{...}'

加上 Alarm Metric

Alarm 是透過參數內的

    "Dimensions": [
        {
            "Name": "HealthCheckId",
            "Value": "{Health Check ID}"
        }
    ]

來關聯 Health Check 服務 跟 Alarm 的。

使用以下指令來建立 Alarm

aws cloudwatch put-metric-alarm --cli-input-json '{...}'

在建立 Alarm 可以考慮建立在不同的區域,
透過 —region {別的區域} 參數就可以達成在指定的區域建立 Alarm。

Alarm Metric 需要建立 服務異常 以及 服務恢復 兩種指令。

做到這裡就建立了一套簡易的 Logstash Health Check 機制。