AWS 모니터링 - 기초

wjdghks95·2024년 8월 5일
post-thumbnail

Amazon CloudWatch는 DevOps 엔지니어, 개발자, SRE(사이트 안정성 엔지니어) 및 IT 관리자를 위해 구축된 모니터링 및 관찰 기능 서비스입니다. CloudWatch는 애플리케이션을 모니터링하고, 시스템 전반의 성능 변경 사항에 대응하며, 리소스 사용률을 최적화하고, 운영 상태에 대한 통합된 보기를 확보하는데 필요한 데이터와 실행 가능한 통찰력을 제공합니다.

Amazon CloudWatch 기초

Amazon CloudWatch

  • AWS에서 제공하는 AWS 서비스 / 어플리케이션의 모니터링 서비스
  • Public 서비스
    • 인터넷을 통해서 접근
    • Interface Endpoint로 접근
  • 로그, 지표, 이벤트 등의 운영데이터를 수집하여 시각화 및 처리
    • 경보 생성을 통해 자동화된 대응 가능
  • AWS의 거의 대부분의 서비스와 기본적으로 연동

주요 기능

지표(Metric) 수집

  • 시간 순서로 정리된 데이터의 집합
    • 다수의 데이터 포인트로 구성
  • AWS의 대부분의 서비스는 기본적으로 지표를 제공
    • 예: EC2 CPU 사용량, 네트워크 등
  • 커스텀 지표 생성 가능
    • 유저가 직접 원하는 데이터포인터를 생성해서 CloudWatch로 전달하여 생성

경보(Alarm)

  • 수집된 지표 값의 변동에 따라 발생하는 알림 생성
    • 일정 수치(threshold)로 도달하거나 이상/이하 일 때 이벤트 발생
  • 다양한 방법으로 대응 가능
    • SNS로 Lambda 실행, 이메일 전달 등
    • 예: 웹 서버의 500 에러가 일정 수치 이상일 때 슬랙 알림

로그 수집 및 관리

  • Lambda, EC2, Route53, ECS 등 여러 AWS 서비스의 로그를 수집
  • 수집된 로그를 Kinesis, S3 등 다른 서비스/계정으로 전달 가능
  • 자체적으로 확인하거나 쿼리 가능

대시보드

  • 수집한 로그/지표를 기반으로 대시보드 구성
  • 외부 리소스를 활용해서 커스텀 대시보드 구성 가능
    • 예: S3 객체 표시, HTML 커스텀 그래프 표시

기타 서비스

  • 애플리케이션을 모니터링 하는 Synthetics Canary
  • 애플리케이션, 컨테이너, Lambda 등의 문제를 찾아주는 인사이트 서비스 등

※ CloudWatch의 요금

  • 프리티어(월)
    • 기본 모니터링 지표/지표 10개
    • 대시보드 3개
    • 경보 10개
    • 5GB의 로그 등
  • 요금
    • 로그 저장 비용, 분석 비용, Live Tail 비용 등
    • 지표 갯수
    • 경보 갯수
    • 기타 대시보드/모니터링/분석 등 사용 서비스당 비용 발생

Amazon CloudWatch 지표

지표(Metric) 수집

  • 시간 순서로 정리된 데이터의 집합
    • 다수의 데이터 포인트로 구성
  • AWS의 대부분의 서비스는 기본적으로 지표를 제공
    • 예: EC2의 CPU, 네트워크, Disk IO
  • 커스텀 지표 생성 가능
    • 유저가 직접 원하는 데이터 포인트를 생성해서 CloudWatch로 전달하여 생성
    • 예: EC2의 메모리 사용량 등
  • 리전 단위
  • 15개월 이후 사라짐: 지속적으로 새로운 데이터가 들어올 경우 15개월 이전의 데이터는 사라짐

네임스페이스

  • CloudWatch 지표의 컨테이너
  • 지표의 출신 혹은 성격에 따라 논리적으로 묶은 단위
  • AWS에서 수집하는 기본적인 지표는 AWS/{서비스명} 형식
    • 예: AWS/EC2, AWS/RDS
  • 필수 + 반드시 직접 명시해야 함(디폴트 없음)

