팀 프로젝트- 10회차

박형준·2024년 6월 24일

메모리 등 디테일한 정보 모니터링을 위해 CloudWatch 에이전트 사용. ( 알람 )

사전 준비

  • 모니터링 하고자 하는 인스턴스 준비

  • IAM 역할 확인 및 부여

    • IAM 역할 생성 및 정책 부여

      • IAM 콘솔로 이동: AWS Management Console에서 IAM 콘솔로 이동합니다.
      • 역할(Role) 생성: 역할 생성 버튼을 클릭하고, EC2를 위한 역할을 선택합니다.
      • 정책 부여: CloudWatchAgentServerPolicy를 검색하여 선택합니다.
      • 역할 할당: 생성된 역할을 EC2 인스턴스에 할당합니다.
    • 인스턴스에 IAM 역할 할당

      • EC2 콘솔로 이동: AWS Management Console에서 EC2 콘솔로 이동합니다.
      • 인스턴스 선택: CloudWatch 에이전트를 실행 중인 인스턴스를 선택합니다.
      • IAM 역할 할당: 인스턴스의 작업(Actions) 메뉴에서 IAM 역할 수정(Modify IAM Role)을 선택하고, 생성한 IAM 역할을 할당합니다.
  1. CloudWatch 에이전트 설치
  • Amazon Linux 2 또는 RHEL
    • sudo yum install amazon-cloudwatch-agent -y
  1. CloudWatch 에이전트 설정
  • CloudWatch 에이전트를 설정하려면 JSON 형식의 구성 파일을 작성해야 합니다. 아래는 메모리, 디스크, 네트워크 등의 메트릭을 수집하는 설정 파일( amazon-cloudwatch-agent.json )의 예입니다.
{
    "agent": {
        "metrics_collection_interval": 60,
        "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
    },
    "metrics": {
        "append_dimensions": {
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
            "InstanceId": "${aws:InstanceId}"
        },
        "metrics_collected": {
            "mem": {
                "measurement": [
                    "mem_used_percent"
                ],
                "metrics_collection_interval": 60
            },
            "disk": {
                "measurement": [
                    "disk_used_percent"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "swap": {
                "measurement": [
                    "swap_used_percent"
                ],
                "metrics_collection_interval": 60
            },
            "cpu": {
                "measurement": [
                    "cpu_usage_idle",
                    "cpu_usage_iowait",
                    "cpu_usage_user",
                    "cpu_usage_system"
                ],
                "metrics_collection_interval": 60
            },
            "net": {
                "measurement": [
                    "bytes_sent",
                    "bytes_recv"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "eth0"
                ]
            }
        }
    }
}
  1. 설정 파일 적용
  • 작성한 설정 파일을 /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json 경로에 저장한 후, CloudWatch 에이전트를 시작합니다.

    • sudo mv /path/to/your/amazon-cloudwatch-agent.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json

    • sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json -s

  1. CloudWatch 콘솔에서 메트릭 확인
  • AWS Management Console에서 CloudWatch 대시보드로 이동하여 인스턴스의 상세 메트릭을 확인할 수 있습니다.
  1. 알람 설정( 7회차, 9회차 참고 )
  • CloudWatch 콘솔에서 알람을 설정하여 특정 메트릭이 임계값을 초과할 경우 알림을 받을 수 있습니다.

    • CloudWatch 대시보드로 이동합니다.
      Alarms 메뉴에서 Create Alarm을 클릭합니다.
      Select metric에서 모니터링할 메트릭을 선택합니다.
      알람 조건을 설정합니다.
      ( 예를 들어, 메모리 사용률이 80%를 초과할 때 알람을 생성할 수 있습니다. )
      알림 방법(SNS 토픽 등)을 설정합니다.
      알람 이름과 설명을 입력하고 Create Alarm을 클릭합니다.

예시: 메모리 사용률 알람 설정

  • CloudWatch 콘솔 > Alarms > Create Alarm
    Select metric > CWAgent > InstanceId > mem_used_percent
    Threshold type: Static
    Whenever mem_used_percent is: Greater than
    Threshold value: 80
    Configure actions: 알람 발생 시 SNS 알림 설정
    Name and description: 알람 이름과 설명 입력
    Create Alarm

스토리: cpu 사용량이 50이 넘어갈 경우 인스턴스가 최대로 생성되고 50이 넘어가질 않을 경우 최소 값이 되는 것을 이용해서

  • 인스턴스가 생성되고 종료되는 것을 알람으로 지정하여 인스턴스가 비정상적으로 생성되고 종료되는 알람을 받게 될 시에
  • 그 인스턴스에 CloudWatch 에이전트를 사용하여 메모리, 디스크, 네트워크 등의 메트릭을 수집에 대한 알람을 받을 수 있으며 cloud watch를 이용하여 모니터링

경보 생성은 60초 기준으로 했기 때문에 1분으로 맞추기


ansible을 사용해서 CloudWatch 에이전트 설정 배포

  • 사전 작업

    • 이미 구성해둔 역할(CloudWatchAgentEC2)을 인스턴스에 지정
  • inventory.ini 구성 ( 8회차 참고, ( nginx, tomcat, db 전부 포함 ) )

    • [All]
      VEC-PRD-VPC-NGINX-PUB-2A ansible_host=10.250.1.91 ansible_user=ec2-user ansible_ssh_private_key_file=~/.ssh/soldesk.pem.pem
    • 플레이 북 작성 ( 메모리, 디스크, 네트워크 등의 메트릭을 수집에 대한 metric 생성 )
---
- name: Deploy CloudWatch Agent to EC2 instance
  hosts: All
  become: yes
  vars:
    local_config_path: "/home/ec2-user/cloud-agent/amazon-cloudwatch-agent.json"
    remote_config_path: "/home/ec2-user/amazon-cloudwatch-agent.json"
    final_config_path: "/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json"

  tasks:
    - name: Install Amazon CloudWatch Agent
      yum:
        name: amazon-cloudwatch-agent
        state: present

    - name: Copy CloudWatch Agent configuration file
      copy:
        src: "{{ local_config_path }}"
        dest: "{{ remote_config_path }}"
        owner: ec2-user
        group: ec2-user
        mode: '0644'

    - name: Move configuration file to final destination
      command: mv {{ remote_config_path }} {{ final_config_path }}

    - name: Apply CloudWatch Agent configuration
      command: >
        /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl
        -a fetch-config
        -m ec2
        -c file:{{ final_config_path }}
        -s

nat gateway를 생성할 때 연결 유형을 public으로 설정했기 때문에

  • VEC-PRD-VPC-BASTION-PUB-2A로 생성한 인스턴스로 ssh를 통해 VEC-PRD-VPC-DB-PRI-2A의 인스턴스로 접속해서 aws CLI 계정인증을 통해 dynamodb 테이블에 item 추가하고 확인이 가능하다
  • private link 구성

0개의 댓글