CloudWatch 알람 알림을 Slack으로 설정

CloudWatch 맞춤 측정항목 모니터링
에서 맞춤 메트릭을 도입했습니다.

이제 알림을 설정하면 등록한 이메일 주소에 대한 알림이 표시됩니다.
이제는 간과하기 쉽기 때문에 이번에는 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에 도착할지 확인합니다.


좋네요.

이상입니다.

좋은 웹페이지 즐겨찾기