지표 이름

  • 지표의 고유 이름 = 무엇에 관한 지표인지?
  • 필수

데이터 포인트(Data Points)

  • 지표를 구성하는 시간-값 데이터 단위
    • 시간은 초 단위까지
    • 예: 2016-10-31T23:59:59Z
  • UTC 기준이 매우 권장됨
    • 내부적인 통계 혹은 알림 등에서 UTC 기준으로 활용

데이터 포인트의 Resolution

  • 데이터가 얼마나 자주 수집되는지를 나타내는 개념
    • 기본적으로 60초 단위로 수집
    • High Resolution 모드에서는 1초 단위
  • 이후 초 단위로 1,5,10,30 혹은 60의 배수로 조회 가능

데이터 포인트의 기간(Period)

  • 데이터가 얼마만큼의 시간을 기준으로 묶여서 보여지는지에 관한 개념
  • 초 단위로 1,5,10,30 혹은 60의 배수
    • 60초 단위 미만은 High-Resolution 모드의 데이터만 가능
    • 최소 1초에서 최대 86,400초(1일)까지 가능
  • 보관 기간
    • 60초 미만은 최대 3시간
    • 60초는 15일
    • 300초는 63일
    • 1시간(3600초)는 455일(15개월)
  • 작은 단위의 보관 기간은 큰 단위로 계속 합쳐짐
    • 예: 1분 단위는 15일 동안만 확인 가능. 이후 15일이 지나면 5분 단위로만 확인 가능. 이후 63일이 지나면 1시간 단위로만 확인 가능
  • 주의 사항: 2주 이상의 데이터가 업데이트 되지 않은 Metric의 경우 콘솔에서 보이지 않음
    • 모든 콘솔에서 사라짐
    • CLI로만 확인 가능

차원(Dimension)

  • 일종의 태그/카테고리
    • 키-벨류로 구성
    • Metric(지표)를 구분할 때 사용
  • 최대 30개까지 할당 가능
  • 예: AWS/EC2 네임스페이스에 모든 EC2의 지표가 수집됨. 이후 InstanceID Dimention을 통해 EC2 인스턴스 단위로 구분해서 확인 가능
  • 조합 가능
    • 예: Dimention: (Server=prod, Domain=Seoul)

기타

  • Unit: 단위(%, byte, seconds, count 등)

Amazon CloudWatch 로그

Amazon CloudWatch 로그

  • AWS 서비스 및 온프레미스 서비스에서 수집한 로그를 저장하고 관리할 수 있는 서비스
    • AWS의 대부분의 서비스와 기본적으로 연동(예: AWS Lambda 등)
  • 로그 관리 및 활용을 위한 다양한 기능 제공
    • 로그 모으기: 다양한 계정에서 하나의 계정으로 로그를 모아서 관리
    • 실시간 모니터링
    • 로그 수명 주기 관리: 일정 기간 후에 로그를 아카이브 하거나 삭제
    • 로그 쿼리 기능: 수집한 로그에서 일정 규칙에 따라 로그 쿼리

Amazon CloudWatch 로그의 구성 요소

로그 그룹

  • 로그의 관리 단위로 주로 같은 어플리케이션/서비스/리소스 단위로 분류
    • 예: application-{스테이지}, Lambda 함수 명 등
    • 다양한 설정의 기본 단위

로그 스트림

  • 같은 소스에서 순차적으로 받는 로그들의 집합
    • 예: EC2 클러스터로 구성된 웹 서버에서 특정 인스턴스 아이디에서 온 로그 집합

로그 이벤트

  • 타임스탬프와 데이터로 구성한 특정 이벤트의 기록

보존 기간

  • 로그가 자동으로 삭제되기까지 걸리는 시간(무한정 보관 가능)

로그 클래스

CloudWatch 로그의 기능

