AWS Certified Solutions Architect Associate [16] 모니터링, 감사, 성능

CHAN LIM·2022년 7월 29일
0

CloudWatch

CloudWatch 지표

  • AWS 모든 서비스에 대한 지표를 제공합니다.
  • 지표 (Metric)
    • 모니터링할 변수입니다.
    • 이름 공간(namespace)에 속합니다.
    • 지표의 속성은 배열이 됩니다.
    • 지표당 10개의 배열을 선택할 수 있습니다.
    • 지표에는 타임스탬프가 있습니다.
    • CloudWactch 대시보드를 만들 수 있습니다.

EC2 세부 모니터링

  • EC2 인스턴스는 5분마다 지표를 가집니다.
  • 비용을 추가하면, 1분마다 지표를 가질 수 있습니다.
  • 지표의 변화에 더 빨리 대응하고 더 빨리 스케일 아웃해야 할 때 ASG에 이점을 제공합니다.
  • 프리 티어로는 세부 모니터링 지표를 열 개 얻을 수 있습니다.
  • 중요한 점은 EC2 메모리 사용량인
    RAM이 푸시 되려면 꼭 사용자 지정 지표인
    인스턴스가 푸시해야 합니다.

CloudWatch Custom Metrics

  • CloudWatch에서 직접 지표를 정의해 사용자 지정 지표를 얻을 수도 있습니다.
  • put-metric-data라는 API 호출을 사용해서 말이죠.
  • 세그먼트 지표에 Instance.id나 Environment.name 같은 배열을 추가할 수 있습니다.
  • 두 값을 가진 storage-resolution이라는 API 매개변수를 통해 지표 해상도를 지정할 수 있습니다.
    • 기본 60초를 1/5/10/30초로 설정 가능합니다.
    • 비용이 증가합니다.
  • 사용자 지정 지표의 좋은 점은 과거나 미래의 지표를 푸시해도 작동한다는 것입니다.

CloudWatch Dashboards

  • 주요 지표와 경보에 접근할 수 있습니다.
  • 글로벌
  • 다른 AWS 계정이나 다른 리전의 그래프도 포함할 수 있습니다.
  • 대시보드에서 시간대와 시간 범위를 바꿀 수도 있습니다.
  • 자동 새로고침을 설정할 수도 있습니다.
  • AWS 계정이 없는 사람들과 대시보드를 공유할 수도 있습니다.
  • 무료로 제공되는 3개의 대시보드는 지표를 50개까지 넣을 수 있습니다.

CloudWatch Logs

  • 로그 그룹
    • 임의의 이름으로 보통 애플리케이션을 나타냅니다.
  • 로그 스트림
    • 애플리케이션 내 인스턴스나 다양한 로그 파일명 또는 컨테이너 등을 나타냅니다.
  • 로그 만료일도 정의할 수 있습니다.
  • 로그가 영원히 만료되지 않게 하거나 일정 기간 후 만료되게 할 수 있습니다.
  • CloudWatch Logs는 로그들 보낼 수 있다. 다음으로 :
    • Amazon S3
    • Kinesis Data Streams
    • Firehose
    • Lambda
    • ElasticSearch

CloudWatch Logs - Sources

  • SDK, CloudWatch Logs 에이전트, 통합 CloudWatch 에이전트를 통해 로그를 보낼 수 있습니다.
  • Elastic Beanstalk는 애플리케이션의 로그를 CloudWatch에 전송하고 ECS는 컨테이너의 로그를 CloudWatch에 전송합니다.
  • Lambda는 함수 자체에서 로그를 보냅니다.
  • VPC Flow Logs는 VPC 메타데이터 네트워크 트래픽 로그를 보냅니다.
  • API Gateway
  • CloudTrail은 필터링해 로그를 보낼 수 있습니다.
  • Route53은 모든 DNS 쿼리를 로그로 저장합니다.

