通過訂閱雲助手事件,可以構建自動化的營運響應流程。例如,在自動化任務(如安裝軟體、執行巡檢指令碼)失敗時立即接收警示,從而替代高成本、高延遲的手動輪詢檢查。
操作步驟
操作步驟以訂閱雲助手任務狀態事件為例,更多資訊,請參見雲助手事件說明。
使用EventBridge訂閱雲助手事件
操作前,請確認已開通事件匯流排EventBridge並授權。
登入事件匯流排EventBridge控制台,在左側導覽列,單擊事件匯流排。
在頂部功能表列,選擇地區。
在事件匯流排頁面,單擊default。
在事件匯流排頁面,單擊左側導覽列的事件規則,然後單擊建立規則。
在配置基本資料頁簽,在名稱文字框輸入規則名稱,在描述文字框輸入規則的描述,然後單擊下一步。
在配置事件模式頁簽,完成以下配置,然後單擊下一步。
在事件來源下拉式清單中選擇acs.ecs。
在事件類型下拉式清單中選擇需要訂閱的雲助手事件類型。
雲助手任務狀態事件:
ecs:CloudAssistant:TaskCompleted。在事件模式調試中,查看訂閱的事件類型的樣本。
{ "id": "45ef4dewdwe1-7c35-447a-bd93-fab****", "source": "acs.ecs", "specversion": "1.0", "subject": "acs.ecs:cn-hangzhou:123456789098****:215672", "time": "2020-11-19T21:04:41+08:00", "type": "ecs:CloudAssistant:TaskCompleted", "aliyunaccountid": "123456789098****", "aliyunpublishtime": "2020-11-19T21:04:42Z", "aliyuneventbusname": "default", "aliyunregionid": "cn-hangzhou", "aliyunpublishaddr": "172.25.XX.XX", "data": { "commandId": "c-hz045**********", "commandName": "hello-linux.sh", "exitCode": "0", "finishTime": "2023-12-14T07:39:48Z", "instanceId": "i-bp114***************", "invocationStatus": "Success", "invokeId": "t-hz045**********", "ownerId": "158*************", "playerUid": "256***************", "repeatMode": "Once", "repeats": "1", "startTime": "2023-12-14T07:39:48Z", "errorCode": "0", "errorDesc": "" } }在樣本下方,單擊測試類比事件觸發。如果顯示匹配通過,事件可正常被觸發,表示事件可正常觸發。
配置事件目標,選擇不同的服務類型,設定推送情境。
更多推送情境說明,請參見設定推送情境。
使用CloudMonitor訂閱雲助手事件
在左側導覽列,選擇。
在訂閱策略頁簽,單擊建立訂閱策略。
在建立訂閱策略頁面,設定訂閱雲助手事件的相關參數。
本樣本僅展示雲助手事件的相關參數,更多參數說明,請參見訂閱策略參數說明。
訂閱類型:選擇系統事件。
訂閱範圍:
產品:選擇Elastic Compute Service。
事件類型:選擇通知。
事件名稱:選擇雲助手任務狀態事件。
設定完成後,單擊提交。
當相關事件觸發時,將會收到相關事件的通知。您也可以通過調用DescribeSystemEventAttribute查詢系統事件詳情。
雲助手事件說明
雲助手任務狀態事件
事件描述
命令或指令碼運行需要一定時間,雲助手任務狀態事件用於加強對任務完成情況的感知,可以利用該事件達到以下目的:
在任務失敗或任務處於完成狀態時,可獲得通知,以便設定警示、處理任務等。
使用輪詢會佔用使用者的API調用額度,通過事件訂閱的方式可以避免該問題。
輪詢的過程較長,容易被應用發布所打斷。使用事件規避狀態中斷,可以降低使用者的複雜度。
事件觸發條件&限制
事件觸發條件:使用者使用RunCommand/InvokeCommand觸發任務執行,雲助手內部監聽任務完成狀態,處於完成狀態的任務則發出該事件。
事件使用限制:
僅在雲助手在執行個體上的任務執行狀態(InvocationStatus)變為以下狀態時,才會觸發發送事件。
Aborted:任務下發失敗
Success:任務執行成功
Failed:任務執行失敗
Invalid:任務內容非法
Timeout:任務執行逾時
Cancelled:任務執行取消
Terminated:任務執行被終止
在OpenAPI(DescribeInvocations/DescribeInvocationResults)中,事件查詢的返回資料格式為
array<object>。在本事件中,上報的是一個任務在單個執行個體上的執行狀態,而不是多個任務。
事件欄位說明
欄位 | 說明 | 樣本值 |
instanceId | 執行個體ID。 | i-bp114*************** |
invokeId | 命令執行ID。 | t-hz045********** |
commandId | 命令ID。 | c-hz045********** |
commandName | 命令名稱。 | ACS-ECS-ResetPassword-for-linux.sh |
ownerUid | 執行命令的執行個體歸屬帳號。 | 158************* |
playerUid | 角色扮演者帳號ID。 | 256*************** |
repeatMode | 命令執行的方式。如果同時設定了InstanceId參數,則不生效。取值範圍:
| Once |
repeats | 命令在該執行個體上執行的次數。
| 0 |
invocationStatus | 命令執行的狀態。
| Success |
exitCode | 命令進程的退出碼。 | 0 |
startTime | 任務開始時間。 | 2023-12-20T06:15:55Z |
finishTime | 任務結束時間。 | 2023-12-20T06:15:59Z |
errorCode | 命令下發失敗或執行失敗原因code。 | 0 |
errorDesc | 命令下發失敗或執行失敗的原因詳情。 | - |
雲助手首次心跳事件
事件描述
雲助手的心跳是判定執行個體作業系統狀態的手段之一。其中,首次心跳可以用來判斷作業系統真正啟動的時間,作為執行個體健康狀態、下發雲助手命令等情境的參考。
相比通過輪詢DescribeCloudAssistantStatus的方式查看心跳是否上報,雲助手首次心跳事件可以規避以下問題:
輪詢查詢DescribeCloudAssistantStatus狀態是否變為true,實現比較複雜。如果間隔不當,可能產生過多請求,造成流控或對系統造成壓力。
由於執行個體作業系統真正的啟動時間差別較大,部分Windows執行個體偶爾需要5分鐘才能啟動完成,輪詢不容易控制總時間長度。
DescribeCloudAssistantStatus對狀態的判斷有一定的滯後性,從有心跳到無心跳會有2分鐘的滯後,所以對於重啟執行個體的情境,DescribeCloudAssistantStatus不容易識別。
事件觸發條件&限制
事件觸發條件:在雲助手心跳上報時,當判定為首次心跳時觸發事件,由雲助手服務端發送雲助手用戶端啟動後的首次心跳事件。
雲助手版本限制:
Windows執行個體:雲助手版本必須高於1.0.0.149。
Linux執行個體:雲助手版本必須高於1.0.2.569。
低版本雲助手不會通過每分鐘一次的心跳上報介面上報心跳,或不會上報index欄位,因此不能準確識別出啟動後的首次心跳,暫時不對這些低版本做支援。
事件欄位說明
欄位 | 說明 | 樣本值 |
bizEventId | 事件ID。 | ea33c3e2-aaf0-****-****-5d49b1ecce99 |
vmName | 事件關聯的執行個體ID。 | i-bp19**************** |
extensions | 業務擴充資訊。 | - |
azone | 可用性區域。 | cn-shenzhen-e |
region | 地區。 | cn-shenzhen |
agentVersion | 雲助手Agent版本。 | 2.2.3.529 |
uptime | 作業系統已啟動的時間(毫秒) | 19000 |
雲助手任務執行Output投遞結果事件
事件描述
執行命令時,命令執行輸出結果最多保留24 KB,超出部分會自動截斷。
當期望擷取完整的執行Output,或需要持久化儲存執行Output時,可以配置命令執行達到終態時,將輸出結果投遞到的OSS路徑。
利用該事件達到以下目的:
擷取Output投遞結果的通知與投遞詳情,收到投遞成功的事件通知時,可以從對應OSS中下載Output檔案,避免輪詢調用DescribeInvocations擷取結果,提升效率。
當投遞失敗時,從事件中獲得投遞失敗的詳細原因。
事件觸發條件&限制
事件觸發條件:使用者使用RunCommand/InvokeCommand觸發任務執行,指定了合法的OssOutputDelivery參數,處於完成狀態的任務則發出該事件。
事件使用限制:
僅在雲助手在執行個體上的任務執行狀態(InvocationStatus)變為以下狀態時,才會觸發發送事件。
Aborted:任務下發失敗
Success:任務執行成功
Failed:任務執行失敗
Invalid:任務內容非法
Timeout:任務執行逾時
Cancelled:任務執行取消
Terminated:任務執行被終止
雲助手版本限制:
Windows執行個體:雲助手版本必須高於2.1.4.1007。
Linux執行個體:雲助手版本必須高於2.2.4.1007。
事件欄位說明
欄位 | 說明 |
instanceId | 執行個體ID。 |
invokeId | 命令執行ID。 |
ownerUid | 執行命令的執行個體歸屬帳號。 |
playerUid | 角色扮演者帳號id。 |
repeatMode | 命令執行的方式,取值範圍:
|
repeats | 命令在該執行個體上執行的次數。
|
ossOutputDelivery | 命令執行輸出結果投遞OSS配置。 |
ossOutputUri | 命令執行輸出結果投遞到OSS的檔案URI地址。 |
status | 投遞結果狀態。
|
statusCode | 投遞狀態代碼,僅在status為Failed時返回。 |
errorCode | 投遞失敗時的錯誤碼,僅在status為Failed時返回。可能值:
|
errorInfo | 投遞失敗時的錯誤詳情,僅在status為Failed時返回。 |
應用於生產環境建議
等冪性:事件系統可能因為網路或重試導致同一事件被多次投遞,處理邏輯需要具備等冪性,即多次處理同一事件和一次處理的結果相同。可以利用事件中的
id或data.bizEventId作為唯一標識,在處理前檢查該ID是否已被處理過。重試與無效信件佇列:在配置EventBridge事件目標時,強烈建議配置重試策略和無效信件佇列。當處理函數暫時失敗時,EventBridge會自動重試;如果最終依然失敗,事件將被發送到無效信件佇列(如MNS隊列)中,供後續手動排查和恢複,避免事件丟失。
監控與警示:對事件處理函數本身進行監控。監控其執行成功率、耗時和錯誤記錄檔,並設定警示。當處理邏輯出現持久性失敗時,可以第一時間介入。
常見問題
使用EventBridge訂閱雲助手事件後,無法收到事件通知?
檢查前置條件:確認雲助手版本是否滿足要求。
檢查EventBridge規則:
登入EventBridge控制台,確認規則的事件模式是否正確,
source應為acs.ecs,type應為正確的事件類型。使用事件模式調試功能,用一個真實的事件JSON樣本測試規則是否能匹配。
檢查事件目標健康度:
在EventBridge控制台的事件規則詳情頁,查看事件目標的調用記錄和錯誤記錄檔。
確認目標服務(如Function Compute、Webhook)本身是否在正常運行,以及網路是否可達。