Log Insights

  • 대화식 검색으로 CloudWatch 로그를 분석할 수 있는 서비스
    • JSON 형식으로 구성된 로그를 쿼리 가능
    • 하나의 요청은 최대 20개의 로그 그룹을 동시에 쿼리 가능
  • S3 -> OpenSearch 등 별도의 로그 분석의 작업 없이 로그를 분석 가능
  • 쿼리 저장 및 대시보드로 시각화 가능

Metric Filter

  • CloudWatch Log에 필터를 걸어 필터링 된 로그를 지표화 시켜주는 기능
  • 특정한 필터 패턴과 일치되는 로그만 지표화
    • 예: {.eventType = "*" && $.sourceIPAddress != 123.123.*}
    • 다양한 비교 및 정규식 적용 가능
  • 필터가 적용된 시점부터 지표화

로그 관련 기타 기능

  • Live Tailing: 실시간으로 올라오는 로그를 확인하는 방법
    • 콘솔 / CLI 활용 가능
  • 이상 탐지: 머신러닝을 활용해서 로그 그룹 단위로 패턴에서 벗어난 이상한 로그를 탐지
  • Log Subscription: 실시간으로 다른 서비스/보관 장소로 로그를 전달하는 기능
    • 로그에 대한 분석, 로그 전용 계정으로 이관, 백업 등의 용도로 활용
    • 필터링 가능
    • 예: S3에 백업, 다른 계정으로 전송, ElasticSearch 등으로 전달하여 분석

실습 - CloudWatch 활용

※ 로그 테일링

※ 로그 인사이트

Amazon CloudWatch 경보

경보(Alarm)

  • 수집된 지표 값의 변동에 따라 발생하는 알림 생성
    • 일정 수치(threshold)로 도달하거나 이상/이하 일 때 이벤트 발생
  • 3가지 상태
    • OK: 정상 상태
    • Alarm: 경보 상태
    • INSUFFICIENT_DATA: 경보 상태를 확인하기 위한 정보가 부족함
  • 다양한 방법으로 대응 가능
    • SNS로 Lambda 실행, 이메일 전달 등
    • 예: 웹 서버의 500 에러가 일정 수치 이상일 때 슬랙 알림
  • 지표의 Resolution에 따라 경보의 평가 주기 변동
    • High Resolution이라면 60초 미만 주기로 평가 가능
    • 이외에는 모두 60초의 배수 단위로 평가

결합 경보(Composite Alarm)

  • 여러 경보를 결합한 경보
    • Boolean(참/거짓) 관계로 경보를 묶어서 경보 조건 설정
    • AND, OR, NOT
  • 많은 경보의 결과를 효율적으로 전달받기 위해 사용
  • 예:
    • CPU 사용량 AND 네트워크 사용량 경보 = 웹팀에 알림
    • NOT 웹서버 CPU 사용량 AND RDS CPU 사용량 경보 = DB팀에 알림
    • (500 에러 경보 OR 400 에러 경보) AND 네트워크 사용량 경보 = 유저 피크 알림 전달
  • Suppressor Alarm 설정 가능
    • 이 경보가 Alarm 상태일 경우 Composite 경보의 알림을 중지

실습 - CloudWatch 지표 수집/알람

Custom Metric 받기(EC2 Memory 모니터링)

  1. EC2에 웹 서버 설치
    a. EC2와 CloudWatch 접근 권한을 가진 역할 생성

    b. 위에서 만든 역할을 가진 EC2 인스턴스 생성

    c. EC2를 연결하여 웹 서버 설치 및 파일 생성
    sudo -s
    dnf install httpd -y
    service httpd start
    chkconfig httpd on
    sudo mkdir /var/log/www/
    sudo mkdir /var/log/www/error
    sudo mkdir /var/log/www/access
    curl -L -O http://public.rwlecture.com/awsclassroom_lecture/basic_monitoring/EnablePHPCloudwatchlog.json
    curl -L -O http://public.rwlecture.com/awsclassroom_lecture/basic_monitoring/httpd.conf
    cp httpd.conf /etc/httpd/conf (y입력)
    service httpd restart

  2. CloudWatch Agent 설치 및 설정: 로그 수집 / 커스텀 지표(메모리/디스크 수집) 용도
    sudo dnf install amazon-cloudwatch-agent -y
    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/home/ec2-user/EnablePHPCloudwatchlog.json
    sudo systemctl start amazon-cloudwatch-agent

  3. Custom Metric 확인

  4. 수집된 Access Log를 지표 필터로 지표화
    a. 지표 필터 생성

    b. 패턴 정의

    c. 지표 할당

    d. 지표 확인

  5. 수집된 지표 기반으로 알람 설정: 404 에러가 분당 N번 이상 발생 시
    a. 경보 생성

    b. 지표 선택

    c. 지표 및 조건 지정

    d. 경보를 받을 이메일 설정

    e. 경보 이름 설정 및 생성

    f. 경보를 받을 이메일 확인

