使用亞馬遜雲科技Amazon SNS&SQS實現Amazon CloudWatch持續報警

全球IT資訊發表於2023-03-30

Amazon CloudWatch可實時監控您的亞馬遜雲科技資源以及您在亞馬遜雲科技上執行的應用程式。您可以使用CloudWatch收集和跟蹤指標,這些指標是您可衡量的相關資源和應用程式的變數。您可以建立警報,利用這些警報監視指標,當超出閾值時,它們會傳送通知或者對您所監控的資源自動進行更改。例如,您可以監控您的Amazon EC2例項的CPU使用率以及磁碟讀寫情況,然後使用此資料確定您是否應啟動其它例項來處理增加的負載。您還可以使用此資料停止未完全利用的例項以節省開支。

 但是,Amazon CloudWatch Alarm僅會在警報從【正常】狀態轉變為【告警】狀態時觸發一次警報。此後,即使警報仍然處於【告警】狀態,也不會有新的通知產生。如何基於Amazon SNS和Amazon SQS,在警報被觸發後按照一定的時間頻率來重複報警,實現持續報警的效果,確保您及時知曉系統中的問題。

本方案主要會使用到以下服務:

  • Amazon CloudWatch

  • Amazon SNS

  • Amazon SQS

  • Amazon Lambda

 首先,建立Amazon CloudWatch Alarm,當警報觸發時,配置將警報資訊傳送至Amazon SNS,實際上告警操作型別除了Amazon SNS以外,還支援Amazon EC2操作,擴充套件Auto Scaling組以及Amazon Systems Manager中的一些操作。這裡使用Amazon SNS,主要是為了後續串聯Amazon SQS。

 接著,為Amazon SNS配置型別為Amazon SQS的訂閱,這樣便可將警報資訊傳輸至Amazon SQS。

 最後,將Amazon SQS配置為Amazon Lambda的觸發器,這樣當警報資訊傳輸至Amazon SQS時,就會觸發Amazon Lambda。

 其中核心邏輯有兩個:

 一、Amazon Lambda與Amazon SQS整合使用的特性:您可以使用Lambda函式來處理某個Amazon SQS佇列中的訊息。Lambda事件源對映支援標準佇列和先進先出(FIFO)佇列。在Amazon SQS中,您可以透過將來自一個應用程式元件的任務傳送到一個佇列中並非同步處理它們來進行分載。Lambda輪詢佇列並同步呼叫您的Lambda函式,其中有包含佇列訊息的事件。Lambda按批次讀取訊息,併為每個批次呼叫一次函式。當您的函式成功處理一個批次後,Lambda就會將其訊息從佇列中刪除。

 二、Amazon SQS可見性超時:當使用者接收並處理來自某個佇列的訊息時,訊息將保留在該佇列中。Amazon SQS不會自動刪除訊息。因為Amazon SQS是分散式系統,所以無法保證使用者實際收到訊息(例如,由於使用者應用程式問題)。因此,使用者在接收和處理訊息後必須從佇列中刪除該訊息。在收到訊息後,訊息將立即保留在佇列中。為防止其他使用者再次處理訊息,Amazon SQS會將可見性超時,即Amazon SQS阻止其他使用者接收並處理訊息的一段時間。訊息的預設可見性超時為30秒。最小為0秒。最長為12小時。

 在本解決方案中,Lambda的程式碼邏輯為檢查警報狀態,當警報仍未修復時,會主動丟擲一個異常,這樣Lambda就會認為函式並未成功處理,也不會自動從佇列中刪除訊息,隨即使用Amazon SQS可見性超時來控制間隔時間,達到預計時間後便會重複報警,直到警報被修復。當然Amazon SQS本身也存在一些限制,訊息最多能在佇列中保留14天。如果您需要讓警報機制保持超過14天,我們可以使用另一個方案。

 除了解決方案中使用郵件完成警報的通知,您也可以實現簡訊、企業微信、釘釘、飛書等多種方式的通知。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70007680/viewspace-2942657/,如需轉載,請註明出處,否則將追究法律責任。

相關文章