CloudWatch 알람 알림을 Slack으로 설정
7064 단어 슬랙람다CloudWatchAWS
에서 맞춤 메트릭을 도입했습니다.
이제 알림을 설정하면 등록한 이메일 주소에 대한 알림이 표시됩니다.
이제는 간과하기 쉽기 때문에 이번에는 Slack에게 알리고 싶습니다.
CloudWatch → Lambda → Slack
흐름으로 Slack에게 알립니다.
CloudWatch의 경고를 Lambda에서 받고 Slack에 흘리는 형태입니다.
알람 설정
우선 알람을 설정합니다.
모니터링하려는 메트릭에 체크 표시

그래프화된 지표 탭 열기
베일 마크를 클릭합니다.

알람 등록

알림 메일은 수신 가능한 이메일 주소를 등록합니다.
알림은 상태가 전환될 때 한 번만 발생합니다.
따라서, OK와 경고의 통지는 세트로 등록해 두는 것을 추천합니다(+부족도 등록해 두어도 좋습니다). 부족 상태는 알람 설정 대상의 메트릭스가 계측 불가능한 상태가 되었을 때입니다.
예)
OK→경고 경고의 통지가 옵니다.
경고→OK OK의 통지가 옵니다.
이제 설정한 이메일 주소에 대해 알림이 전송됩니다.
슬랙 준비
htps : // s ck. 코 m/아 ps
에서 "Incoming WebHooks"를 "Add Configuration"을 눌러 추가합니다.

알림할 채널을 선택합니다(cloudwatch 채널 선택됨).

등록하면, 이하의 「Webhook URL」이 발행되므로 기억해 둔다.

Lambda 설정
일단 요금 확인. 뭐 알람만으로 그렇게 가지 않기 때문에 무료 테두리로 전혀 갈 수 있습니다.
htps : // 아 ws. 아마존. 이 m/jp/ぁmb다/p 리신 g/
무료 이용 프레임
1,000,000개의 요청
USD/월
400GB-초
매월 컴퓨팅 시간.
Lambda 무료 티어는 12개월 동안 AWS 무료 티어가 만료된 후에도 자동으로 만료되지 않습니다. 기존 및 신규 AWS 고객은 무기한으로 사용할 수 있습니다.
IAM KMS로 암호화 키로 WebhookURL 암호화
※무료 프레임에서 사용하고 싶은 분은 여기를 헹구고 「함수 작성」으로 옮겨 주세요. 다음과 같은 느낌으로 요금이 부과됩니다.
Lambda의 cloudwatch-alarm-to-slack에서 무료라고 생각하고 KMS 암호화 키를 사용하면 2 엔 걸렸기 때문에 함수 수정했다
IAM > 암호화 키 > 키 만들기에서 암호화 키를 만듭니다.
이름은 'cloudwatch-alarm-to-slack'입니다.

태그명은 적당하게.

키 관리 및 사용 권한을 설정합니다. 이번에는 어느 쪽도 「admin」으로 했습니다.


다음과 같이 할 수 있었습니다.

EC2에 로그인하고 다음 명령을 실행합니다 (aws configure하지 않은 경우).
$ aws kms encrypt --key-id alias/cloudwatch-alarm-to-slack --plaintext "hooks.slack.com/services/************************"
잘하면 다음과 같이 암호화 된 WebhookURL을 얻을 수 있습니다.
「CiphertextBlob」이 그렇습니다.
{
"KeyId": "arn:aws:kms:ap-northeast-1:395:key/**************",
"CiphertextBlob": "*********************************"
}
※아래와 같이 not found라고 할 때는 암호화 키의 리전을 확인해 보세요.
$ aws kms encrypt --key-id alias/cloudwatch-alarm-to-slack --plaintext "hooks.slack.com/services/************************"
An error occurred (NotFoundException) when calling the Encrypt operation: Alias arn:aws:kms:ap-northeast-1:*********:alias/cloudwatch-alarm-to-slack is not found.
함수 작성
cloudwatch-alarm-to-slack로 설정합니다(node.js입니다).

함수 등록
다음과 같이 등록했습니다.



