Amazon CloudWatch
CloudWatch Metrics
- CloudWatch는 AWS의 모든 서비스에 대한 지표를 제공한다.
- Metric(지표)는 모니터링할 변수 (CPUUtilization, NetworkIn 등)
- 지표는 네임스페이스(namespace)에 속한다.
- 지표의 속성으로 Dimension (측정 기준)이 있고(인스턴스 ID, 환경 등), 지표 당 최대 측정 기준은 10개이다.
- 지표는 시간을 기반으로 하므로 타임스탬프가 꼭 있어야 한다.
- 지표가 많아지면 CloudWatch 대시보드에 추가해 모든 지표를 한 번에 볼 수 있다.
- CloudWatch 사용자 지정 지표를 생성할 수 있다. (ex. RAM 지표)
CloudWatch Metric Streams
CloudWatch 지표는 CloudWatch 외부로 스트리밍할 수 있다.
- CloudWatch 지표를 선택한 대상으로 지속적으로 스트리밍하면 거의 실시간으로 전송되고 지연 시간을 짧아진다.
- Amazon Kinesis Data Firehose가 대상이 될 수 있고, 해당 대상을 통해 다른 목적지로 이동할 수도 있다.
- Datadog, Dynatrace, New Relic, Splunk, Sumo Logic 등과 같은 제3자 서비스 제공업체도 사용할 수 있다.
- 필요에 따라 지표를 필터링하여 일부 지표만 스트리밍하는 옵션도 제공한다.
CloudWatch Logs
- 로그 그룹 (Log groups): 로그 그룹은 동일한 보존 기간, 모니터링 및 액세스 제어 설정을 공유하는 로그 스트림 그룹을 정의합니다. 각 로그 스트림은 하나의 로그 그룹에 속해야 한다. 일반적으로 애플리케이션을 나타내는 임의의 이름이다.
- 로그 스트림 (Log stream): 로그 스트림은 동일한 소스를 공유하는 로그 이벤트 시퀀스이다. 애플리케이션 내의 인스턴스, 로그 파일, 컨테이너 등을 나타낸다.
- 로그의 유효 기간을 지정할 수 있으며, 로그를 영원히 유지하거나 30일 등으로 설정할 수 있다.
- CloudWatch Logs는 다양한 대상으로 로그를 전송할 수 있다.
- Amazon S3 (exports)
- Kinesis Data Streams
- Kinesis Data Firehose
- AWS Lambda
- OpenSearch
CloudWatch Logs - Sources
- SDK: SDK를 사용하여 로그를 직접 CloudWatch에 전송할 수 있다.
- CloudWatch Logs Agent: EC2 인스턴스에서 실행되는 로그 에이전트를 사용하여 로그를 수집할 수 있다.
- CloudWatch Unified Agent: 로그 파일 및 메트릭 데이터를 수집하기 위해 설치된 에이전트. EC2 인스턴스, 온프레미스 서버 및 컨테이너에 사용할 수 있다. (사장되는 추세)
- Elastic Beanstalk: 애플리케이션에서 생성되는 로그를 수집할 수 있다.
- ECS: 컨테이너화된 애플리케이션에서 생성되는 로그를 수집할 수 있다.
- AWS Lambda: Lambda 함수의 로그를 수집할 수 있다.
- VPC Flow Logs: 가상 사설 클라우드 (VPC)에서 생성되는 네트워크 흐름 로그를 수집할 수 있다.
- API Gateway
- CloudTrail based on filter: 지정된 필터에 따라 CloudTrail 이벤트 로그를 수집할 수 있다.
- Route 53: DNS 쿼리 로그를 수집할 수 있다.
CloudWatch Logs Metric Filter & Insights
Metric Filter
- CloudWatch Logs는 필터 표현식을 사용하여 로그 데이터를 필터링할 수 있다.
- 예를 들어 로그에서 특정 IP를 찾거나 "ERROR"와 같은 항목의 발생 횟수를 세는 등의 작업을 수행할 수 있다.
- 지표 필터는 CloudWatch 경보를 트리거하기 위해 사용될 수 있다.
Insights
- CloudWatch Logs Insights는 로그 데이터에 대한 쿼리를 수행하고 결과를 분석할 수 있는 기능을 제공한다.
- 이를 통해 로그 데이터를 실시간으로 검색하고 분석할 수 있으며, CloudWatch 대시보드에 쿼리 결과를 추가하여 시각화할 수 있다.
- CloudWatch Logs Insights를 사용하면 빠르고 효율적인 로그 분석이 가능하며, 필요한 정보를 쉽게 추출할 수 있다.
CloudWatch Logs – S3 Export
- 로그 데이터는 내보내기가 가능해질 때까지 최대 12시간이 소요될 수 있다.
- API 호출은 CreateExportTask이다.
- 시간이 따로 정해져있어 실시간, 혹은 거의 실시간으로 작동하지 않는다.
- CloudWatch Logs에서 로그를 스트림하고 싶다면 구독 필터(Logs Subscriptions)를 사용해야 한다.
CloudWatch Logs Subscriptions
https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/SubscriptionFilters.html
구독 필터란 CloudWatch Logs 상단에 적용하여 이를 목적지로 보내는 필터를 말한다.
CloudWatch Logs Aggregation Multi-Account & Multi Region
https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/CrossAccountSubscriptions.html
CloudWatch Logs Agent & Unified Agent
CloudWatch Logs for EC2
- 기본적으로 EC2 인스턴스의 로그는 CloudWatch로 전송되지 않는다.
- 원하는 로그 파일을 전송하기 위해서는 EC2에 CloudWatch 에이전트를 실행해야 한다.
- 로그를 보낼 수 있게 해주는 IAM Role이 있어야한다.
- CloudWatch Logs Agent는 온프레미스 환경에서도 설정할 수 있다.
CloudWatch Logs Agent & Unified Agent
- 가상 서버 (EC2 인스턴스, 온프레미스 서버 등) 용
- CloudWatch Logs Agent
- 오래된 버전의 에이전트
- CloudWatch Logs로만 전송할 수 있음
- CloudWatch Unified Agent
- RAM, 프로세스 등과 같은 추가적인 시스템 단계 지표 수집
- CloudWatch Logs로 전송할 로그 수집
- SSM Parameter Store를 사용하여 중앙 집중식 환경 구성
- 지표와 로그를 둘 다 사용하기 때문에 통합 에이전트임!
CloudWatch Unified Agent – Metrics
- Linux 서버 또는 EC2 인스턴스에서 직접 수집
- 어떤 지표를 수집?
- CPU (active, guest, idle, system, user, steal)
- 디스크 지표 (free, used, total), 디스크 IO (writes, reads, bytes, iops)
- RAM (free, inactive, used, total, cached)
- 넷 상태(Netstat) (number of TCP and UDP connections, net packets, bytes)
- 프로세스 (total, dead, bloqued, idle, running, sleep)
- 스와프 공간(Swap Space) (free, used, used %)
- CloudWatch 통합 에이전트가 EC2 인스턴스 모니터링보다 더 세부적이고 많은 지표를 수집한다.
CloudWatch Alarms
- 경보는 모든 지표에 대한 알림을 트리거하는 데 사용된다.
- 다양한 옵션 (샘플링, %, 최대값, 최소값 등)
- 경보 상태:
- OK: 트리거되지 않은 상태
- INSUFFICIENT_DATA: 상태를 결정할 데이터가 부족함
- ALARM: 임계값이 위반되어 알림이 보내지는 상태
- 기간:
- 지표를 평가하는데 걸리는 시간 길이 (초 단위)
- 고해상도 사용자 지정 지표: 10초, 30초, 또는 60초의 배수
CloudWatch Alarm Targets
- 경보의 주 타겟은 세 가지 이다.
- EC2 인스턴스: 인스턴스를 중지, 종료, 재부팅, 또는 복구하는 등의 동작
- EC2 Auto Scaling: 스케일 아웃, 스케일 인
- Amazon SNS: SNS 서비스에 알림을 보내는 것
EC2 Instance Recovery
- 상태 확인 (Status Check):
- 인스턴스 상태: ECM VM(가상 머신) 점검
- 시스템 상태: 기반이 되는 하드웨어 점검
- 복구: 특정 EC2 인스턴스를 모니터링하다가 경보가 위반됐을 경우, EC2 인스턴스 복구를 실행해 EC2 인스턴스를 다른 호스트로 옮기는 등의 작업을 할 수 있다. 이때 동일한 사설, 공인, 탄력적 IP 주소와 동일한 메타데이터, 동일한 인스턴스 배치 그룹을 가지게 된다.
CloudWatch Alarm: good to know
- 경보는 CloudWatch Logs Metrics Filter에 기반해 생성된다.
- 경보 알림을 테스트해보고 싶다면
set-alarm-state
라는 CLI 호출을 사용하면 된다. - 특정 임계값이 도달하지 않아도 경보를 트리거하고 싶을 때 유용
aws cloudwatch set-alarm-state --alarm-name "myalarm" --state-value ALARM --state-reason "testing purposes"
Amazon EventBridge
- EventBridge의 예전 이름은 CloudWatch Event
- Schedule: CRON 작업 (스크립트 예약)
- Event Pattern: 특정 작업을 수행하는 서비스에 반응하는 이벤트 규칙
- 대상(destination)이 다양하다면 Lambda 함수를 트리거해서 SQS, SNS 메시지 등을 보낼 수 있다.
Amazon EventBridge Rules
Amazon EventBrige Evnet Bus
- 리소스 기반 정책을 사용하여 다른 AWS 계정의 이벤트 버스에 액세스할 수 있다.
- 이벤트 버스로 전송된 이벤트를 아카이브할 수 있다 (모든 이벤트 또는 필터링된 서브셋). 이벤트를 아카이빙할 때는 보존 기간을 무기한이나 일정 기간으로 설정할 수 있다.
- 아카이브된 이벤트를 재생할 수 있는 기능도 있다.
Schema Registry
- Schema Registry 기능은 이벤트 버스의 이벤트를 분석하고 스키마를 추론할 수 있다.
- 스키마 레지스트리를 사용하면 애플리케이션에서 미리 데이터가 이벤트 버스에 어떻게 구조화되어 있는지 알 수 있는 코드를 생성할 수 있다.
- 스키마는 버전 관리가 가능하다.
Resource-based Policy
- 특정 이벤트 버스에 대한 권한을 관리할 수 있다.
- 예를 들어, 다른 AWS 계정이나 다른 지런에서의 이벤트 수신을 허용 또는 거부할 수 있다.
- 사용 사례: AWS 조직의 모든 이벤트를 단일 AWS 계정, 혹은 리전에서 집계하는 등의 사용 사례를 구현할 수 있다.
CloudWatch Insights and Operational Visibility
CloudWatch Container Insights
- 컨테이너에서 발생하는 지표와 로그를 수집, 집계, 요약하는 기능
- 이는 Amazon Elastic Container Service (ECS), Amazon Elastic Kubernetes Service (EKS), EC2에서 실행되는 Kubernetes 플랫폼, 그리고 Fargate에서 실행되는 컨테이너에 대해 사용할 수 있음
- Amazon EKS와 Kubernetes의 경우, 컨테이너화된 CloudWatch 에이전트를 사용해야 컨테이너를 찾을 수 있다.
CloudWatch Lambda Insights
- AWS Lambda에서 실행되는 서버리스 애플리케이션을 모니터링하고 문제 해결하는 솔루션
- CPU 시간, 메모리, 디스크, 네트워크 등 시스템 수준의 지표를 수집, 집계, 요약
- Lambda의 콜드 스타트나 Lambda 작업자 종료와 같은 진단 정보도 수집, 집계, 요약
- Lambda Insight는 Lambda 계층으로 제공됨
CloudWatch Contributor Insights
- 로그 데이터를 분석하고 기고자(Contributor) 데이터를 표시하는 시계열 데이터를 생성하는 기능
- 상위 N개의 기고자에 대한 지표 확인
- 총 고유 기고자 수 및 사용량에 대한 지표 확인
- 네트워크 상위 대화자를 찾고 시스템 성능에 영향을 미치는 대상을 파악할 수 있다.
- AWS에서 생성한 모든 로그 (VPC, DNS 등)에 대해 동작
- 예를 들어, 불량 호스트를 식별하거나, 사용량이 가장 많은 네트워크 사용자를 찾거나, 가장 많은 오류를 생성하는 URL을 찾을 수 있다.
- 규칙을 직접 생성하거나 AWS가 생성한 샘플 규칙을 사용하여 구성할 수 있다.
- 백그라운드에서는 CloudWatch Logs가 활용된다.
- 또한 내장된 규칙이 있어 다른 AWS 서비스에서 가져온 지표도 분석할 수 있다.
CloudWatch Application Insights
- 모니터링하는 애플리케이션의 잠재적 문제와 진행 중인 문제를 분리할 수 있도록 자동화된 대시보드를 제공한다.
- 이 기능은 선택된 기술을 사용하는 Amazon EC2 인스턴스에서 애플리케이션이 실행된다. 지원되는 기술로는 Java, .NET, Microsoft IIS 웹 서버, 데이터베이스 등이 있다.
- 또한, Amazon EBS, RDS, ELB, ASG, Lambda, SQS, DynamoDB, S3 버킷, ECS, EKS, SNS, API Gateway와 같은 다른 AWS 리소스를 사용할 수도 있다.
- SageMaker 머신 러닝 서비스가 내부에서 사용된다.
- 애플리케이션의 상태에 대한 향상된 가시성을 제공하여 문제 해결 및 복구 시간을 단축할 수 있다.
- 발견된 문제와 알림은 모두 Amazon EventBridge 및 SSM OpsCenter로 전송된다.
CloudWatch Insights and Operational Visibility
- CloudWatch Container Insights
- ECS, EKS, EC2 상의 Kubernetes, Fargate와 같은 환경에서 사용됨
- Kubernetes를 사용한다면 실행할 에이전트가 필요
- 컨테이너의 지표와 로그를 수집
- CloudWatch Lambda Insights
- 서버리스 애플리케이션의 트러블 슈팅을 위한 세부 지표를 제공
- 서버리스 애플리케이션의 성능 및 동작을 분석
- CloudWatch Contributors Insights
- "Top-N" 기고자를 찾는 기능을 제공
- 로그 데이터에서 가장 많이 기여한 사용자 또는 리소스를 식별
- CloudWatch Application Insights
- 자동화된 대시보드를 제공하여 애플리케이션 및 관련된 AWS 서비스의 문제를 해결하는데 도움을 줌
- 애플리케이션과 연관된 여러 서비스의 운영 상태를 모니터링하고 문제를 해결할 수 있음
AWS CloudTrail
- AWS 계정의 거버넌스, 규정 준수 및 감사를 제공하는 서비스
- CloudTrail은 기본적으로 활성화되어 있음
- AWS 계정 내에서 이루어진 이벤트의 호출 및 API 호출의 이력을 얻을 수 있음
- 콘솔, SDK, CLI 뿐만 아니라 기타 AWS 서비스에서 발생한 AWS 계정 내의 모든 이벤트 및 API 호출 기록
- CloudTrail은 로그를 CloudWatch Logs 또는 S3에 저장할 수 있다.
- 전체 또는 단일 리전에 적용되는 Trail(트레일)을 생성해 모든 리전에 걸친 이벤트 기록을 한 곳으로 모을 수 있다.
- AWS에서 리소스가 삭제되었을 경우에는 먼저 CloudTrail을 통해 조사해 보면 된다!
CloudTrail Diagram
CloudTrail Events
Management Events (관리 이벤트)
- AWS 계정 내의 리소스에서 수행되는 작업들을 의미한다.
- 예시:
- 보안 구성 (IAM
AttachRolePolicy
)
- 데이터 라우팅 규칙 설정 (Amazon EC2
CreateSubnet
)
- 로깅 설정 (AWS CloudTrail
CreateTrail
)
- 트레일은 기본적으로 관리 이벤트를 로깅하도록 설정되어 있다.
- Read 이벤트(리소스를 수정하지 않는 작업)와 Write 이벤트(리소스를 수정할 수 있는 작업)를 분리할 수 있다.
Data Events (데이터 이벤트)
- 기본적으로 데이터 이벤트는 로깅되지 않는다 (높은 볼륨의 작업으로 인해).
- Amazon S3 객체 수준의 활동 (
GetObject
, DeleteObject
, PutObject
등): Read와 Write 이벤트를 분리할 수 있다.
- AWS Lambda 함수 실행 활동 (
Invoke
API)
CloudTrail Insights Event
- 계정에서 비정상적인 활동을 감지할 수 있다.
- 부정확한 리소스 프로비저닝
- 서비스 한도 도달
- AWS IAM 작업의 급격한 증가
- 주기적인 유지보수 활동의 중단
- CloudTrail Insights는 정상적인 관리 이벤트를 분석하여 기준선을 생성한 다음, 지속적으로 쓰기 이벤트를 분석하여 비정상적인 패턴을 감지한다.
- 이상 상황, 즉 인사이트 이벤트는 CloudTrail 콘솔에 표시된다.
- 이벤트는 Amazon S3로 전송할 수 있다.
- EventBridge 이벤트가 생성되어 자동화 요구에 대응할 수 있다
CloudTrail Events Retention
- 이벤트는 CloudTrail에 기본적으로 90일 동안 저장되고 그 이후엔 삭제된다.
- 기본 기간 이상으로 이벤트를 보존하려면 S3에 전송하여 S3에 로그를 기록하고 Athena를 사용해 분석하면 된다.
Amazon EventBridge – Intercept API Calls
AWS Config
- AWS 리소스의 감사 및 규정 준수 여부를 기록할 수 있게 해주는 서비스
- 시간에 따른 구성 및 변경 사항 기록을 지원
- AWS Config로 해결할 수 있는 문제:
- 보안 그룹에 무제한 SSH 액세스가 있는지 여부
- 내 버킷에 공개 액세스가 있는지 여부
- 시간이 지나면서 ALB 구성이 어떻게 변경되었는지 등
- 변경 사항에 대한 알림 (SNS 알림)을 받을 수 있다.
- AWS Config는 리전별 서비스이기 때문에 모든 리전별로 구성해야 한다.
- 리전과 계정 간 데이터를 통합할 수 있다.
- 구성 데이터를 S3에 저장하여 Athena로 분석할 수 있다.
Config Rules
- AWS에서 제공하는 사전 정의된 Config 규칙 (75개 이상의 규칙 제공)
- AWS Lambda 함수를 사용하여 사용자 지정 규칙을 만들 수 있다.
- ex. 각 EBS 디스크가 gp2 규칙인지
- ex. 각 EC2 인스턴스가 t2.micro 규칙인지
- 규칙은 다음과 같은 방식으로 평가 / 트리거될 수 있다.
- 각 구성 변경 이벤트마다
- 정기적으로, 혹은 일정 시간 간격으로
- AWS Config Rules는 동작을 미리 예방하지는 못하며, 준수 여부를 평가하고 보고하는 역할만 한다. (거부 기능이 없음)
- 가격:
- AWS Config에는 프리 티어가 없다.
- 리전당 기록된 각 구성 항목 당 $0.003 비용 청구
- 리전 당 Config 규칙 평가 당 $0.001 비용 청구
AWS Config Resource
- 규정 준수 여부를 시간별로
- 리소스 구성을 시간별로
- CloudTrail과 연결해 리소스에 대한 API 호출을 시간별로
- SSM 자동화 문서를 사용하여 규정을 준수하지 않는 리소스를 수정할 수 있다.
- AWS에서 제공하는 관리형 자동화 문서를 사동하거나 사용자 정의 자동화 문서를 생성할 수 있다.
- 팁: Lambda 함수를 호출하는 사용자 정의 자동화 문서를 생성할 수 있다.
- 자동 보완 후에도 여전히 규정을 미준수한다면 보완 재시도 (Remediataion Retries)를 설정할 수 있다.
Config Rules – Notifications
- AWS 리소스가 규정을 미준수했을 때마다 EventBridge를 사용하여 알림을 트리거할 수 있다.
- 구성 변경 및 규정 준수 상태 알림을 SNS로 전송할 수 있다. (모든 이벤트 - SNS 필터링 또는 클라이언트 측에서 필터링)
CloudWatch vs CloudTrail vs Config
CloudWatch
- 성능 모니터링 (지표, CPU, 네트워크 등) & 대시보드
- 이벤트 및 알림
- 로그 집계 및 분석
CloudTrail
- 모든 사용자에 의해 계정 내에서 수행된 API 호출 기록
- 특정 리소스에 대한 트레일 정의 가능
- 글로벌 서비스
Config
- 구성 변경 기록
- 규정 준수 규칙에 따라 리소스 평가
- 변경 내용 및 규정 준수에 대한 타임라인 정보 제공
For an Elastic Load Balancer
CloudWatch
- 들어오는 연결 수 모니터링
- 시간에 따른 오류 코드 비율 시각화
- 로드 밸런서 성능 파악을 위한 대시보드 생성
CloudTrail
- API 호출로 로드 밸런서에 대한 변경 사항을 수행한 사용자 추적
Config
- 로드 밸런서의 보안 그룹 규칙 추적
- 로드 밸런서의 구성 변경 추적
- SSL 인증서가 로드 밸런서에 항상 할당되어 있어야 한다는 규칙을 만들어 암호화되지 않은 트래픽이 로드 밸런서에 접근하지 못하게 할 수 도 있음
well done lad