[AWS] Monitoring, Audit and Performance: CloudWatch, CloudTrail & AWS Config

Gaeun·2023년 5월 23일
0

참고 자료

https://www.udemy.com/course/best-aws-certified-solutions-architect-associate/

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 호출을 시간별로

Config Rules – Remediations

  • 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 인증서가 로드 밸런서에 항상 할당되어 있어야 한다는 규칙을 만들어 암호화되지 않은 트래픽이 로드 밸런서에 접근하지 못하게 할 수 도 있음
profile
🌱 새싹 개발자의 고군분투 코딩 일기

0개의 댓글