在本文中,我们将讨论如何创建 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中文网其他相关文章!