跳到主內容

如何將自訂腳本套用至觸發器

摘要​

CubeCOS 3.1.0 允許在發生特定事件時觸發自訂動作。

詳細資訊​

問題描述​

設定腳本以回應事件觸發器,使當事件發生於叢集時,能執行自訂動作與自動化行為。 事件腳本可用於發送自訂通知、執行叢集操作或與外部服務整合。

目前支援以 Bash 格式編寫的自訂腳本,並在 Alpine Linux 環境中執行。 設定將透過 CubeCOS 管理介面進行。

適用版本​

CubeCOS 3.1.0 及以上版本。

本文適用於執行 CubeCOS 3.1.0 版或更高版本的環境。

決議​

設定自訂腳本,使其在事件觸發時執行​

  1. 登入 CubeCOS 管理介面。

  2. 要開始設定觸發器,請導航至 事件 > 觸發器 > 建立觸發器。

    Trigger 著陸頁

  3. 點擊 新增屬性,並選取您要與觸發器關聯的屬性,以設定觸發條件。

    為觸發器新增屬性

    以下爲可使用屬性:

    1. 警報類型:透過警報類型 所有、系統、主機 或 虛擬機 設定觸發條件。
    2. 嚴重性:根據嚴重性 INFO、WARNING 或 CRITICAL 設定觸發條件。
    3. 類別:選擇要與觸發器關聯的事件類別。
    4. 事件 ID:將特定的事件 ID 與觸發器關聯。
  4. 選取完畢後,請按 下一步。

  5. 上傳並測試您的自訂腳本。

    資訊

    Alpine Linux 被用作自訂腳本的執行環境。

    範例腳本可在 範例腳本與環境資訊 章節中取得

    在「設定回應」頁面中,點選「+ 個人化腳本」以開啟上傳與測試視窗。 點擊 上傳 Bash 腳本 並選取您的自訂腳本,然後點擊 測試執行 來執行它。 上傳並測試您的個人化腳本

  6. 驗證執行結果並設定觸發反應。

    資訊

    您必須先完成測試執行,才能儲存觸發器。

    請確認測試執行結果符合您的預期行為,點擊 設定回應 來設定觸發條件,然後點擊 下一步 進入最後一步。

    驗證並儲存腳本

    執行「設定回應」後,請確認「設定回應」頁面中的資訊,如下圖所示。

    為觸發器新增屬性

  7. 請輸入自訂觸發器的名稱和說明。

    輸入自訂觸發器的名稱和說明,然後點擊 建立。

    設定觸發器名稱與說明

  8. 驗證觸發器的建立。

    在建立過程中,自訂觸發器在觸發器清單中會呈現灰色,並伴隨一個旋轉的進度指標。 一旦觸發器成功建立並同步至所有 CubeCOS 節點,狀態開關將變為穩定的綠色。

    驗證觸發器建立

範例腳本與環境資訊​

可以定義自訂功能,使其在滿足事件條件時於叢集內執行。 這些腳本可以向監控平台觸發警報、啟動修復服務,或執行其他使用者自訂的操作。

資訊

請使用 #!/usr/bin/env bash 開頭指令。

範例 1:將自訂 Webhook 警示傳送至 Slack​

請使用以下腳本,透過自訂的 webhook URL 向 Slack 發送通知。

#!/usr/bin/env bash

curl -i -X POST -H 'Content-Type: application/json' -d '{"text": "hello from CubeCOS alert response jail"}' https://hooks.slack.com/services/XXX/XXXXXX

來自 shell 執行環境的 env 輸出範例​

CubeCOS 叢集的環境變數會自動傳入腳本執行環境中,操作員可於其自訂腳本中加以利用。 輸出結果採用 JSON 格式,以便於解析與驗證。 您可以透過上傳一個 env 擷取腳本,查詢您所屬叢集的特定環境變數。

env 擷取腳本​

#!/usr/bin/env bash

echo ${EVENT}

檢索腳本的範例回傳結果​

當您執行環境擷取腳本時,json 輸出內容將會顯示在「測試結果」區段下方。

資訊

在實際觸發事件期間,可以存取事件環境變數。

{
"name": "EVENT",
"type": "object",
"description": "the 'case sensitive' event env variable that triggered the action",
"value": {
"data": {
"fields": {
"field_key_1": "some integer value",
"field_key_2": "some string value"
},
"group": "group by tags concatenated",
"name": "measurement name",
"tags": {
"tag_key_1": "tag value 1",
"tag_key_2": "tag value 2"
},
"time": "YYYY-MM-DDTHH:MM:SSZ"
},
"details": "user-defined HTML content for a more detailed message",
"duration": "an integer value in seconds",
"id": "alert id string",
"level": "OK or INFO or WARNING or CRITICAL",
"message": "alert message, from the TICKscript",
"previousLevel": "OK or INFO or WARNING or CRITICAL",
"recoverable": "bool value like true or false",
"time": "YYYY-MM-DDTHH:MM:SSZ"
}
}
},