CloudWatch Logs Metric Filter & Insights

  • CloudWatch Logs에서 필터 표현식을 쓸 수 있습니다.
    • 로그 내 특정 IP를 찾을 수 있습니다.
    • ERROR라는 문구를 가진 모든 로그를 찾을 수 있습니다.
  • 그렇게 만들어진 지표는 CloudWatch 경보로 연동할 수 있습니다.
  • CloudWatch Logs Insights
    • 이 기능을 통해 로그를 쿼리하고 이 쿼리를 대시보드에 바로 추가할 수 있습니다.

S3 Expert

  • CloudWatch에서 S3로 보낼 때 내보내기가 가능해질 때까지 최대 12시간은 걸릴 수 있습니다.
  • API 호출은 CreateExportTask입니다.
  • 실시간이 아닙니다.
  • CloudWatch Logs에서 로그를 스트림하고 싶다면 구독 필터를 사용해야 합니다.

CloudWatch Logs Subscriptions (구독 필터)


CloudWatch Logs로 여러 계정과 리전간 로그를 집계


CloudWatch Logs for EC2

  • EC2 인스턴스에서 CloudWatch로는 기본적으로 어떤 로그도 옮겨지지 않습니다.
  • EC2 인스턴스에 에이전트라는 작은 프로그램을 실행시켜 원하는 로그 파일을 푸시해야 합니다.
  • EC2 인스턴스에 로그를 보낼 수 있게 해주는 IAM 역할이 있어야 합니다.
  • 에이전트는 온프레미스 환경에서도 셋업될 수 있습니다.

CloudWatch Logs Agent & Unified Agent

  • 가상 서버들을 위한 것입니다.
  • CloudWatch Logs Agent
    • 오래된 버전
    • CloudWatch Logs로 로그만 보냅니다.
  • CloudWatch Unified Agent
    • 프로세스나 RAM 같은 추가적인 시스템 단계 지표를 수집합니다.
    • CloudWatch Logs에 로그를 보냅니다.
    • 지표와 로그를 둘 다 사용하기 때문에 통합 에이전트인 겁니다.
    • SSM Parameter Store를 이용해서 에이전트를 쉽게 구성할 수 있습니다.

CloudWatch Unified Agent – Metrics

EC2 / Linux 서버에 설치하면

  • CPU 지표 (active, guest, idle, system, user, steal)
  • 디스크 지표 (free, used, total),
  • 디스크 IO (writes, reads, bytes, iops)
  • RAM (free, inactive, used, total, cached)
  • 넷 상태 (number of TCP and UDP connections, net packets, bytes)
  • 프로세스 (total, dead, bloqued, idle, running, sleep)
  • 스와프 공간 (free, used, used %)

의 지표를 확인할 수 있습니다.

EC2에서 곧장 디스크, CPU, 스와프나 메모리가 아닌
네트워크에 대한 지표를 얻을 수 있긴 하지만
상당히 포괄적인 지표만 얻을 수 있는데요
세부 지표를 얻고 싶다면
통합 CloudWatch 에이전트를 이용하시면 됩니다


CloudWatch Alarms

  • 경보는 지표에서 알림을 트리거할 때 사용됩니다.
  • sampling, %, max, min 등의 다양한 옵션을 추가해 복잡한 경보를 정의할 수도 있습니다.
  • 세 상태 :
    • OK
      • 트리거되지 않았음
    • INSUFFICIENT_DATA
      • 상태를 결정할 데이터가 부족함
    • ALARM
      • 임계값이 위반되어 알림이 보내지는 상태
  • 기간 :
    • 경보가 지표를 평가하는 기간을 말합니다.
    • 고해상도 사용자 지정 지표에도 적용될 수 있는데
      10초, 30초 또는 60초의 배수로 설정될 수 있습니다.

CloudWatch Alarm Targets

  • 인스턴스를 멈추거나, 삭제하거나, 재시작하거나, 복구하는 등의 동작
  • Auto Scaling 동작의 트리거입니다.
  • SNS 서비스에 알림을 보내는 겁니다.

