跳到主內容

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

摘要​

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"
}
}
},