Amazon CloudWatch 기타 기능

Amazon CloudWatch Dashboard

  • AWS의 다양한 메트릭(지표)/로그데이터 기반으로 대시보드 생성 가능
  • 외부 커스텀 그래프 등 대시보드 커스터마이징 가능
  • 외부 공유 가능

Amazon CloudWatch Synthetics

  • 일정 기반으로 구성 가능한 스크립트인 "Canary"를 수행해서 엔드포인트 및 API를 모니터링 할 수 있는 서비스
  • 주기적으로 실행되어 엔드포인트의 상태를 확인하고 에러 혹은 평소와 다른 내용이 있다면 기록
    • 시각 모니터링 가능: 스크린샷 기반으로 비교 분석
    • Http 응답 코드 기반으로 분석: HAR 파일 생성
  • 직접 지표를 생성하여 게시 -> 다른 지표들처럼 대시보드 구성 / 알람 설정 가능

* Canary: Puppeteer 또는 Selenium Webdriver를 통해 헤드리스 Google Chrome 브라우저로 여러 액션을 수행

인터넷/네트워크 모니터

  • 전 세계 인터넷 날씨 지도 제공
    • 전 세계의 인터넷 장애 발생 상황과 영향을 받은 고객 위치 확인 가능
  • 추가로 VPC, CloudFront, NLB 등 AWS 서비스와 관련된 내용을 별도로 모니터링 가능
  • 네트워크 모니터로 온프레미스와 AWS 간의 네트워크 모니터링 가능

CloudWatch Resource Health

  • Amazon EC2의 현재 상태 정보를 모아서 시각적으로 표현해주는 서비스
    • 별도의 설정 없이 모든 EC2의 메트릭, 태그 등을 종합하여 실시간으로 시각화
  • CPU 사용률 / 메모리 사용률 / 상태 기준으로 색상을 입혀 인스턴스를 표시
    • 예: CPU 0~10은 흰색, 10~50은 주황색, 50~100은 빨간색
  • 시각화 커스터마이징 가능
    • 묶음 표시 기능
      • Group By, Filter By 인스턴스 타입, 이미지 명, VPC ID 등
    • 인스턴스의 각 임계값 별 색상 커스터마이징 가능

실습 - Amazon CloudWatch 대시보드


※ 알아둘 점

  • CloudFormation을 활용하여 예제 프로비전 예정
    • CloudFormation: 코드로 인프라를 관리하는 Infrastructure as a Code(IaaC) 서비스
  • Lambda를 활용하여 커스텀 로직 처리
    • Lambda: AWS의 Serverless 컴퓨팅 서비스, 간단한 로직을 서버 없이 처리
  1. CloudFormation을 사용하여 CloudWatch Dashboard에 AutoScaling Group의 다양한 지표를 표시

    ※ Auto Scaling 그룹 지표 활성화

  2. Custom Dashboard 로직을 통해 직접 인스턴스를 시작/재부팅/종료시키거나 AutoScaling의 Capacity 변경

  3. 만든 대시보드를 공유

    ※ 공유 페이지에서 직접 커스텀 로직을 활용하기 위한 IAM 정책 편집

AWS CloudTrail

