안녕하세요. ManVSCloud 김수현입니다.
AWS를 사용하다보면 다수 인스턴스를 대상으로 CloudWatch 경보를 등록해야할 때가 많습니다.
해당 작업은 어렵지않으나 작업량에 따라 하루를 낭비할 수도 있는 노가다성 작업이라고 생각됩니다.
이를 해결하고자 CloudWatch 경보를 자동으로 등록할 수 있도록 스크립트를 생성하게되어 공유드립니다.

Introduction
1. SNS 생성
: SNS 주제를 자동으로 생성하고 구독을 추가합니다.
(이미 생성된 주제가 있을 경우 Setting 설정 시 TOPIC에 해당 주제 이름을 입력해주시면 됩니다.)
2. IAM 연결
: Memory, Disk 경보를 위해서는 CloudWatch Agent를 설치하고 메트릭을 수집해야합니다.
이를 위해 CloudWatchAgentServerPolicy 권한이 필요합니다.
이미 역할이 존재하는 인스턴스에는 CloudWatchAgentServerPolicy 정책 여부 확인 후 해당 정책이 없으면 정책을 추가하고 역할이 존재하지 않는 인스턴스에는 CloudWatchAgentServerRole 역할을 추가합니다.
3. CloudWatch 등록
: 경보 추가가 필요한 인스턴스를 선택하고 경보로 추가할 수있습니다.
4. CloudWatch 경보 삭제
: 삭제가 필요한 CloudWatch 경보를 선택하여 한번에 삭제할 수 있습니다.
Download link
// manvscloud의 "CLOUDWATCH 경보 등록 자동화 스크립트" 다운로드 링크 http://file.manvscloud.com/ManVSCloud-Cloudwatch.zip
Pre-Use Checkpoints
※ 해당 스크립트를 실행하는 인스턴스 역할에 아래 정책이 추가되어 있는지 확인 해주세요.
AmazonEC2FullAccess IAMFullAccess CloudWatchFullAccess AmazonRDSReadOnlyAccess ElasticLoadBalancingReadOnly AmazonSNSFullAccess
※ AWS CLI를 설치해주세요.
README
========================================
Updated : 2022-04-17
Maker : 김수현(ManVSCloud)
Blog : https://manvscloud.com/
========================================
#####################################################################################
* W a r n i n g *
반드시 <사용 설명서> 부분은 읽고 사용해주세요.
#####################################################################################
<사용 설명서>
================================================================================
* 실행 파일 : ManVSCloud-Cloudwatch/bin/start
* 설정 파일(Config) : ManVSCloud-Cloudwatch/Setting
* 해당 스크립트를 실행하는 인스턴스 역할에는 아래 정책이 추가되어있어야 사용 중 문제가 발생하지 않습니다.
AmazonEC2FullAccess
IAMFullAccess
CloudWatchFullAccess
AmazonRDSReadOnlyAccess
ElasticLoadBalancingReadOnly
AmazonSNSFullAccess
1. http://file.manvscloud.com/ManVSCloud-Cloudwatch.zip 을 다운받습니다.
2. 압축을 풀고 Setting 파일에서 경보 수치를 수정합니다.
REGION : AWS 리전입니다. (ap-northeast-2)
ACCOUNT : AWS 계정ID 입니다. (123412415515)
TOPIC : SNS 주제 이름입니다. (manvscloud)
PROTOCOL : SNS 구독에 사용될 프로토콜 입니다. (email)
ENDPOINT : 위 프로토콜에 맞는 값을 써줍니다. (cloudwatch@gmail.com)
PROTOCOL2 : SNS 구독에 사용될 추가 프로토콜 입니다. (http)
ENDPOINT2 : http://cloudwatch.com/webhook.php
THRESHOLD : 경보 수치입니다. export C_THRESHOLD=90 로 설정할 경우 CPU가 90% 이상 사용될 경우 경보가 발생합니다.
PERIOD : 메트릭 또는 표현식을 평가하는 데 걸리는 시간입니다. (초 단위)
3. bin 파일 아래 Auto-Generated를 수정하여 원하는 메트릭만 경보 추가를 할 수 있습니다.
주석 제거 = 경보
($INCLUDE/cpu)
주석 = 경보 추가 제외
(#$INCLUDE/cpu)
4. bin 파일 아래 start를 실행해주면 스크립트가 실행됩니다.
start 실행 시 5가지 기능 선택이 가능합니다.
1. SNS 생성 : SNS 를 생성합니다.
2. IAM 연결 : IAM 역할 및 정책을 연결합니다.
3. CloudWatch 등록 : CloudWatch 경보를 추가합니다.
단, CloudWatch 등록을 사용 전 1,2가 먼저 진행되어야하며 Disk, Memory 경보를 추가할 경우
CloudWatch 경보에 추가할 인스턴스 내에 CloudWatch Agent가 설치 및 실행되어 있어야합니다.
4. CloudWatch 경보 삭제 : 추가되어있는 CloudWatch 경보를 삭제합니다.
5. 취소 : 실행 중인 스크립트를 취소합니다.
* CloudWatch Agent 설치 가이드 : https://manvscloud.com/ 블로그에 포스팅 예정
================================================================================
<Script 연결 구조>
======================================================
start ─ Setting ─ message
│
├── createSNS ─ subscribeSNS
│
│
├── checkIAM ─ associateIAM, nullIAM
│ └── iamList
│
├── Auto-Generated
│ └── Listing ─ cpu, status
│ └── Lec2List ─ Ldisk, Lmemory
│ └── Wec2List ─ Wdisk, Wmemory
│ └── rdsList ─ rds-cpu
│ └── elb-tgList ─ unhealthy
│
├── delAlarms ─ delAlarmList
├── tmp
└── logs ─ iam.log, sns.log
======================================================
<Script별 기능>
======================================================
start : 전체 스크립트와 연결된 실행기
Setting : 기본 설정값을 세팅하는 Config 파일
message : 스크립트 실행 전 알림/경고 메시지
createSNS : SNS 주제 생성
subscribeSNS : SNS 구독을 추가합니다.
checkIAM : EC2 인스턴스에 연결된 IAM 역할을 체크하고 역할 및 정책 추가
associateIAM: EC2 인스턴스에 연결된 역할에 CloudWatchAgentServerPolicy 정책이 없을 경우 정책 추가
nullIAM : EC2 인스턴스에 IAM 역할이 없을 경우 역할 추가
iamList : 각 EC2와 연결된 IAM 역할 리스트 확인
Auto-Generated : CloudWatch 경보 모니터링 추가
Listing : CloudWatch 경보에 등록할 EC2 인스턴스 선택
Lec2List : Unix/Linux 인스턴스 선택
Wec2List : Windows 인스턴스 선택
cpu : CPU 경보 추가
status : EC2 상태 체크 경보 추가
Ldisk : Unix/Linux Disk 사용량 경보 추가
Lmemory : Unix/Linux Memory 사용량 경보 추가
Wdisk : Windows Disk 사용량 경보 추가
Wmemory : Windows Memory 사용량 경보 추가
rdsList : RDS 인스턴스 선택
rds-cpu : RDS CPU 경보 추가
elb-tgList : ELB의 Target Group 확인
unhealthy : ELB Target Group의 Unhealthy 경보 추가
delAlarms : CloudWatch 경보 삭제
delAlarmList : 삭제할 CloudWatch 경보 선택
======================================================
<ManVSCloud-Cloudwatch 경보 자동 등록기 구조>
======================================================
.(ManVSCloud-Cloudwatch)
├── bin
│ ├── Auto-Generated
│ └── start
├── IAM
│ ├── checkIAM
│ └── include
│ ├── associateIAM
│ └── nullIAM
├── include
│ ├── 1st
│ ├── cpu
│ ├── delAlarms
│ ├── last
│ ├── Ldisk
│ ├── Lmemory
│ ├── message
│ ├── rds-cpu
│ ├── status
│ ├── unhealthy
│ ├── Wdisk
│ └── Wmemory
├── ListFile
│ ├── delAlarmList
│ ├── elb-tgList
│ ├── iamList
│ ├── Lec2List
│ ├── Listing
│ ├── rdsList
│ └── Wec2List
├── logs
│ ├── iam.log
│ └── sns.log
├── README.txt
├── Setting
├── SNS
│ ├── createSNS
│ └── subscribeSNS
└── tmp
======================================================
=========================================================
Copyright 2022. ManVSCloud All right reserved.
https://manvscloud.com
=========================================================
A to Z
- 위 [Pre-Use Checkpoints] 부분의 조건이 완료되었다는 가정하에 진행됩니다.
먼저 ManVSCloud-Cloudwatch.zip 를 다운로드하여 압축을 해제해줍니다.
[root@ip-10-100-10-105 ~]# wget http://file.manvscloud.com/ManVSCloud-Cloudwatch.zip --2022-04-17 08:09:08-- http://file.manvscloud.com/ManVSCloud-Cloudwatch.zip Resolving file.manvscloud.com (file.manvscloud.com)... 23.200.75.106, 23.200.75.122 Connecting to file.manvscloud.com (file.manvscloud.com)|23.200.75.106|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 21838 (21K) [application/x-zip-compressed] Saving to: ‘ManVSCloud-Cloudwatch.zip’ 100%[=============================================================================================================================================================================>] 21,838 --.-K/s in 0s 2022-04-17 08:09:08 (327 MB/s) - ‘ManVSCloud-Cloudwatch.zip’ saved [21838/21838] [root@ip-10-100-10-105 ~]# unzip ManVSCloud-Cloudwatch.zip
이후 아래와 같은 경로에서 Setting 값으로 기본 설정값들을 설정해줍니다.
필수 입력 사항부분은 반드시 입력해야 정상적으로 스크립트가 실행됩니다.
[root@ip-10-100-10-105 ~]# cd ManVSCloud-Cloudwatch/ [root@ip-10-100-10-105 ManVSCloud-Cloudwatch]# vi Setting
아래 경로에서 Auto-Generated를 수정할 수 있습니다.
Auto-Generated 파일 내 #$INCLUDE/status 와 같은 부분 앞에 #(주석)을 제거 해주어야 정상적으로 해당 메트릭의 경보가 자동 추가됩니다.
반대로 필요없는 메트릭은 #(주석) 처리하여 제외할 수 있습니다.
[root@ip-10-100-10-105 ManVSCloud-Cloudwatch]# cd bin/ [root@ip-10-100-10-105 bin]# vi Auto-Generated
마지막으로 start 파일을 실행하여 1. SNS 생성, 2. IAM 연결, 3. CloudWatch 등록, 4. CloudWatch 경보 삭제 작업이 가능합니다.
[root@ip-10-100-10-105 bin]# ./start
Personal Comments
지금까지” CloudWatch 경보 등록 자동화” 스크립트 공유 및 사용 방법에 대해 포스팅하였습니다.
개인적으로 테스트만 끝낸 상태라 아직 버그가 존재할 수 있습니다.
사용 중 문의하실 부분이나 버그가 있다면 언제든지 댓글로 공유 부탁드립니다.
긴 글 읽어주셔서 감사합니다.
