develop/AWS
[SAA] Monitoring, Audit and Performance: CloudWatch, CloutTrail, AWS Config
hsleeee
2024. 6. 23. 10:00
반응형
SMALL
1. Amazon CloudWatch
- CloudWatch Metrics
- CloutWatch는 AWS의 모든 서비스에 대한 지표를 제공
- Metric(지표)는 모니터링 할 변수 (CPUUtilization, NetworkIn ...)
- 지표는 네임스페이스에 속함
- 지표의 속성으로 Dimenesion(측정 기준)이 있고(instanc id, environment ...), 지표 당 최대 측정 기준은 10개
- 지표는 시간을 기반으로 하므로 타임스탬프가 꼭 있어야 함
- 지표가 많아지면 CloudWatch 대시보드에 ㅇ추가해 모든 지표를 한 번에 확인 가능
- CloudWatch 사용자 지정 지표 생성 가능(ex. RAM 지표)
- 기능
- CloudWatch Metric Streams(외부 스트리밍)
- CloudWatch 지표를 선택한 대상으로 지속적으로 스트리밍하면 거의 실시간으로 전송도디고 지연 시간은 짧아짐
- Amazon Kinesis Data Firehose가 대상이 될 수 있고, 해당 대상을 통해 다른 목적지로 이동 가능
- Datalog, Dynatrace, New Reelic, Splunk, Sumo Logic 등과 같은 제 3자 서비스 제공업체도 사용 가능
- 필요에 따라 지표를 필터링하여 일부 지표만 스트리밍 하는 옵션도 제공
- CloudWatch 지표를 선택한 대상으로 지속적으로 스트리밍하면 거의 실시간으로 전송도디고 지연 시간은 짧아짐
- CloudWatch Metric Streams(외부 스트리밍)
- CloudWatch Logs
- 로그 그룹(Log Groups): 로그 그룹은 동일한 보존 기간, 모니터링 및 액세스 제어 설정을 공유하는 로그 스트림 그룹을 정의, 각 로그 스트림은 하나의 로그 그룹에 속해야 하며 일반적으로 애플리케이션을 나타내는 임의의 이름
- 로그 스트림(Log Stream): 로그 스트림은 동일한 소스를 공유하는 로그 이벤트 시퀀스, 애플리케이션 내의 인스턴스, 로그 파일, 컨테이너 등을 나타냄
- 로그의 유효기간을 지정할 수 있으며, 로그를 영원히 유지하거나 30일 등으로 설정할 수 있음
- Cloudwatch Logs는 다양한 대상으로 로그를 전송 가능: Amazon S3(exports), Kinesis Data Streams, Kinesis Data Firehose, AWS Lambda, OpenSearch
- Sources
- SDK: SDK를 사용하여 로그를 직접 CloudWatch로 전송 가능
- CloudWatch Logs Agent: EC2 인스턴스에서 실행되는 로그 에이전트를 사용하여 로그를 수집 가능
- CloudWatch Unified Agent: 로그 파일 및 메트릭 데이터를 수집하기 위해 설치된 에이전트, EC2 인스턴스, 온프레미스 서버 및 컨테이너에 사용 가능
- Elastic Beaenstalk: 애플리케이션에서 생성되는 로그 수집
- ECS: 컨테이너화된 애플리케이션에서 생성되는 로그 수집
- AWS Lambda: Lambda 함수의 로그 수집
- VPC Flow logs: 가상 사설 클라우드(VPC)에서 생성되는 네트워크 흐름 로그를 수집
- API Gateway
- CloudTrail Based on Filter: 지정된 필터에 따라 CloudTrail 이벤트 로그를 수집
- Route 53: DNS 쿼리 로그 수집
- Metric Filter & Insights
- Metric Filter
- CloudWatch Logs는 필터 표현식을 사용하여 로그 데이터 필터링(로그에서 특정 IP 찾기, "ERROR"와 같은 항목의 발생 횟수 확인 등)
- 지표 필터는 CloudWatch 경보를 트리거하기 위해 사용 가능
- Insights
- CloudWatch Logs Insights는 로그 데이터에 대한 쿼리를 수행하고 결과를 분석할 수 있는 기능 제공
- 이를 통해 로그 데이터를 실시간으로 검색하고 분석 가능, CloudWatch 대시보드에 쿼리 결과를 추가하여 시각화 가능
- 빠르고 효율적인 로그 분석 가능, 필요한 정보를 쉽게 추출 가능
- CloudWatch S3 Exports
- 로그 데이터는 내보내기가 가능해질 때 까지 최대 12시간 소요
- API 호출은 CreateExportTask
- 시간이 따로 정해져있어 실시간으로 작동하지 않음
- CloudWatch Logs에서 로그를 스트림하고 싶다면 구독 필터(Logs Subscriptions)를 사용해야 함
- Logs Subscriptions: CloudWatch Logs 상단에 적용하여 이를 목적지로 보내는 필터(https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/SubscriptionFilters.html)
- CloudWatch Logs Agent & Unified Agent
- CloudWatch Logs for EC2
- 기본적으로 EC2 인스턴스의 로그는 CloudWatch로 전송 X
- 원하는 로그 파일을 전송하기 위해서는 EC2에 CloudWatch 에이전트를 실행해야 함
- 로그를 보낼 수 있게 해주는 IAM Role이 있어야 함
- CloudWatch Logs Agent는 온프레미스 환경에서도 설정할 수 있음
- CloudWatch Logs Agent& Unified Agent
- 가상 서버(EC2 instance, 온프레미스 서버 등)
- CloudWatch Logs Agent
- 오래된 버전의 에이전트
- CloudWatch Logs로만 전송 가능
- CloudWatch Unified Agent
- RAM, 프로세스 등과 같은 추가적인 시스템 단계 지표 수집
- CloudWatch Logs로 전송할 로그 수집
- SSM Parameter Store를 사용하여 중앙 집중식 환경 구성
- 지표와 로그를 둘 다 사용하기 때문에 통합 에이전트임
- Metrics
- Linux 서버 또는 EC2 인스턴스에서 직접 수집
- CloudWatch 통합 에이전트가 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)
- process(total, dead, bloqued, idle, running, sleep)
- swap space(free, used, used %)
- CloudWatch Alarms
- 경보는 모든 지표에 대한 알람을 트리거 하는데 사용
- 다양한 옵션 (sampling, %, max, min ...)
- 경보 상태
- OK: 트리거되지 않은 상태
- INSUFFICIENT_DATA: 상태를 결정할 데이터 부족
- ALARM: 임계값이 위반되어 알림이 보내지는 상태
- 기간
- 지표를 평가하는 데 걸리는 시간 길이(초단위)
- 고해상도 사용자 지정 지표: 10초, 30초, 또는 60초의 배수
- Targets
- EC2 Instance: 인스턴스를 중지, 종료, 재부팅 또는 복구하는 등의 동작
- EC2 Auto Scaling: 스케일 OUT/IN
- Amazon SNS: SNS 서비스에 알림
- EC2 Instance Recovery
- 상태 확인 (Staus Check)
- 인스턴스 상태: ECM VM(Virtual Machine) 점검
- 시스템 상태: 기반이 되는 하드웨어 점검
- 복구: 특정 EC2 인스턴스를 모니터링 하다가 경보가 위반되었을 경우, EC2 인스턴스 복구를 실행해 EC2 인스턴스를 다른 호스트로 옮기는 등의 작업 가능, 이 때 동일한 사설, 공인, 탄력적 IP주소와 동일한 메타데이터, 동일한 인스턴스 배치 그룹을 가지게 됨
- CloudWatch Alarm: Good to Know
- 경보는 CloudWatch Logs Metrics에 기반하여 생성
- 경보 알림 테스트시에는 set-alarm-state 라는 CLI 호출을 사용, 특정 임계값이 도달하지 않아도 경보를 트리거 하고 싶을 때 사용
- ex) aws cloudwatch set-alam-state --alarm-name "myalarm" --state-value ALARM -state-reason "testing purposes"
- Amazon Event Bridge(= CloudWatch Event)
- Schedule: CRON 작업(스크립트 예약)
- Event Pattern: 특정 작업을 수행하는 서비스에 반응하는 이벤트 규칙
- 대상(destination)이 다양하다면 Lambda 함수를 트리거해서 SQS, SNS 메시지 등을 보낼 수 있음
- Amazon EventBridge Event Bus
- 리소스 기반 정책을 사용하여 다른 AWS 계정의 이벤트 버스에 액세스할 수 있음
- 이벤트 버스로 전송된 이벤트를 아카이브 가능(모든 이벤트 or 필터링된 서브셋)
- 이벤트를 아카이빙 할 대는 보존기간을 설정 가능(무기한, 일정 기간)
- 아카이브된 이벤트를 재생할 수 있는 기능도 있음
- Schema Registy
- 이벤트 버스의 이벤트를 분석하고 스키마를 추론할 수 있음
- 스키마 레지스트리를 사용하면 애플리케이션에서 미리 데이터가 이벤트 버스에 어떻게 구조화되어 있는지 알 수 있는 코드를 생성 가능
- 스키마는 버전 관리 가능
- Resource-based Policy
- 특정 이벤트 버스에 대한 권한을 관리
- 다른 AWS 계정이나 다른 리전에서의 이벤트 수신을 허용 또는 거부할 수 있음
- ex) 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 ..) 에 대해 동작
- ex) 불량 호스트 식별, 사용량이 가장 많은 네트워크 사용자 찾기, 가장 많은 오류를 생성하는 URL 찾기 등
- 규칙을 직접 생성하거나 AWS가 생성한 샘플 규칙을 사용하여 구성 가능 - 백그라운드에서는 CloudWatch Logs가 활용
- 내장된 규칙이 있어 다른 AwS 서비스에서 가져온 지표도 분석 가능
- 로그 데이터를 분석하고 기고자(Contributor) 데이터를 표시하는 시계열 데이터를 생성하는 기능
- CloudWatch Application Insights
- 모니터링하는 애플리케이션의 잠재적 문제와 진행중인 문제를 분리할 수 있도록 자동화된 대시보드 기능 제공
- 선택된 기술을 사용하는 Amazon EC2 인스턴스에서 실행, 지원 기술: Java, .NET, Microsoft IIS 웹 서버, DB 등
- Amazon EBS, RDS, ELB, ASG, Lambda, SQS, DynamoDB, S3 Bucket, 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를 사용한다면 실행할 에이전트 필요
- 컨테이너의 지표와 로그 수집
- ECS, EKS, EC2 상의 Kubernetes, Fargate와 같은 환경에서 사용
- CloudWatch Lambda Insights
- 서버리스 애플리케이션의 트러블 슈팅을 위한 세부 지표 제공
- 서버리스 애플리케이션의 성능 및 동작 분석
- CloudWatch Contributors Insigts
- "Top-N" 기고자를 찾는 기능 제공
- 로그 데이터에서 가장 많이 기여한 사용자 또는 리소스 식별
- CloudWatch Application Insights
- 자동화된 대시보드를 제공하여 애플리케이션 및 관련된 AWS 서비스의 문제를 해결하는데 도움
- 애플리케이션과 연관된 여러 서비스의 운영 상태를 모니터링하고 문제 해결 가능
- CloudWatch Container Insights
- CloudWatch Container Insights
2. AWS CloudTrail
- AWS 계정의 거버넌스, 규정 준수 및 감사를 제공하는 서비스
- CloudTrail은 기본적으로 활성화 되어있음
- AWS 계정 내에서 이루어진 이벤트의 호출 및 API 호출의 이력을 얻을 수 있음
- 콘솔, SDK, CLI 뿐만 아니라 기타 AWS 서비스에서 발생한 AWS 계정 내의 모든 이벤트 및 API 호출 기록
- CloudTrail은 로그를 CloudWatch Logs 또는 S3에 저장할 수 있음
- 전체 또는 단일 리전에 적용되는 Trail을 생성해 모든 리전에 걸친 이벤트 기록을 한 곳으로 모을 수 있음
- AWS에서 리소스가 삭제되었을 경우에는 먼저 CloudTrail을 통해 조사
- Events
- Management Events(관리 이벤트)
- AWS 계정 내의 리소스에서 수행되는 작업들을 의미
- ex) 보안 구성(IAM AttachRolePolicy), 데이터 라우팅 규칙 설정(Amazon EC2 CreateSubnet), 로깅 설정(AWS CloudTrail CreateTrail)
- 트레일은 기본적으로 관리 이벤트를 로깅하도록 설정
- Read 이벤트와 Write 이벤트를 분리 가능
- Data Events(데이터 이벤트)
- 기본적으로 높은 볼륨의 작업으로 인해 데이터 이벤트는 로깅 X
- 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에 전송하여 로그를 기록하고 Athena를 사용하여 분석
- Management Events(관리 이벤트)
3. AWS Config
- AWS리소스의 감사 및 규정 준수 여부를 기록할 수 있게 해주는 서비스
- 시간에 따른 구성 및 변경 사항 기록 지원
- AWS Config로 해결할 수 있는 문제
- 보안 그룹에 무제한 SSH 액세스가 있는지 여부
- 내 버킷에 공개 액세스가 있는지 여부
- 시간이 지나면서 ALB 구성이 어떻게 변경되었는지 등
- 변경사항에 대한 알림(SNS 알림)을 받을 수 있음
- AWS Config는 리전별 서비스이기 때문에 모든 리전별로 구성해야 함
- 리전과 계정 간 데이터 통합 가능
- 구성 데이터를 S3에 저장하여 Athena로 분석
- Rules
- AWS에서 제공하는 사전 정의된 Config 규칙(75개 이상의 규칙 제공)
- AWS Lambda 함수를 사용하여 사용자 지정 규칙 생성 가능
- 규칙은 다음과 같은 방식으로 평가 / 트리거 될 수 있음
- 각 구성 변경 이벤트마다
- 정기적 / 일정 시간 간격
- AWS Config Rules는 동작을 미리 예방하지는 못하며, 준수 여부를 평가하고 보고하는 역할(거부 기능 X)
- 가격
- NOT Free tier
- 리전당 기록된 각 구성 항목당 $0.003
- 리전당 Config 규칙 평가당 $0.001
- Remediations(보완)
- SSM 자동화 문서를 사용하여 규정을 준수하지 않는 리소스를 수정 가능
- AWS에서 제공하는 관리형 자동화 문서를 사동하거나 사용자 정의 자동화 문서를 생성할 수 있음
- tip: Lambda 함수를 호출하는 사용자 정의 자동화 문서도 생성 가능
- 자동 보완 후에도 여전히 규정을 미준수한다면 보완 재시도(Remediation Retries)를 설정 할 수 있음
- Notifications(알림)
- AWS 리소스가 규정을 미준수했을 때마다 EventBridgee를 통해 알림을 트리거 할 수 있음
- 구성 변경 및 규정 준수 상태 알림을 SNS로 전송 가능
CloudWatch | CloudTrail | Config | |
성능 모니터링 (지표, CPU, Network ..) & 대시보드 |
모든 사용자에 의해 계정 내에서 수행된 API 호출 기록 | 구성 변경 기록 | |
이벤트 및 알림 | 특정 리소스에 대한 트레일 정의 가능 | 규정 준수 규칙에 따라 리소스 평가 | |
로그 집계 및 분석 | 글로벌 서비스 | 변경 내용 및 규정 준수에 대한 타임라인 정보 제공 | |
For an Elastic Load Balancer |
들어오는 연결 수 모니터링 | API 호출로 로드밸런서에 대한 변경 사항을 수행한 사용자 추적 | 로드 밸런서의 보안 그룹 규칙 추척 |
시간에 따른 오류 코드 비율 시각화 | 로드 밸런서의 구성 변경 추적 | ||
로드밸런서 성능 파악을 위한 대시보드 생성 | SSL 인증서가 로드 밸런서에 항상 할당되어 있어야 한다는 규칙을 만들어 암호화되지 않은 트래픽이 로드 밸런서에 접근하지 못하도록 할 수도 있음 |
반응형
LIST