AWS CloudTrail은 AWS 계정의 거버넌스, 규정 준수, 운영 감사, 위험 감사를 지원하는 서비스입니다. CloudTrail을 사용하면 AWS 인프라에서 계정 활동과 관련된 작업을 기록하고 지속적으로 모니터링하며 보관할 수 있습니다. CloudTrail은 AWS Management Console, AWS SDK, 명령줄 도구 및 기타 AWS 서비스를 통해 수행된 작업을 비롯하여 AWS 계정 활동의 이벤트 기록을 제공합니다.

AWS CloudTrail

  • AWS의 보안 및 감사를 위한 서비스: 감시(CCTV)
  • AWS의 여러 서비스에 대한 활동 이벤트 로그 등을 제공
    • 이벤트 예시: EC2 종료, S3 버킷 생성, IAM 사용자 삭제 등
    • 이벤트의 시간 및 결과, 에러, 사용 인증 정보 등을 기록
    • AWS CLI, 콘솔 이용, API 호출 등 모든 이벤트가 대상
  • 기본적으로 90일의 이벤트 로그를 무료로 저장
    • 이 이상의 기록은 Trail 생성 필요
  • 실시간 기록이 아니며 지연시간 발생(약 5분)

AWS CloudTrail Trail

  • S3 기반의 이벤트 로그 수집 단위. 즉, S3 버킷 생성 후 지정 필요
  • 리전 기반. 단, 다중 리전 혹은 단일 리전 선택 가능
    • 다중 리전일 경우 모든 리전의 로그를 한 곳으로 모아 관리 가능
      • 신규 리전이 추가될 경우 자동으로 로깅 활성화
    • 글로벌 서비스의 경우 us-east-1에 Trail 생성 필요
  • 별도로 AWS의 다양한 서비스(EventBridge, CloudWatch)로 이벤트 전달 설정 가능
    • Metric Filter / 이벤트 트리거 가능
    • 5분 이상 지연시간 가능성 염두 필요

AWS CloudTrail Event

  • AWS 계정의 활동 내용
    • 몇 몇 Data API의 경우 수동으로 활성화 필요(S3, Lambda, DynamoDB 등)
    • JSON 형식으로 데이터 저장
      • Athena 등으로 분석 가능
  • Management Event: AWS 계정의 관리를 위한 이벤트
    • 예: IAM 역할 부여, VPC 생성/삭제, 서브넷 생성/삭제, Trail 생성, 로그인 이벤트 등
    • 기본 로깅 대상
  • Data Event: 리소스 동작과 관련된 데이터
    • 예: S3의 Object 동작(Get, Delete, Put), Lambda 함수 호출, SNS 호출 등
    • 별도로 로깅 활성화 필요 + 추가 비용 발생
  • Insight Event: CloudTrail에서 별도로 생성하는 정상적이지 않은 상황에 대한 감지 이벤트
    • 예: 평소와 다른 S3 버킷 100개 삭제, Deny된 EC2 인스턴스 프로비전 요청이 분 당 수십 개 발생
    • 별도로 로깅 활성화 필요 + 추가 비용 발생

실습 - CloudTrail

  1. CloudTrail Trail 생성
    a. Trail 생성 및 속성 선택


    b. Data Event 수집 활성화

  2. 모니터링 확인

    ※ Athena를 활용한 로그 분석

※ CloudTrail vs CloudWatch

CloudTrail

  • AWS를 감사(Audit) 하기 위한 서비스: 감시(CCTV)
  • AWS의 모든 서비스가 사용될 때마다 사용 로그를 저장
  • AWS가 언제 어디서 누구에 의해 사용되었는가?
  • 단순하게 AWS 사용 로그만 저장

CloudWatch

  • AWS를 모니터링 하기 위한 서비스: 퍼포먼스 체크
  • AWS의 서비스 뿐만 아니라 어플리케이션의 로그 및 동작 로그 취합
  • 어플리케이션이 어떻게 동작하였는가? 무슨 버그가 있었는가? 메모리는 얼마나 소모되었는가?
  • 대시보드 및 알람 등 모니터링을 위한 서비스 제공

참고

https://www.inflearn.com/course/%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-aws-%EA%B8%B0%EC%B4%88/dashboard

0개의 댓글