在本文中,我們將討論如何建立 AWS lambda 函數,以便在 AWS 執行個體的 CPU 使用率達到 50% 時發送 Slack 通知。
AWS Lambda 是 Amazon Web Services (AWS) 提供的無伺服器運算服務。它允許您運行程式碼,而無需自己配置或管理伺服器。
它是事件驅動的,也就是您的程式碼執行以回應其他 AWS 服務觸發的事件,例如在 s3 中完成的檔案上傳、來自 Amazon API Gateway 的 HTTP 請求或各種其他觸發器。
在此,我們將討論如何設定Amazon Cloudwatch 來監控和收集EC2 實例的指標,基於這些指標的Cloudwatch 警報在滿足特定閾值或條件時觸發通知,Amazon Simple Notification 服務接收這些通知,最後是一個訂閱SNS 主題的lambda 函數,該函數將處理通知並傳送一條slack 訊息。
為了理解這一點,讀者應該有基本的知識和理解
建立一個新的go項目,隨意命名,我在你的main.go檔案中將我的命名為“lambdaFunction”,貼上以下程式碼
import ( "bytes" "context" "encoding/json" "fmt" "github.com/aws/aws-lambda-go/events" "github.com/aws/aws-lambda-go/lambda" "net/http" ) type slackMessage struct { Text string `json:"text"` } func handleRequest(ctx context.Context, snsEvent events.SNSEvent) error { webhookURL := "https://hooks.slack.com/services/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" for _, record := range snsEvent.Records { snsRecord := record.SNS sendSlackNotification(webhookURL, snsRecord.Message) } return nil } func sendSlackNotification(webhookURL, message string) { slackMessage := slackMessage{Text: "Cpu usage is above 50%" + message} slackBody, _ := json.Marshal(slackMessage) req, err := http.NewRequest(http.MethodPost, webhookURL, bytes.NewBuffer(slackBody)) if err != nil { fmt.Printf("Error creating request: %v\n", err) return } req.Header.Set("Content-Type", "application/json") client := &http.Client{} resp, err := client.Do(req) if err != nil { fmt.Printf("Error sending request: %v\n", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { fmt.Printf("Error response from slack: %v\n", resp.StatusCode) } else { fmt.Printf("Successfully sent Slack notification: %v\n", resp.StatusCode) } } func main() { lambda.Start(handleRequest) }
運行 go mod
讓我們試著了解發生了什麼事
handleRequest 函數
sendSlackNotification 函數
要取得允許您向 Slack 發送訊息的 Slack Webhook URL,請導航至 https://api.slack.com/apps。在繼續之前,請確保您已登入 Slack 帳戶。
下一步是為我們的 Go 應用程式建立部署套件
我們將建立該應用程式。
#!/bin/sh ./main
使引導程式檔案可執行
上傳lamba函數
在下一步中,我們將為 Lambda 函數配置觸發器。此觸發器定義了將提示函數向 Slack
發送訊息的事件如我之前提到的,當虛擬機器的 CPU 使用率 >= 50% 時觸發
要實現此功能,第一步涉及建立 EC2 執行個體。
完成後,我們需要設定 Cloudwatch 來監控和收集指標
在條件部分
我們將回到我們的 lambda 函數
為了測試這是否有效,我們需要對我們的虛擬機器進行某種壓力測試。此測試會產生高 CPU 負載。為了執行此測試,我們將使用 Linux 中的「stress」工具。
首先,我們需要在 EC2 inatance 中安裝「stress」工具。連接到 EC2 執行個體並執行以下命令
sudo apt-get update
sudo apt-get install 壓力
使用以下指令對你的CPU進行壓力測試
壓力 --cpu 4 --逾時 300
此範例使用 4 個 CPU 工作執行緒(並行進程或執行緒的數量)持續 300 秒(5 分鐘)。您可以根據自己的需求調整工人和輔助人員的數量。
打開 Slack 並等待,您應該會收到如下所示的警報
在執行壓力測試時,您可能會注意到 Cloudwatch 的狀態變更為“資料不足”,這可能會導致警報延遲一點。要解決這個問題
我相信您會覺得這很有趣且內容豐富。如果有任何錯誤或任何部分沒有解釋清楚,或者您認為我遺漏了某些內容,請隨時與我們聯繫。您的回饋非常有價值。謝謝!
可以在此處找到 github 儲存庫的連結
以上是使用 Go AWS Lambda 函數發送 Slack 通知的詳細內容。更多資訊請關注PHP中文網其他相關文章!