EC2 인스턴스 복구

  • 상태 점검

    • 인스턴스 상태
      • EC2 VM 점검
    • 시스템 상태
      * 하드웨어 점검
  • 회복

    • EC2 인스턴스 복구를 실행해 EC2 인스턴스를 다른 호스트로 옮기는 등의 작업을 할 수 있습니다.

CloudWatch Events

  • 이벤트 패턴
    • AWS 서비스 내의 이벤트를 인터셉트할 수 있습니다.
      • EC2 인스턴스 스타트나 CodeBuild 실패 Amazon S3나 Trusted Advisor의 이벤트
      • CloudTrail의 통합을 통해 어떤 API 호출도 인터셉트할 수 있습니다.
  • 예약이나 Cron을 생성할 수도 있습니다.
    • 예를 들어 매 4시간마다 이벤트를 생성하려 한다면,
  • 이벤트에 대한 JSON 페이로드가 생성되어 대상으로 이동할 겁니다.
    • Lambda, Batch, ECS task 같은 컴퓨팅
    • SQS, SNS, Kinesis DS DF 등의 통합
    • Step Functions 등의 오케스트레이션
    • SSM나 EC2 동작과 같은 유지 보수

Amazon EventBridge

  • Amazon EventBridge는 CloudWatch Events의 차세대 버전입니다.
  • 기본적으로 EventBridge에 포함된 이벤트 버스는 AWS 서비스에서 생성된 것으로
    이 버스는 CloudWatch 이벤트에서 사용하는 것과 동일합니다.
  • 파트너 이벤트 버스는 소프트웨어 서비스 공급자 또는 Zendesk, DataDog, Segment, Auth0와 같은 앱에서 이벤트를 받을 수 있습니다.
  • 사용자 지정 이벤트 버스는 애플리케이션에 이벤트를 전송할 수도 있습니다.
  • 이벤트 버스는 다른 AWS 계정에서도 접근할 수 있으며 이는 리소스 정책을 통해 확인할 수 있습니다.
  • 모든 이벤트를 아카이빙하거나 이벤트 버스에 필터를 적용해 저장하려는 기간을 지정할 수 있습니다.
  • 아카이빙된 이벤트를 재생해서 과거에 수행된 이벤트 결과를 확인할 수 있어 유용합니다.

Amazon EventBridge – Schema Registry

  • EventBridge에 이벤트가 전송되면 서비스 자체에서 버스 내 이벤트를 분석하고 스키마(schema)를 추론합니다.
  • 스키마 레지스트리(Schema Registry)에서 코드를 생성하고 앱은 코드를 통해 이벤트 버스 내 데이터의 구조를 인식합니다.
  • UI는 오른쪽과 같고 모든 스키마는 버전이 기록됩니다.

Amazon EventBridge – Resource-based Policy

  • 리소스 기반 정책이 있어 버스 자체에 특정 권한을 부여할 수 있습니다.

  • 예시: 다른 AWS 계정 또는 리전 이벤트를 허용/거부

    이를 통해 핵심 이벤트 버스로 모든 이벤트를 통합하여 기관이나 다른 지역의 이벤트를 한 곳에 종합할 수 있습니다.


Amazon EventBridge vs CloudWatch Events

  • EventBridge는 CloudWatch Events에 기반해 기능을 확장한 차세대 버전입니다.
  • 백그라운드에서는 같은 서비스 API와 엔드 포인트 그리고 같은 서비스 인프라를 사용합니다.
  • EventBridge에서는 이벤트 버스를 확장하여 사용자 지정 애플리케이션 또는 타사 SaaS 앱에도 사용할 수 있습니다.
  • 스키마 레지스트리 기능과 더불어 이벤트 재생, 아카이빙 리소스 기반 정책도 갖고 있습니다.

  • EventBridge는 새로운 이름과 새로운 기능을 가진 CloudWatch Events의 차세대 버전입니다.
  • EventBridge와 CloudWatch Events를 혼용해서 사용하지만 특정 EventBridge 기능을 가리킬 때는 별도로 언급하겠습니다.

