天天看點

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

aws cloudwatch 預設隻支援郵件告警,時效性比較低。本方案是使用 cloudwatch 如何內建第三方如微信、釘釘、等支援api操作的即時聊天軟體,以下以微信告警為例。

在這篇文章中,我将會介紹如何通過 amazon sns 和 aws lambda 來實作将 aws cloudwatch 告警資訊發送到微信。

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

aws-cloudwatch-wechat

本方案中 cloudwatch 接收 ec2 運作名額并進行監控。當 ec2 名額超出設定門檻值後,cloudwatch 觸發告警事件,并将事件消息通過 sns 發送到 lambda 函數。lambda函數執行使用者自定義的代碼,包括:解析告警消息并發送到企業微信、釘釘機器人、或者 prometheus 等平台。

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

架構中 aws 服務簡介:

amazon cloudwatch 可以用來收集 aws 包括 ec2 、 rds 、 eks 等各種服務運作日志也可以收集使用者應用程式日志,可以作為 aws 上日志資料集散地。同時在 cloudwatch 上可以設定基于名額的告警、基于時間和事件的規則,它可以與 amazon sns 和 lambda 等其他aws服務進行使用。

aws lambda 是無伺服器的函數計算服務。通過 aws lambda ,無需預置或管理伺服器即可運作代碼。借助 lambda ,您幾乎可以為任何類型的應用程式或後端服務運作代碼,而且完全無需管理。您可以将您的代碼設定為自動從其他 aws 服務如: cloudwatch 、 sns 等觸發,或者直接從任何 web 或移動應用程式調用。

amazon sns 是一項用于應用與應用之間以及應用與人之間通信的完全托管型消息收發服務。

注冊企業微信賬号

在企業微信中建立應用

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

建立完成後記錄應用 secret

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

企業微信告警流程

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

擷取 access_token ,參考微信官方說明文檔

示例代碼:

緩存和重新整理 access_token,然後調用具體的業務接口,示例代碼:

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔
企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔
企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

這裡我建立兩種訂閱,一種基于郵件(發送郵箱連結确認),一種基于lambda。

(1)基于郵件

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

郵箱連結确認:

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔
企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

(2)基于lambda

建立aws lambda 函數

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔
企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

配置 lambda 環境變量(可選)

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

建立 corpid 和 corpsecret 環境變量,根據從企業微信擷取的值填充(可選)

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

建立 lambda 協定的訂閱

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔
企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔
企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

本例中使用 python requests 庫發送 post 請求,目前有兩種辦法實作:

直接使用 vendored 中的 requests ,但該方法2021年1月30日以後将不能使用。故不做推薦。

獨立安裝 requests 庫,需要将包和 lambda 代碼一起上傳到 aws lambda 執行環境。以使用虛拟環境來安裝函數依賴為例。

具體步驟如下:

關于虛拟環境使用和基本操作,詳見:

底層虛拟環境 virtualenv

linux中多版本python與virtualenv的結合使用

virtualenvwrapper 操作虛拟環境

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

選擇要監控的 ec2 監控頁籤,建立警報。(下圖是中國區控制台界面, aws global 控制台界面略有不同)

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

選擇前面步驟建立的 sns 主題,并選擇合适的監控告警名額

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

測試告警接收

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

如上圖所示, cpu 使用率已經超過設定門檻值, cloudwatch 發出告警。

在 cloudwatch 日志組中檢視 lambda 日志

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

收到告警郵件

企業微信接收 Amazon CloudWatch 告警企業微信接收 Amazon CloudWatch 告警方案擷取方案架構使用企業微信接收 CloudWatch 告警參考文檔

收到微信報警

企業微信、釘釘接收 amazon cloudwatch 告警

aws 使用lambda實作企業微信報警

繼續閱讀