"slackChannel"은 흘리고 싶은 채널.
"kmsEncryptedHookUrl"은 암호화된 WebhookURL을 설정한다.
등록하면 Slack에게 경고를 알립니다.
코드 수정
processEvent()의 slackMessage를 편집하여 알림 메시지를 잡을 수 있습니다.
다음과 같이 설정했습니다.
function processEvent(event, callback) {
const message = JSON.parse(event.Records[0].Sns.Message);
const alarmName = message.AlarmName;
//var oldState = message.OldStateValue;
const newState = message.NewStateValue;
const reason = message.NewStateReason;
var stamp;
if (newState === "ALARM") {
stamp = ":warning:";
} else {
stamp = ":ok_woman:";
}
const slackMessage = {
channel: slackChannel,
text: `*${stamp} ${newState}: ${alarmName} ${stamp}*\n${reason}`,
};
게다가 KMS 키로 암호화하지 않는 (무료 프레임으로 사용한다) 경우는 Lambda의 cloudwatch-alarm-to-slack에서 무료라고 생각하고 KMS 암호화 키를 사용하면 2 엔 걸렸기 때문에 함수 수정했다 와 같이 Lambda의 함수를 수정하면 OK입니다.
확인
일부러 NG, OK가 되도록 괴롭히고 slack에 도착할지 확인합니다.

좋네요.
이상입니다.
Reference
이 문제에 관하여(CloudWatch 알람 알림을 Slack으로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hf7777hi/items/e0f43f0fb7e2effa0af8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
htps : // s ck. 코 m/아 ps
에서 "Incoming WebHooks"를 "Add Configuration"을 눌러 추가합니다.

알림할 채널을 선택합니다(cloudwatch 채널 선택됨).

등록하면, 이하의 「Webhook URL」이 발행되므로 기억해 둔다.

Lambda 설정
일단 요금 확인. 뭐 알람만으로 그렇게 가지 않기 때문에 무료 테두리로 전혀 갈 수 있습니다.
htps : // 아 ws. 아마존. 이 m/jp/ぁmb다/p 리신 g/
무료 이용 프레임
1,000,000개의 요청
USD/월
400GB-초
매월 컴퓨팅 시간.
Lambda 무료 티어는 12개월 동안 AWS 무료 티어가 만료된 후에도 자동으로 만료되지 않습니다. 기존 및 신규 AWS 고객은 무기한으로 사용할 수 있습니다.
IAM KMS로 암호화 키로 WebhookURL 암호화
※무료 프레임에서 사용하고 싶은 분은 여기를 헹구고 「함수 작성」으로 옮겨 주세요. 다음과 같은 느낌으로 요금이 부과됩니다.
Lambda의 cloudwatch-alarm-to-slack에서 무료라고 생각하고 KMS 암호화 키를 사용하면 2 엔 걸렸기 때문에 함수 수정했다
IAM > 암호화 키 > 키 만들기에서 암호화 키를 만듭니다.
이름은 'cloudwatch-alarm-to-slack'입니다.

태그명은 적당하게.

키 관리 및 사용 권한을 설정합니다. 이번에는 어느 쪽도 「admin」으로 했습니다.


다음과 같이 할 수 있었습니다.

EC2에 로그인하고 다음 명령을 실행합니다 (aws configure하지 않은 경우).
$ aws kms encrypt --key-id alias/cloudwatch-alarm-to-slack --plaintext "hooks.slack.com/services/************************"
잘하면 다음과 같이 암호화 된 WebhookURL을 얻을 수 있습니다.
「CiphertextBlob」이 그렇습니다.
{
"KeyId": "arn:aws:kms:ap-northeast-1:395:key/**************",
"CiphertextBlob": "*********************************"
}
※아래와 같이 not found라고 할 때는 암호화 키의 리전을 확인해 보세요.
$ aws kms encrypt --key-id alias/cloudwatch-alarm-to-slack --plaintext "hooks.slack.com/services/************************"
An error occurred (NotFoundException) when calling the Encrypt operation: Alias arn:aws:kms:ap-northeast-1:*********:alias/cloudwatch-alarm-to-slack is not found.
함수 작성
cloudwatch-alarm-to-slack로 설정합니다(node.js입니다).

함수 등록
다음과 같이 등록했습니다.



"slackChannel"은 흘리고 싶은 채널.
"kmsEncryptedHookUrl"은 암호화된 WebhookURL을 설정한다.
등록하면 Slack에게 경고를 알립니다.
코드 수정
processEvent()의 slackMessage를 편집하여 알림 메시지를 잡을 수 있습니다.
다음과 같이 설정했습니다.
function processEvent(event, callback) {
const message = JSON.parse(event.Records[0].Sns.Message);
const alarmName = message.AlarmName;
//var oldState = message.OldStateValue;
const newState = message.NewStateValue;
const reason = message.NewStateReason;
var stamp;
if (newState === "ALARM") {
stamp = ":warning:";
} else {
stamp = ":ok_woman:";
}
const slackMessage = {
channel: slackChannel,
text: `*${stamp} ${newState}: ${alarmName} ${stamp}*\n${reason}`,
};
게다가 KMS 키로 암호화하지 않는 (무료 프레임으로 사용한다) 경우는 Lambda의 cloudwatch-alarm-to-slack에서 무료라고 생각하고 KMS 암호화 키를 사용하면 2 엔 걸렸기 때문에 함수 수정했다 와 같이 Lambda의 함수를 수정하면 OK입니다.
확인
일부러 NG, OK가 되도록 괴롭히고 slack에 도착할지 확인합니다.

좋네요.
이상입니다.
Reference
이 문제에 관하여(CloudWatch 알람 알림을 Slack으로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hf7777hi/items/e0f43f0fb7e2effa0af8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ aws kms encrypt --key-id alias/cloudwatch-alarm-to-slack --plaintext "hooks.slack.com/services/************************"
{
"KeyId": "arn:aws:kms:ap-northeast-1:395:key/**************",
"CiphertextBlob": "*********************************"
}
$ aws kms encrypt --key-id alias/cloudwatch-alarm-to-slack --plaintext "hooks.slack.com/services/************************"
An error occurred (NotFoundException) when calling the Encrypt operation: Alias arn:aws:kms:ap-northeast-1:*********:alias/cloudwatch-alarm-to-slack is not found.
function processEvent(event, callback) {
const message = JSON.parse(event.Records[0].Sns.Message);
const alarmName = message.AlarmName;
//var oldState = message.OldStateValue;
const newState = message.NewStateValue;
const reason = message.NewStateReason;
var stamp;
if (newState === "ALARM") {
stamp = ":warning:";
} else {
stamp = ":ok_woman:";
}
const slackMessage = {
channel: slackChannel,
text: `*${stamp} ${newState}: ${alarmName} ${stamp}*\n${reason}`,
};
Reference
이 문제에 관하여(CloudWatch 알람 알림을 Slack으로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hf7777hi/items/e0f43f0fb7e2effa0af8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)