cloudwatch 성능 모니터링과 신속한 대응을 위한 노하우 - 박선용 솔루션즈...
TRANSCRIPT
CloudWatch 성능 모니터링과 신속한 대응을 위한 노하우 Seon Yong Park, Solutions Architect
내용
1. CloudWatch
2. CloudWatch Deep Dive
3. 운영 관련 FAQs
측정할 수 없고 수치로 표현할 수 없다면 그 지식은 불완전하고 불만족스러운 것이다.
– 윌리엄 톰슨 (켈빈) -‐
CloudWatch
Amazon CloudWatch
아마존 웹 서비스
당신의 측정값
당신의 로그
CloudWatch
AWS CloudWatch § AWS 모니터링 하는 서비스 § 300+ built-in 지표 § 본인의 커스텀 지표 등록 가능 § 지표에 대한 경고발생 § 로그의 억세스&아카이브 중앙화 된 서비스
CloudWatch AWS의 각종 리소스를 감시 하는 서비스
• AWS 리소스의 생사, 성능, 로그의 감시/감독 • 대상 지표에 대한 그래프를 통한 가시화 • 각종 지표에 기반한 알람 서비스
Custom Metric Memory Free/Filesystem Free
OS Log/ApplicaGon Log
StatusCheckFailed_Instance StatusCheckFailed_System
CUPUGlizaGon DiskReadBytes / DiskReadOps NetworkIn / NetworkOut
EC2 AcGon
AutoScaling
NoGficaGon
Alram
CloudWatch AWS 서비스 네임스페이스
Auto Scaling AWS/AutoScaling AWS Billing AWS/Billing Amazon CloudFront AWS/CloudFront Amazon CloudSearch AWS/CloudSearch Amazon DynamoDB AWS/DynamoDB Amazon ElasGCache AWS/ElasGCache Amazon ElasGc Block Store AWS/EBS Amazon ElasGc Compute Cloud AWS/EC2 ElasGc Load Balancing AWS/ELB Amazon ElasGc MapReduce AWS/ElasGcMapReduce Amazon Kinesis AWS/Kinesis Amazon Machine Learning AWS/ML AWS OpsWorks AWS/OpsWorks Amazon RedshiV AWS/RedshiV
AWS 서비스 네임스페이스
Amazon RelaGonal Database Service AWS/RDS Amazon Route 53 AWS/Route53 Amazon Simple NoGficaGon Service AWS/SNS Amazon Simple Queue Service AWS/SQS Amazon Simple Workflow Service AWS/SWF AWS Storage Gateway AWS/StorageGateway Amazon WorkSpaces AWS/WorkSpaces Amazon RelaGonal Database Service AWS/RDS Amazon Route 53 AWS/Route53 Amazon Simple NoGficaGon Service AWS/SNS
h[p://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/DeveloperGuide/supported_services.html
CloudWatch 기본 관리 구조
Metrics
Namespace Metrics name (CPUUGlizaGon)
Metrics name (HealthyHostCount)
Metrics name (CPUUGlizaGon)
Namespace (AWS/EC2)
Namespace (AWS/RDS)
Namespace (AWS/ELB)
Metrics : 시계열로 표시되는 측정 데이터
Namespace : AWS서비스의 구분자
CloudWatch 기본 관리 구조
Metrics
Namespace Metrics name (CPUUGlizaGon)
Metrics name (HealthyHostCount)
Metrics name (CPUUGlizaGon)
Namespace (AWS/EC2)
Namespace (AWS/RDS)
Namespace (AWS/ELB)
Dimension
Dimension : 지표를 고유하게 실별 할 수 있도록 하는 이름과 값의 페어
Dimension (InstanceId) Dimension
(AutoscalingGroup)
CloudWatch 기본 관리 구조
Metrics
Namespace Metrics name (CPUUGlizaGon)
Metrics name (HealthyHostCount)
Metrics name (CPUUGlizaGon)
Namespace (AWS/EC2)
Namespace (AWS/RDS)
Namespace (AWS/ELB)
Dimension
Dimension (InstanceId) Dimension
(AutoscalingGroup)
Sum
Max
Min
Average
Sample Count
StaGsGc
지표 밑의 대상 서비스는 리전에 생성한 것만 나옴
대상 서비스와 지표 검색
인스턴스 리스트
차원 (Dimension)
통계 그래프 표시기준 설정
CloudWatch 지표
CPUUGlizaGon CPUCreditBalance CPUCreditUsage DiskReadBytes DiskWriteBytes DiskWriteOps NetworkOut NetworkIn StatusCheckFailed_Instance StatusCheckFailed StatusCheckFailed_System
커스텀 지표 표준 지표(EC2)
사용자가 임의로 수집하려는 표준 지표에는 없는 지표
CloudWatch 커스텀 지표 표준 지표가 아닌 자신의 지표를 모니터링 하는 기능
• AWS CLI의 "put-‐metric-‐data", API Tools의 "mon-‐put-‐data"또는 "PutMetricData” API로 CloudWatch에 데이터를 등록함
• 크기 제한으로 HTTP GET은 8KB, HTTP POST는 40KB, 하나의 PutMetricData 요청에 20개의 데이터까지 가능
• API 호출이 병목 될 수 있음 : 사용자 정의 지표의 빈번한 등록이나 많은 데이터 취득에 주의
$ aws cloudwatch put-‐metric-‐data –metric-‐name RequestLatency\ -‐-‐namespace "GetStarted“\ -‐-‐Gmestamp 2014-‐10-‐28T12:30:00Z\ -‐-‐value 87 \ -‐-‐unit Milliseconds\ $ aws cloudwatch put-‐metric-‐data -‐-‐metric-‐name RequestLatency\ -‐-‐namespace "GetStarted“ -‐-‐Gmestamp 2014-‐10-‐28T12:30:00Z\ -‐-‐staGsGc-‐value Sum=60,Minimum=15,Maximum=105,SampleCount=5
단순 등록
통계 세트 등록
CloudWatch 지표값 CloudWatch에서 보이는 정보는 “통계값”이다.
• 지표 데이터를 지정한 기간으로 집약한 것 • 각 지표에 따라 적합한 통계 값을 보는 것이 중요
단순 등록
통계 세트 등록 통계 세트 등록
통계 설명 Minimum 특정 기간 동안에서의 측정된 가장 낮은 값. 이 값을 사용해서 응용 프로그램의 낮은 용량 활동을 확인할 수 있음.
Maximum 특정 기간 동안에서의 측정된 가장 높은 값. 이 값을 사용해서 응용 프로그램의 높음 용량활동을 확인할 수 있음.
Sum 해당 지표에 가산 된 모든 합계. 이 통계는 지표의 총 용량을 결정하는데 도움이 됨.
Average 지정 기간 Sum/SampleCount 값. 이 통계를 Maximun, Minimum과 비교하여 지표의 특성을 파악하고, 평균 사용량이 최대치와 최소치 중 어느쪽에 가까운지 확인할 수 있음. 이러한 비교는 필요에 따라 언제 자원을 증감할 것인가 아는데 도움이 됨.
SampleCount 통계 계산에 사용되는 데이터의 포인트 개수
데이터 저장은 2주까지 • 2주 이상 저장하는 경우 get-‐metric-‐staGsGcs 에서 데이터를 검색해서 다른 장소로 보관
데이터 시간 간격은 최소 1분 • 다수의 서비스에서 1분 간격. 5분 인 경우도 있다.
CloudWatch – 관리형 서비스 감시
ELB RDS
• Latency • BackendConnecGonErrors • HealthyHostCount • UnHealthyHostCount • RequestCount • SurgeQueueLength • SpilloverCount • HTTPCode_ELB_5XX • HTTPCode_Backend_4XX
h[p://docs.aws.amazon.com/ko_kr/ElasGcLoadBalancing/latest/DeveloperGuide/elb-‐cloudwatch-‐metrics.html h[p://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/DeveloperGuide/rds-‐metricscollected.html
• CPUUGlizaGon • FreeableMemory • SwapUsage • FreeStorageSpace • DiskQueueDepth • ReadIOPS • ReadThroughput • ReadLatency • NetworkReceiveThroughput • NetworkTransmitThroughput • WriteIOPS • WriteThroughput • WriteLatency • DatabaseConnecGons • BinLogDiskUsage
CloudWatch – 알람 설정
OK 알람 (Alarm)
부족 (INSUFFICIENT)
정의 된 임계값을 밑돌고 있다 (정상값)
정의 된 임계값을 웃 돌고 있다 (비정상값)
데이터가 부족해서 상태를 판정할 수 없다 (판정 불가)
CloudWatch 액션 기능
Custom Metric Memory Free/Filesystem Free
OS Log/ApplicaGon Log
StatusCheckFailed_Instance StatusCheckFailed_System
CUPUGlizaGon DiskReadBytes / DiskReadOps NetworkIn / NetworkOut
EC2 AcGon
AutoScaling
NoGficaGon
Alram
모니터링 액션
측정할 수 없다면 관리할 수 없다는 것이고, 관리하기를 원한다면 반드시 측정하라.
-‐ 피터 드러커 -‐
CloudWatch Deep Dive
Elastic Load Balancer 지표
ELB
지표 의미
RequestCount 완료된 요청/연결된 커넥션의 일정 시간당(1 or 5분)갯수. HTTP 에러 메시지도 포함된다. 유용한 통계값은 sum임. min, max, average는 모두 1을 리턴한다
SurgeQueueLength 라우팅이 지연되고 있는 요청의 총 갯수. ELB는 현재 건강한 인스턴스에 대해 요청을 보내기 전에 큐에 적재를 한다. 큐의 최대 길이는 1024임. 큐가 가득 차게 되면 요청은 거부된다. 유용한 통계값은 max(큐 리퀘스트 피크 확인 가능)
SpilloverCount 위의 서지 큐가 가득 차서 거부된 요청의 총 갯수. 유용한 통계값은 sum
BackendConnecGonErrors
ELB와 등록된 인스턴스간에 성공적으로 커넥션이 맺어지지 않은 숫자. ELB는 연결이 실패되면 다시 연결을 시도하므로, 이 숫자는 요청갯수보다 높을 수 있다. 유용한 통계값은 sum
Latency 요청을 받은 이후에, ELB가 요청을 인스턴스에 보낸 이후에 받을 때까지의 지연 시간. 유용한 통계값은 average. max는 어떤 리퀘스트가 평균값을 넘었는지 확인
EC2 지표
EC2
지표 의미
CPUCreditUsage (T2 타임만) 특정 기간동안 사용된 CPU 크레딧 갯수
CPUUGlizaGon 현재 인스턴스에서 사용하고 있는 컴퓨팅 파워
DiskReadOps 해당 인스턴스에 연결된 모든 로컬 디스크에서 읽어들인 오퍼레이션의 수. 만약 EBS볼륨을 사용한다면 EBS 지표를 봐야 함.
NetworkOut 인스턴스의 네트워크 인터페이스를 통해 나간 바이트 량.
StatusCheckFailed StatusCheckFailed_Instance와 StatusCheckFailed_System 의 결합된 값. 어느쪽이라도 실패하면 1(실패), 0(패스)
차원(Dimension) 의미
AutoscalingGroupName 이 차원 필터를 이용하면 유저는 오토스케일링 그룹에 묶여있는 모든 인스턴스를 대상으로 값을 볼 수 있다.
ImageId 동일한 EC2 AMI에 기반해서 돌고 있는 모든 인스턴스에 대해 필터링
InstanceType 인스턴스 타입으로 필터링
RDS 지표
RDS
지표 의미
BinLogDiskUsage 바이너리 로그에 의해 점유되는 디스크 량
현재 인스턴스에서 사용하고 있는 컴퓨팅 파워
DiskQueueDepth 디스크에 억세스하려고 대기중인 IO들의 갯수
ReplicaLag MySQL 읽기 복제시. 원본 DB에서 복제 DB로 데이터 복제가 지연되고 있는 시간(초)
ReadLatency/WriteLatency
Disk I/O 조작에서 걸리는 시간의 평균(초)
차원(Dimension) 의미
DatabaseClass 예를 들어, db.m1.small 등 데이터베이스 클래스로 필터링
EngineName 엔진이름으로 필터링. 예를 들어 mysql
CloudWatch Logs
CloudWatch Logs
§ CloudWatch Logs를 사용한 로그 모니터링
§ OS, 응용 프로그램의 로그등을 모니터링 할 수 있음
§ 에이전트를 통해 로그 메시지를 CloudWatch 엔드 포인트에 전송
§ 로그 데이터의 보존 기간은 설정 가능
§ 1일 ~ 영구 보존으로 선택 가능
CloudWatch Logs 사용 개념도
Amazon Linux Ubuntu
Windows REHEL
Log Agent Log Agent
Log Agent EC2 config CloudWatch 지표 CloudWatch Logs
CloudWatch 알람 SNS
CloudWatch Logs 사용 개념도 Log Group
웹서버
Log Stream
web001.ap-‐northeast-‐1
web002.ap-‐northeast-‐1
web003.ap-‐northeast-‐1
Log Event
로그 모니터링 로그는 타임 스탬프와 로그 메시지(UTF-‐8)로 구성
로그 클라이언트 § 리눅스 : 텍스트 로그 -‐ CloudWatch Logs Agent
§ 윈도우 : 텍스트 로그, 윈도우 이벤트로그, 성능 카운터 -‐ EC2 Config
§ 기타 -‐ AWS CLI -‐ AWS SDK -‐ 3rd 파티 툴 (fluentd 등)
리눅스 로그 에이전트
§ CloudWatch Logs Agent • 로그 데이터를 CloudWatch Logs에 올리는 AWS CLI플러그인 • AWS logs push 명령을 실행하는 데몬형 스크립트 • 설치 및 구성이 필요 • 적용 대상 EC2 인스턴스에는 롤을 추가해 준다
§ 지원 플랫 폼
• Amazon Linux • Ubuntu Server • CentOS • Red Hat Enterprise Linux
로그 에이전트 주의사항 § 전송가능 로그 메시지의 길이 제한
• 로그 에이전트가 1회 푸시할 수 있는 로그 레코드의 크기는 최대 32 KB • 32KB가 넘으면 로그가 잘라 짐
§ 로그 로테이션 지원
• Rename and re-‐create ü 원래 로그에 접미어(숫자)를 붙여 rename하고 빈 로그 파일을 다시 작성 ü 예) /var/log/syslog.log à/var/log/syslog.log.1 로 변경
• Copy and truncate ü 원본 로그 파일을 복사한 후 truncate ü 예) /var/log/syslog.log à/var/log/syslog.log.1 로 복사되고 /var/log/syslog.log tr
uncate • Create common-‐pa[erned file
ü 일반적인 패턴을 가지는 새로운 파일을 생성 ü 예) /var/log/syslog.log.2014-‐01-‐01 을 남기고 /var/log/syslog.log.2014-‐01-‐02가 작성되는 경우
윈도우 : CloudWatch logs설정
§ EC2Config 에서 CloudWatch Logs설정 • JSON 설정 파일을 편집하여 수집하려는 지표를 설정 • C : \ Program Files \ Amazon \ Ec2ConfigService \ Se
pngs\ AWS.EC2.Windows.CloudWatch.json 파일을 편집
§ 수집할 로그를 설정 • 윈도우즈 이벤트 로그 • 텍스트 기반로그 • IIS 로그 • 성능 카운터
커스텀 지표 확인
CloudWatch Logs 지표 필터 로그 이벤트에 특정 문자열를 필터링 할 수 있다
CloudWatch Logs 지표 필터 특정 문자열의 빈도에 따라 알람 작성이 가능 지표 필터에서 작성. SNS 연계 가능.
지표 필터가 트리거가 된 CloudWatch 알람 작성이 가능
지표 필터 예
§ 필터 예 [ip, user, username, Gmestamp, request, status_code, bytes > 1000] [ip, user, username, Gmestamp, request, status_code = 200, bytes] [ip, user, username, Gmestamp, request, status_code = 4*, bytes] [ip, user, username, Gmestamp, request = *html*, status_code = 4*, bytes]
§ 참고사항 대괄호([ ]) 혹은 작은 따옴표(“ ”)로 묶인 문자는 단일 필드로 처리됨 지표 필터는 대소 문자를 구분
127.0.0.1 -‐ frank [10/Oct/2000:13:25:15 -‐0700] "GET /apache_pb.gif HTTP/1.0" 200 1534 127.0.0.1 -‐ frank [10/Oct/2000:13:35:22 -‐0700] "GET /apache_pb.gif HTTP/1.0" 500 5324 127.0.0.1 -‐ frank [10/Oct/2000:13:50:35 -‐0700] "GET /apache_pb.gif HTTP/1.0" 200 4355
CloudWatch를 통한 시스템 운영 자동화
RDS
CloudTrail
VPC Flow Logs
EC2 agent
CloudWatch Logs
CloudWatch
AutoScaling SQS
SNS
Kinesis Kinesis ApplicaGon
Lambda
EC2 § 액션/통보 • 전화 • 모바일 푸쉬 • 채팅 • 이메일 • 응용 프로그램 피드백 • 인프라 복구/확장
CloudWatch를 사용한 시스템 자동화 예 § IAM 설정 변경에 대한 경고를 수신
§ AWS 계정의 루트 엑세스 키를 사용했을 때 통지
§ CloudWatch Logs SubscripGon을 이용 Zabbix에 로그 전송
§ 경보 발생시 AWS Lambda를 사용하여 음성 전화 걸기
§ Auto Scaling에 의한 자동 복구
§ Amazon ECS의 도커 컨테이너를 Lambda로 Auto Scaling과 연결
§ VPF Flow logs를 ElasGcsearch + Kibaba 로 시각화
CloudWatch custom dashboard
§ CloudWatch 지표에 대해 사용자가 지정하는 대시보드 생성 기능
§ 여러 대시보드 별로 복수의 지표를 다양하게 묶어서 볼 수 있음
§ 텍스트, 이미지 등으로 표현 가능
§ 여러 리전의 정보를 가져와서 하나의 대시보드에 구성할 수도 있음
Custom dashboard
대시보드 지정 이름으로 생성
위젯 타입을 선택
Custom dashboard
지표를 선택
Custom dashboard 커스텀 대쉬보드 (예)
하면 된다는 말은 거짓이다. 그러나 안 하면 아무것도 되지 않는 다는 말은 불변의 진리이다.
-‐ 퓰리처 -‐
운영관련 FAQs
FAQ 1. EC2 인스턴스 연결 상태 체크가 failed로 나와요
다음과 같은 동작을 해보세요. 1. 인스턴스를 stop/start 해보세요
2. Ephemeral disk의 정보는 사라집니다.
3. EC2가 스스로 문제를 해결할 때까지 잠시 기다려 보세요.
4. 서포트 티켓을 끊어서, 서포트 요청을 합니다.
FAQ 2. MySQL read replication이 느려요 (MySQL on EC2)
1. 읽기 복제 되는 인스턴스는 마스터 인스턴스 보다 좀 더 큰 인스턴스로 해야 함
2. 원본 DB 인스턴스와 읽기 전용 복제본에 사용되는 DB 파라미터 그룹의 설정이 서로 호환되는지 확인합니다.
3. 읽기 전용 복제본의 Max_allowed_packet 파라미터 값이 원본 DB인스턴스의 Max_allowed_packet값 보다 작은 경우 복제 오류 가능성
FAQ 2. MySQL read replication이 느려요 § MySQL복제 메카니즘 • 마스터 로그에서 바이너리를 읽어와서(IO_THREAD), relay log파일에 저장 • relay log파일에서 이벤트를 읽어서 복제 DB에 저장(SQL_THREAD) • 둘 중 어디에서 지연이 발생하는지 확인 § Master Status 와 Slave Status 확인
Show Master Status Show Slave Statusg 명령으로 마스터와 슬레이브의 상태값 확인
FAQ 2. MySQL read replication이 느려요 § 파라미터
• Read_Master_Log_Pos : IO 쓰레드가 읽고 있는 마스터 바이너리 로그의 위치 • Exec_Master_Log_Pos : SQL 쓰레드가 실행하려는 마스터 바이너리 로그의 위치. 위 값과 현저히 차이가 나면 SQL THREAD 의 지연이 존재한다는 의미임.
• Seconds_Behind_Master : 얼마나 마스터 대비 복제가 늦어지고 있는지의 값(초) • Relay_Log_Space : 릴레이 로그의 크기
§ SQL_THREAD_LAG
SQL_THREAD lag = Read_Master_Log_Pos – Exec_Master_Log_Pos
§ 일반적인 진단 • 통상 IO_THREAD 로 인한 영향은 작음. 그러나 네트워크상 문제가 있는 경우 가능 • IO_Thread 의 지연 : 네트워크의 지연을 의심 • SQL_THREAD의 지연 : 쓰기 지연이 일어날 원인 파악. 쿼리 최적화. log_slow_slave_sta
tements 옵션을 켜서 log_query_Gme보다 오래 걸리는 쿼리를 로깅.
FAQ 3. 윈도우 서버의 TCP/IP연결 문제를 어떻게 해결하나요? 1. Rogue DNS server : 클라이언트가 신뢰할 수 없는 DNS서버로 부터 정보를 받는 다면, 그 정보를 기반으로 한 서버 접근이 안 될 수 있습니다.
2. 윈도우 hosts파일의 정보가 틀려 있을 수 있습니다. 모든 윈도우는 먼저 호스트 파일을 참고한
이후에 또 다른 가용한 정보처를 찾게 됩니다(DNS 등)
3. 하드웨어 오동작여부 확인
4. TCP/IP 포트가 블락된 경우
5. 클라이언트 어플리케이션에서 TCP/IP가 잘못 설정된 경우
6. ping –a www.amazon.com or tracert www.ubuntu.org
7. 3rd party trace tools : Tracetcp, Winmtr
FAQ 4. EBS 볼륨의 퍼포먼스를 최적화 하고 싶어요 1. EBS 볼륨 최적화에 적합한 EC2 인스턴스 타입인지 확인
2. EBS-‐opGmized EC2는 볼륨에 대한 전용 네트워크 출력량을 제공. 3. 볼륨 사용에 대한 툴을 사용해서 데이터를 취합할 것
Linux : iostat Output (h[p://blog.serverfault.com/2010/07/06/777852755/) 윈도우 : Perfmon을 사용한 디스크 레이턴시 측정 h[p://blogs.technet.com/b/askcore/archive/2012/02/07/measuring-‐disk-‐latency-‐with-‐windows-‐performance-‐monitor-‐perfmon.aspx
4. AWS trusted advisor를 이용해서 EBS볼륨에 대한 조언을 확인할 것.
AWS Knowledge center
h[ps://aws.amazon.com/ko/premiumsupport/knowledge-‐center/
Thank you!
Seon Yong Park, AWS Solutions Architect [email protected]