Browsing Tag

Amazon Web Service

AWS

[AWS] Cloudwatch 경보 등록 자동화 (Automate cloudwatch alarm registration)

안녕하세요. 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 경보 등록 자동화” 스크립트 공유 및 사용 방법에 대해 포스팅하였습니다.

개인적으로 테스트만 끝낸 상태라 아직 버그가 존재할 수 있습니다.
사용 중 문의하실 부분이나 버그가 있다면 언제든지 댓글로 공유 부탁드립니다.

긴 글 읽어주셔서 감사합니다.