안녕하세요. 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 경보 등록 자동화” 스크립트 공유 및 사용 방법에 대해 포스팅하였습니다.
개인적으로 테스트만 끝낸 상태라 아직 버그가 존재할 수 있습니다.
사용 중 문의하실 부분이나 버그가 있다면 언제든지 댓글로 공유 부탁드립니다.
긴 글 읽어주셔서 감사합니다.
1 Comment
##2022-04-18
아시아 태평양 (서울)
ap-northeast-2 리전 외 다른 리전도 사용이 가능하게 되었습니다.