[진행목차]
1. 임시 인스턴스 생성
2. IAM Role 설정
3. 인스턴스에 Tag 달기
4. Agent 다운로드 및 설치
5. CloudWatch Agnet 설정파일 생성 및 파라메터 스토어 등록
6. Agent 시작
7. Windows 로그 확인
8. Windows 시스템 모니터링 확인 (Disk Usage)
9. Disk 사용율 75%시 알람 설정하기
* 참고자료 : www.youtube.com/watch?v=x7hNimXFRZ8&feature=youtu.be
1. 임시 인스턴스 생성
이번 단계에서는 임시 인스턴스를 생성합니다.
이 인스턴스는 system manager - Parameter Store에 AmazonCloudWatchAgent 설정 파일을 저장하기위한 용도로 사용합니다.
이 작업을 진행하는 동안 잠시 사용 후 , 작업이 완료되면 삭제(종료,terminate)합니다.
EC2 콘솔에 접속하여 "인스턴스 시작"을 클릭하여 새로운 인스턴스를 생성합니다.
검색창에 "windows"를 검색하고, 맨 위에있는 "Microsoft Windows Server 2019 Base"를 선택합니다.
참고로 이 버전이 아니더라도 SystemManager가 기본적으로 설치되어있는 버전은 모두 사용이 가능합니다.
인스턴스 유형은 기본으로 선택하고 "검토 및 시작"을 클릭합니다.
"시작하기"를 클릭합니다.
인스턴스를 접속하는데 필요한 키페어를 선택하는 팝업창에 사용 가능한 키 페어를 선택하고 "인스턴스 시작"을 클릭합니다.
인스턴스 시작을 확인합니다.
페이지를 닫은 후, 인스턴스 이름을 "Temp_windows"로 변경합니다.
임시로 사용할 인스턴스의 생성을 완료하였습니다.
2. EC2 IAM 설정
이번 단계에서는 SystemManager 서비스를 사용할 수 있도록 IAM 역할(Role)을 생성하고 EC2에 적용합니다.
총 2개의 역할을 생성합니다.
1. SSMforCloudWatch : 모니터링할 모든 인스턴스에 적용할 역할입니다.
2. tempRoleforParameter : 파라메터스토어에 CloudWatch Configure를 등록하기 위해 잠시 사용할 역할입니다.
2-1) 첫번째 역할 : SSMforCloudWatch
이 역할은 CloudAgent가 설치될 모든 인스턴스에 적용해야 하는 역할입니다.
이미 인스턴스에 역할이 할당되어있다면, 기존 정책에 아래에 필요한 정책을 추가하여 사용하세요.
AWS 콘솔에 로그인 후 IAM 을 검색하여 선택합니다.
왼쪽 네비게이션 바 에서 "역할" 클릭 후, "역할 만들기"를 선택합니다.
"EC2"를 선택하고 "다음:권한"을 클릭합니다.
2개의 권한을 추가해야 합니다.
먼저 검색창에 "SSM"을 검색하여 "AmazonECRoleForSSM"을 선택합니다.
두번째로 검색창에 "cloudwatchagent"를 검색하고 "CloudWatchAgentServerPolicy"를 선택합니다.
이후, "다음:태그"을 클릭합니다.
태그 추가단계입니다.
내부 규칙에 따라 태그를 추가하거나, 옵션사항이므로 빈값으로 두고 "다음:검토"를 클릭합니다.
역할 이름 "SSMforCloudWatch" 작성 후,
아래 정책에 2개의 정책이 모두 올바르게 설정 되어있는지 확인합니다.
- AmazonEC2RoleforSSM
- CloudWatchAgentServerPolicy
"역할만들기"를 클릭합니다.
이렇게 생성된 역할을 EC2인스턴스에 할당합니다.
콘솔 상단 "서비스"를 클릭하고, "EC2"를 검색하여 EC2 콘솔에 접속합니다.
왼쪽 네비게이션 바에서 "인스턴스"를 클릭합니다.
이후 모니터링할 서버를 선택하고 상단 "작업" -> "인스턴스 설정" -> "IAM 역할 연결/바꾸기"를 클릭합니다.
IAM 콘솔에서 생성한 IAM역할(SSMforCloudWatch)을 선택하고 "적용"을 클릭합니다.
모니터링을 위한 IAM 역할 생성 및 할당이 완료되었습니다.
2-2) 두번째 역할 : tempRoleforParameter
왼쪽 네비게이션 바 에서 "역할" 클릭 후, "역할 만들기"를 선택합니다.
"EC2"를 선택하고 "다음:권한"을 클릭합니다.
2개의 권한을 추가해야 합니다.
먼저 검색창에 "SSM"을 검색하여 "AmazonECRoleForSSM"을 선택합니다.
두번째로 검색창에 "cloudwatchagent"를 검색하고 "CloudWatchAgentAdminPolicy"를 선택합니다.
이후, "다음:태그"을 클릭합니다.
태그 추가단계입니다.
내부 규칙에 따라 태그를 추가하거나, 옵션사항이므로 빈값으로 두고 "다음:검토"를 클릭합니다.
역할 이름 "tempRoleforParameter" 작성 후,
아래 정책에 2개의 정책이 모두 올바르게 설정 되어있는지 확인합니다.
- AmazonEC2RoleforSSM
- CloudWatchAgentAdminPolicy
"역할만들기"를 클릭합니다.
이렇게 생성된 역할을 EC2인스턴스에 할당합니다.
콘솔 상단 "서비스"를 클릭하고, "EC2"를 검색하여 EC2 콘솔에 접속합니다.
왼쪽 네비게이션 바에서 "인스턴스"를 클릭합니다.
이후 앞서 생성한 임시 인스턴스(Temp_windows)를 선택하고 상단 "작업" -> "인스턴스 설정" -> "IAM 역할 연결/바꾸기"를 클릭합니다.
IAM 콘솔에서 생성한 IAM역할(tempRoleforParameter)을 선택하고 "적용"을 클릭합니다.
모니터링을 위한 IAM 역할 생성 및 할당이 완료되었습니다.
3. 인스턴스에 Tag 달기
이번 단계에서는 여러대의 인스턴스에 한번에 설치가 가능하도록 Tag를 추가합니다.
AWS CloudWatch를 통해 모니터링 할 인스턴스에 Tag를 설정합니다
모니터링할 인스턴스를 클릭하고 하위 탭에서 "태그" -> "태그 추가/편집"을 클릭합니다
태그 추가/편집 팝업창에 알아보기 쉽도록 태그를 추가합니다.
본 실습에서는 아래와 같이 설정했으며, 본인이 알아보기 쉽도록 설정하거나 똑같이 설정합니다.
- Key : EnableMonitoring
- Value : yes / no
추가적으로 필요한 태그를 설정하거나 OS 구분 및 버전을 추가할 수 있습니다.
완료 후 "저장"을 클릭합니다.
임시로 생성한 인스턴스(Temp_windows)도 위와 같이 태그를 추가합니다.
- Key : EnableMonitoring
- Value : yes / no
완료 후 "저장"을 클릭합니다.
모니터링이 필요한 모든 인스턴스와 Temp_windows 인스턴스의 태그 설정이 올바르게 되었는지 확인합니다.
태그 설정이 모두 완료되었습니다.
4. Agent 다운로드 및 설치
이번 단계에서는 System Manager를 이용하여 한번에 AWSPackage를 설치합니다.
콘솔 왼쪽 상단 "서비스"를 선택하고 "System Manager"를 검색 및 클릭하여 SystemManager 콘솔에 접속합니다.
왼쪽 네비게이션 바에서 "Run Command"를 선택하고 "명령실행"을 클릭합니다.
아래의 사진 예시와 같이 모든 정보를 입력 후 "실행"을 클릭합니다.
- 명령문서 : AWS-ConfigureAWSPackage
- 명령파라메터
> Name: AmazonCloudWatchAgent
> Version: latest
- 인스턴스 태그 지정
> EnableMonitoring : yes [Add]
명령에 해당되는 인스턴스의 개수, 완료개수 및 오류(성공/실패) 확인이 가능합니다.
이 명령으로 CloudWatchAgent의 설치가 완료되었습니다.
5. CloudWatch Agnet 설정파일 생성 및 파라메터 스토어 등록
이 단계에서는 CloudWatchAgent에서 설정할 파라메터들을 생성하고, SystemManager의 파라메터 스토어에 등록합니다.
SystemManager 파라메터 스토어에 설정을 저장해놓으면, 서버마다 설정파일을 새로 만들 필요 없이 한번에 설치가 가능합니다.
콘솔 상단 "서비스"를 클릭하고, "EC2"를 검색하여 EC2 콘솔에 접속합니다.
왼쪽 네비게이션 바에서 "인스턴스" -> "Temp_windows" 선택 후 퍼블릭 아이피를 확인합니다.
이 인스턴스로 접속하여 설정예정이며, 별도로 접속하는 방법에 대해서는 기술하지 않습니다.
* 반드시 CloudWatchAgentAdminPolicy 권한을 할당한 "Temp_Windows" 인스턴스로 접속합니다.
* Windows 인스턴스 접속 방법 URL : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html
"C:\Program Files\Amazon\AmazonCloudWatchAgent" 경로의 "amazon-cloudwatch-agent-config-wizard"를 실행합니다.
Amazon Cloud Watch Agent에서는 윈도우 로그와 시스템 상태에 대한 메트릭을 모두 받아볼 수 있습니다.
그 설정값을을 자동으로 생성 가능하도록 마법사를 실행하여 원하는 설정을 선택합니다.
[주의사항 1] 이 질문이 나오면, 반드시 1.yes 를 선택합니다.
==================================================================
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
==================================================================
[주의사항 2] 이 질문이 나오면, 반드시 standard 혹은 advenced를 선택합니다.
Basic은 disk사용량 모니터링이 포함되어있지 않습니다.
==================================================================
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
==================================================================
* Cloudwatch agent configuration file 참고 URL: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html
* Cloudwatch agent가 수집하는 지표 : https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html
아래 더보기를 클릭하여 설정값들을 참고하실 수 있습니다.
↓↓↓ 더보기 클릭 ↓↓↓
=============================================================
= Welcome to the AWS CloudWatch Agent Configuration Manager =
=============================================================
On which OS are you planning to use the agent?
1. linux
2. windows
default choice: [2]:
Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
2
Do you have any existing CloudWatch Log Agent configuration file to import for migration?
1. yes
2. no
default choice: [2]:
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.
1. yes
2. no
default choice: [1]:
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:
Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
1. 1s
2. 10s
3. 30s
4. 60s
default choice: [4]:
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
3
Current config as follows:
{
"metrics": {
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"LogicalDisk": {
"measurement": [
"% Free Space"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Memory": {
"measurement": [
"% Committed Bytes In Use"
],
"metrics_collection_interval": 60
},
"Paging File": {
"measurement": [
"% Usage"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"PhysicalDisk": {
"measurement": [
"% Disk Time",
"Disk Write Bytes/sec",
"Disk Read Bytes/sec",
"Disk Writes/sec",
"Disk Reads/sec"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Processor": {
"measurement": [
"% User Time",
"% Idle Time",
"% Interrupt Time"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"TCPv4": {
"measurement": [
"Connections Established"
],
"metrics_collection_interval": 60
},
"TCPv6": {
"measurement": [
"Connections Established"
],
"metrics_collection_interval": 60
}
}
}
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:
Do you want to monitor any customized log files?
1. yes
2. no
default choice: [1]:
2
Do you want to monitor any Windows event log?
1. yes
2. no
default choice: [1]:
Windows event log name:
default choice: [System]
Do you want to monitor VERBOSE level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
Do you want to monitor INFORMATION level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
Do you want to monitor WARNING level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
Do you want to monitor ERROR level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
Do you want to monitor CRITICAL level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
Log group name:
default choice: [System]
Log stream name:
default choice: [{instance_id}]
In which format do you want to store windows event to CloudWatch Logs?
1. XML: XML format in Windows Event Viewer
2. Plain Text: Legacy CloudWatch Windows Agent (SSM Plugin) Format
default choice: [1]:
Do you want to specify any additional Windows event log to monitor?
1. yes
2. no
default choice: [1]:
2
Saved config file to config.json successfully.
Current config as follows:
{
"logs": {
"logs_collected": {
"windows_events": {
"collect_list": [
{
"event_format": "xml",
"event_levels": [
"VERBOSE",
"INFORMATION",
"WARNING",
"ERROR",
"CRITICAL"
],
"event_name": "System",
"log_group_name": "System",
"log_stream_name": "{instance_id}"
}
]
}
}
},
"metrics": {
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"LogicalDisk": {
"measurement": [
"% Free Space"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Memory": {
"measurement": [
"% Committed Bytes In Use"
],
"metrics_collection_interval": 60
},
"Paging File": {
"measurement": [
"% Usage"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"PhysicalDisk": {
"measurement": [
"% Disk Time",
"Disk Write Bytes/sec",
"Disk Read Bytes/sec",
"Disk Writes/sec",
"Disk Reads/sec"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Processor": {
"measurement": [
"% User Time",
"% Idle Time",
"% Interrupt Time"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"TCPv4": {
"measurement": [
"Connections Established"
],
"metrics_collection_interval": 60
},
"TCPv6": {
"measurement": [
"Connections Established"
],
"metrics_collection_interval": 60
}
}
}
}
Please check the above content of the config.
The config file is also located at config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
What parameter store name do you want to use to store your config? (Use 'AmazonCloudWatch-' prefix if you use our managed AWS policy)
default choice: [AmazonCloudWatch-windows]
Trying to fetch the default region based on ec2 metadata...
Which region do you want to store the config in the parameter store?
default choice: [ap-northeast-2]
Which AWS credential should be used to send json config to parameter store?
1. ASIA4VWMBWWCOZU6UZ77(From SDK)
2. Other
default choice: [1]:
Successfully put config to parameter store AmazonCloudWatch-windows.
Please press Enter to exit...
모든 설정이 완료되면 "config.json"파일에 내가 설정한 모든 값들이 json형식으로 작성되어 있습니다.
정상적으로 systemManager -> parameterStore에 저장되어있는지 확인해야합니다.
AWS콘솔 왼쪽 상단 "서비스"를 클릭하고 "System Manager"를 선택하여 콘솔로 접속합니다.
왼쪽 네비게이션 바에서 "Parameter Store" 클릭 후 Temp_windows 인스턴스에서 생성한 설정파일이 보이는지 확인합니다.
위와같이 "AmazonCloudWatch-windows" 파라메터가 등록되었다면, 정상적으로 이 단계를 완료한 것입니다.
6. Agent 시작
SystemManager 콘솔에서 왼쪽 네비게이션바의 "Run Command" -> "명령실행"을 클릭합니다.
아래의 사진 예시와 같이 모든 정보를 입력 후 "실행"을 클릭합니다.
- 명령문서 : AmazonCloudWatch-ManageAgent
- 명령파라메터
> Optional Configuration Location : AmazonCloudWatch-windows (파라메터 스토어에 등록된 이름)
- 인스턴스 태그 지정
> EnableMonitoring : yes [Add]
명령에 해당되는 인스턴스의 개수, 완료개수 및 오류(성공/실패) 확인이 가능합니다.
이제, 약 10~15분 후 Amazon CloudWatch에서 해당 인스턴스의 로그와 Metric을 확인할 수 있습니다.
7. Windows 로그 확인
Cloudwatch 콘솔로 이동합니다.
왼쪽 네비게이션 바에서 "로그 그룹"을 선택하고 "System" 이라는 이름으로 생성된 로그그룹을 확인합니다.
System 로그를 클릭하여 들어가면 하위 로그스트림 부분에 인스턴스의 id별로 로그가 생성되어있는것을 확인할 수 있습니다.
그중 하나를 선택하여 로그 이벤트를 확인합니다.
8. Windows 시스템 모니터링 확인 (CPU/MEM/Disk Usage)
AWS CloudWatch 콘솔 왼쪽 네비게이션바 "지표"를 클릭합니다.
"사용자 지정 네임스페이스"가 생긴것을 확인할 수 있습니다. (기본적으로는 AWS 네임스페이스만 존재합니다.)
CWAgent를 선택하여 확인합니다.
인스턴스의 CPU, Memory, Disk(physical&Logical) 지표를 확인할 수 있습니다.
확인하고자 하는 지표를 선택하면 위 그래프에 표시됩니다.
9. Disk 사용율 75%시 알람 설정하기
AWS CloudWatch 콘솔 왼쪽 네비게이션바의 "지표"를 클릭하고 알람을 설정할 수 있도록
CWAgent 경로로 들어가 아래와 같이 "LogicalDisk"를 선택합니다.
"그래프로 표시된 지표" 하위탭을 선택합니다.
레이블 오른쪽에 종모양을 선택합니다
경보생성 페이지에서 지표 및 조건을 지정할 수 있습니다.
1단계 지표및 조건 지정 단계입니다.
기본적으로 들어있는 설정값을 그대로 사용하고, 조건은 "디스크 가용용량이 25%이하"일때로 설정합니다.
2단계 작업구성 단계입니다.
이 단계에서는 조건에 부합했을때 (디스크 사용가능 용량이 25%이하일때) 이메일로 내용을 전달하거나 기타 작업을 트리거 할 수 있습니다.
여기에서는 관리자에게 디스크가 부족하다는 경고를 보내는 이메일을 발송합니다.
"SNS 새 주제 생성"을 클릭하여 "SNS주제 이름"과 "알림을 수신할 이메일 엔드포인트"를 작성하고 "주제생성"을 클릭합니다.
주제 생성 클릭 시 아래의 사진과 같이 "기존 SNS 주제 선택"으로 자동으로 변경됩니다.
SNS 주제가 이미 있는경우 기존 주제를 사용하실 수 있으며, 새로운 SNS주제를 생성했을때는 이메일 구독을 컨펌해야 합니다.
* 알림을 수신할 이메일 엔드포인트 주소로 "AWS Notification - Subscription Confirmation"이메일이 발송됩니다. 반드시 확인 해주세요.
이제 "다음"을 클릭하여 다음단계로 넘어갑니다.
3단계 이름 및 설명추가 단계입니다.
경보이름 및 경보에 대한 설명을 작성한 후 "다음"을 클릭합니다.
4단계 미리보기 및 생성 단계입니다.
모든 설정이 올바른지 검토 한 후 "경보생성"을 클릭합니다.
디스크 사용율 75%이상 시 실제로 알림이 발송되는지 확인합니다.
경보가 생성되어있는 인스턴스 내에서 임의로 파일을 생성하여 사용가능한 디스크 사용량을 18%까지 낮추었습니다.
약 1분~5분 경과 후 AWS CloudWatch 콘솔에서 경보상태를 확인할 수 있습니다.
해당 경보를 클릭하여 자세한 내용을 확인할 수 있습니다. (페이지 하단에서 SNS 발송 내역, 로그내역 등을 확인할 수 있습니다.)
SNS주제로 설정한 이메일 주소로 알림이 발송된것도 확인할 수 있습니다.
추가로!!
EC2 콘솔에서도 경보가 확인됩니다.
모든 절차를 완료하였습니다.
임시로 생성한 인스턴스 (temp_windows) 를 반드시 삭제하세요!
고생하셨습니다.
'AWS :D' 카테고리의 다른 글
[AWS IAM] 특정 리전에서만 사용 가능정책, MFA force 정책 적용하기 (0) | 2020.09.04 |
---|---|
[AWS EC2 - Amazon Linux 2] tomcat redis session 설정 (0) | 2020.07.31 |
[AWS AppStream] Stack & Fleet 구성하기 (0) | 2020.07.13 |
[AWS EC2-Linux] monitoring Linux metric and logs with Amazon CloudWatch (0) | 2020.07.03 |
[AWS EC2 - Disk] EBS IOPS 구하기! (0) | 2020.06.17 |