AWS CloudTrail

  • 거버넌스(Governance)와 규정 준수 그리고 감사권을 부여합니다.
  • 동작이 기본값으로 설정돼 있고요.
  • AWS 계정 내의 모든 이벤트 기록과 다음 서비스에 의한 API 호출 기록을 볼 수 있습니다.
    • 콘솔, SDK, CLI 그 외 AWS 서비스들
  • 모든 로그를 CloudTrail에서 볼 수 있습니다.
  • 이 로그들을 CloudWatch Logs나 Amazon S3로 옮길 수 있습니다.
  • 또한 모든 리전과 단일 리전에 추적을 적용할 수 있습니다.
  • 모든 리전에서 축적된 이벤트의 모든 기록을 S3 버킷과 같은 특정 서비스에 넣을 수 있습니다.

CloudTrail Events

  • 관리 이벤트
    • AWS 계정 내 리소스에 작동한 연산을 나타냅니다.
    • 예를 들어
      • 누군가 보안을 구성하려면, IAM AttachRolePolicy라는 API 코드를 쓸 것입니다.
      • 서브넷을 생성해도 마찬가지로 표시될 것이고 로깅을 셋업해도 볼 수 있습니다.
      • 리소스나 AWS 계정을 수정하는 모든 것이 CloudTrail에 표시됩니다.
    • 기본적으로 추적은 관리 이벤트를 항상 로그하게 구성돼 있습니다.
    • 관리 이벤트는 두 가지로 나눌 수 있는데 먼저 리소스를 수정 않는 읽기 이벤트가 있습니다.

  • 데이터 이벤트
    • 기본적으로 데이터 이벤트는 로깅되지 않습니다.
    • GetObject나 DeleteObject와 같은 Amazon S3의 객체 활동을 말합니다.
    • AWS Lambda 함수 실행 활동입니다.

  • CloudTrail Insights 이벤트
    • CloudTrail Insights는 유료로 활성화되지만 이벤트를 분석합니다.
      • 불명확한 리소스 프로비저닝
      • 서비스 한계 도달
      • AWS IAM 동작 과다 사용
      • 주기적 유지 보수 활동 빈틈 같은 것
  • CloudTrail은 먼저 정상적인 관리 활동을 분석해서 기준을 세우고 그 후 들어오는 쓰기 이벤트를 계속해서 분석합니다.
  • 분석해서 기준을 세우고 그 후 들어오는 쓰기 이벤트를 계속해서 분석합니다.
    • 이 Insights 이벤트는 CloudTrail 콘솔에 표시됩니다.
    • 필요하면 Amazon S3로도 보내집니다.
    • EventBridge 이벤트가 생성됩니다.

CloudTrail Events Retention

  • 기본적으로 CloudTrail 내 이벤트는 90일까지 저장됩니다.
  • 그 이후에는 삭제됩니다.
  • 보존 기간을 늘리기 위해서는 이벤트를 S3에 로그해 즉, S3에 보내 Athena를 사용해 이벤트를 분석하면 됩니다.

AWS Config

  • Config는 AWS 내 리소스에 대한 감사와 규정 준수 여부를 기록할 수 있게 해주는 서비스입니다.
  • 설정된 규칙에 기반해 구성과 구성의 시간에 따른 변화를 기록할 수 있으며 이를 통해 필요할 경우 인프라를 빠르게 롤백하고 문제점을 찾아낼 수 있습니다.
  • AWS Config로 해결되는 Q :
    • '보안 그룹에 제한되지 않은 SSH 접근이 있나?'
    • '버킷에 공용 액세스가 있나?'
    • '시간이 지나며 변화한 ALB 구성이 있나?'
  • Config는 리전별 서비스이기 때문에 모든 리전별로 구성해야 합니다.
  • 데이터를 중앙화하기 위해 리전과 계정 간 데이터를 통합할 수 있습니다.
  • 모든 리소스의 구성을 S3에 저장해 나중에 분석할 수도 있습니다.

