이 기사에서는 AWS 인스턴스의 CPU 사용률이 50%에 도달할 때 Slack 알림을 보내는 AWS 람다 함수를 생성하는 방법에 대해 설명합니다.
AWS Lambda는 Amazon Web Services(AWS)에서 제공하는 서버리스 컴퓨팅 서비스입니다. 서버를 직접 프로비저닝하거나 관리할 필요 없이 코드를 실행할 수 있습니다.
이벤트 기반입니다. 즉, s3에서 완료된 파일 업로드, Amazon API Gateway의 HTTP 요청 또는 기타 다양한 트리거와 같은 다른 AWS 서비스에 의해 트리거된 이벤트에 응답하여 코드가 실행됩니다.
여기에서는 Amazon Cloudwatch를 설정하여 EC2 인스턴스에서 측정항목을 모니터링하고 수집하는 방법, 해당 측정항목을 기반으로 특정 임계값이나 조건이 충족될 때 알림을 트리거하는 Cloudwatch 경보, Amazon Simple 알림 서비스를 설정하는 방법에 대해 설명합니다. 이러한 알림을 받고 마지막으로 SNS 주제를 구독하는 람다 함수가 알림을 처리하고 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) }
런 고 모드
무슨 일이 일어나고 있는지 이해하려고 노력합시다
handlerRequest 함수
slackNotification 보내기 기능
Slack에 메시지를 보낼 수 있는 Slack 웹훅 URL을 얻으려면 https://api.slack.com/apps로 이동하세요. 계속하기 전에 Slack 계정에 로그인했는지 확인하세요.
다음 단계는 Go 앱용 배포 패키지를 만드는 것입니다
우리는 애플리케이션을 구축할 것입니다.
#!/bin/sh ./main
부트스트랩 파일을 실행 가능하게 만듭니다
lamba 함수 업로드
다음 단계에서는 Lambda 함수에 대한 트리거를 구성하겠습니다. 이 트리거는 함수가 Slack에 메시지를 보내도록 요청하는 이벤트를 정의합니다
앞서 언급했듯이 가상 머신의 CPU 사용량이 >= 50%일 때 트리거됩니다
이 기능을 구현하기 위한 첫 번째 단계는 EC2 인스턴스를 생성하는 것입니다.
이 작업이 완료되면 측정항목을 모니터링하고 수집하도록 Cloudwatch를 구성해야 합니다
조건란에서
다시 람다 함수로 돌아가겠습니다
이것이 작동하는지 테스트하려면 VM을 일종의 스트레스 테스트에 두어야 합니다. 이 테스트는 높은 CPU 로드를 생성합니다. 이 테스트를 수행하기 위해 Linux의 "스트레스" 도구를 사용할 것입니다.
먼저 EC2 inatance.connect에 "스트레스" 도구를 설치하고 EC2 인스턴스에 연결하고 다음 명령을 실행해야 합니다
sudo apt-get 업데이트
sudo apt-get 설치 스트레스
다음 명령을 사용하여 CPU 스트레스 테스트를 수행하세요
스트레스 --cpu 4 --timeout 300
이 예에서는 300초(5분) 동안 4개의 CPU 작업자(병렬 프로세스 또는 스레드 수)를 사용합니다. 작업자 수와 세컨드 수를 원하는 대로 조정할 수 있습니다.
Slack을 열고 기다리면 다음과 같은 알림이 표시됩니다
스트레스 테스트를 실행하는 동안 Cloudwatch 상태가 '데이터 부족'으로 변경되어 경보가 약간 지연될 수 있습니다. 이 문제를 해결하려면
이 내용이 즐겁고 유익했다고 믿습니다. 오류가 있거나 명확하게 설명되지 않은 부분이 있거나 제가 놓친 부분이 있다고 생각되면 언제든지 연락해 주세요. 귀하의 의견은 매우 소중합니다. 감사합니다!
github 저장소 링크는 여기에서 확인하세요
위 내용은 Go AWS Lambda 함수를 사용하여 Slack 알림 보내기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!