Config Rules

  • AWS 관리형 Config 규칙이 있고 여기에는 75종의 규칙이 있습니다.
  • 스스로 Config 규칙을 만들어도 됩니다.
    • 예를 들어 각 EBS 디스크가 gp2 유형인지 평가할 수 있습니다.
    • 개발 계정의 EC2 인스턴스가 t2.micro 유형인지 평가할 수도 있습니다.
  • Config 규칙은 규정 준수를 위한 것이지 어떤 동작을 미리 예방하지는 못합니다.
  • Config는 결제해야 하며 굉장히 비싸질 수 있습니다.
    • 3센트를 지불해야 하고 리전당 Config 규칙 평가별로 0.1센트를 내야 합니다.

Config Rules – Remediations (교정)

  • Config 내에서 행동을 차단할 수는 없지만,
    SSM 자동화 문서를 이용해서 규정을 준수하지 않는 리소스를 수정할 수 있습니다.

    • SSM 문서가 IAM 액세스 키를 비활성화합니다
  • AWS 관리형 문서를 사용하든 본인만의 자동화 문서를 만들어 사용하든
    규정을 준수하지 않는 리소스를 수정할 수 있다는 겁니다

  • 만약 계속 스크립트를 하고 싶다면
    람다 함수를 실행하는 문서를 생성해서 원하는 작업을 수행할 수도 있죠
    수정 작업은 재시도 될 수 있습니다.

  • 리소스를 자동 수정했음에도 여전히 규정을
    미준수한다면 5번까지 재시도될 수 있습니다


Config Rules - Notifications

  • EventBridge를 사용해 리소스가 규정을 미준수했을 때마다 알림을 보낼 수 있습니다.
  • 모든 구성 변경과 모든 리소스의 규정 준수 여부 알림을 Config에서 SNS로 보낼 수도 있습니다.

CloudWatch vs CloudTrail vs Config

  • CloudWatch
    • 성능 모니터링 (지표, CPU, 네트워크, etc) 그리고 대시보드
    • 이벤트 & 경고
    • 로그 집계 및 분석 도구도 사용할 수 있습니다.
  • CloudTrail
    • 계정 내에서 만든 API에 대한 모든 호출을 기록합니다.
    • 특정 리소스에 대한 추적도 정의할 수 있습니다.
    • 글로벌 서비스
  • Config
    • 구성 변경을 기록하고
    • 규정 준수 규칙에 따라 리소스를 평가합니다.
    • 변경과 규정 준수에 대한 타임라인을 멋진 UI로 보여줍니다.

Elastic Load Balancer를 통해

  • CloudWatch

    • 들어오는 연결 수를 모니터링합니다.
    • 오류 코드 수를 시간 흐름에 따라 비율로 시각화할 수 있으며
    • 로드 밸런서의 성능을 볼 수 있는 대시보드도 만들 수 있습니다
  • Config

    • 로드 밸런서에 대한 보안 그룹 규칙을 추적해
      누구도 수상하게 행동하거나 무언가 변경하지 못하게 하려고 사용합니다.
    • 누군가 SSL 인증서 등을 수정하지는 않는지 감시하기 위해
      로드 밸런서의 구성 변경을 추적하는 데 사용할 수도 있습니다.
    • SSL 인증서가 로드 밸런서에 항상 할당되어 있어야 한다는 규칙을 만들어
      암호화되지 않은 트래픽이 로드 밸런서에 접근하지 못하게 할 수도 있습니다.
  • CloudTrail

    • 누가 API를 호출하여 로드 밸런서를 변경했는지 추적합니다.

From
AWS Certified Solutions Architect Associate 시험합격!

profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글