[AWS] 리눅스 서버 CloudWatchAgent 설치하기

AWS에서 CloudWatch를 통해 서버의 메모리 및 디스크 사용량 등을 확인하기 위해서는 EC2 서버에 CloudWatchAgent를 설치해야 됩니다. 리눅스 서버의 서버의 메모리 및 디스크 사용량 등을 확인하기 위해 CloudWatchAgent를 설치하고, AWS를 설정하는 방법을 알아봅시다.

 

 


IAM Role 적용

EC2에서 CloudWatchAgent를 통해 EC2 인스턴스의 정보를 보낼 수 있도록 IAM 역할을 인스턴스에 연결해야 합니다.
허용이 필요한 정책은 CloudWatchAgentServerPolicy 이며, IAM 역할 추가를 통해 생성합니다.

 

 

IAM -> Roles 메뉴에서 신규로 Role을 생성합니다.

 

 

서비스는 EC2를 선택합니다.

 

 

정책은 CloudWatchAgentServerPolicy를 검색 후 해당 정책을 선택합니다.

 

 

IAM Role 이름을 설정 후 생성합니다.

 

 

생성된 IAM Role을 확인하실 수 있습니다.

 

 

이제 EC2 -> Instances 메뉴에서 역할을 적용할 EC2를 우클릭 후 Security -> Modify IAM role을 클릭합니다.

 

 

생성한 IAM role을 선택 후 업데이트하면 IAM Role 적용이 완료됩니다.

 

 


CloudWatchAgent 설치 및 설정 파일 적용

CloudWatchAgent를 설치할 리눅스 서버에 접속 후 설치 파일을 통해 패키지를 설치하고, 설정 파일을 적용해보겠습니다.
테스트한 EC2 서버의 OS는 Rocky Linux 9.2를 사용하였습니다.

 

 

설치 파일을 다운로드 하기 위해 wget 명령어를 사용합니다.
wget 명령어가 없을 경우 yum 명령어로 설치합니다.

  • 실행 명령어
yum install -y wget
  • 결과
*** 생략 ***
Running transaction
  Preparing        :                                                                1/1
  Installing       : wget-1.21.1-7.el9.x86_64                                       1/1
  Running scriptlet: wget-1.21.1-7.el9.x86_64                                       1/1
  Verifying        : wget-1.21.1-7.el9.x86_64                                       1/1

Installed:
  wget-1.21.1-7.el9.x86_64

Complete!

 

 

wget 명령어로 설치 파일을 다운로드 합니다.

  • 실행 명령어
wget -P /tmp/ https://amazoncloudwatch-agent.s3.amazonaws.com/centos/amd64/latest/amazon-cloudwatch-agent.rpm
  • 결과
--2023-12-07 07:06:04--  https://amazoncloudwatch-agent.s3.amazonaws.com/centos/amd64/latest/amazon-cloudwatch-agent.rpm
Resolving amazoncloudwatch-agent.s3.amazonaws.com (amazoncloudwatch-agent.s3.amazonaws.com)... 52.217.175.113, 52.216.52.153, 52.217.225.49, ...
Connecting to amazoncloudwatch-agent.s3.amazonaws.com (amazoncloudwatch-agent.s3.amazonaws.com)|52.217.175.113|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 100700416 (96M) [application/octet-stream]
Saving to: ‘/tmp/amazon-cloudwatch-agent.rpm’

amazon-cloudwatch-age 100%[=========================>]  96.04M  7.69MB/s    in 14s

2023-12-07 07:06:19 (6.89 MB/s) - ‘/tmp/amazon-cloudwatch-agent.rpm’ saved [100700416/100700416]

 

 

rpm 명령어로 설치 패키지를 설치합니다.

  • 실행 명령어
rpm -U /tmp/amazon-cloudwatch-agent.rpm
  • 결과
create group cwagent, result: 0
create user cwagent, result: 0

 

 

아래 내용으로 config.json 파일을 /tmp/ 경로에 생성합니다.

  • 실행 명령어 및 결과
cat << EOF > /tmp/config.json
{
    "agent":{
        "metrics_collection_interval":60,
        "debug":false
    },
    "metrics": {
        "namespace": "CloudWatch/TestMetrics",
        "metrics_collected":{
            "disk":{
                "measurement":[{"name" : "disk_used_percent", "rename" : "DISK_USED" } ],
                "metrics_collection_interval":30,
                "resources":["/"]
            },
            "mem":{
                "measurement":[ {"name" : "mem_used_percent", "rename" : "MEMORY_USED"} ],
                "metrics_collection_interval":10
            }
        },
        "append_dimensions":{
            "InstanceId":"\${aws:InstanceId}"
        }
    }
}
EOF

 

 

아래 명령어를 통해 추가한 config.json 파일 내용으로 AmazonCloudWatchAgent를 실행합니다.

  • 실행 명령어
amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/tmp/config.json
  • 결과
****** processing amazon-cloudwatch-agent ******
I! Trying to detect region from ec2 D! [EC2] Found active network interface I! imds retry client will retry 1 timesSuccessfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp
Start configuration validation...
2023/12/07 07:27:51 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp ...
2023/12/07 07:27:51 I! Valid Json input schema.
2023/12/07 07:27:51 D! ec2tagger processor required because append_dimensions is set
2023/12/07 07:27:51 D! metric decorator required because measurement fields are set
2023/12/07 07:27:51 D! pipeline hostDeltaMetrics has no receivers
2023/12/07 07:27:51 Configuration validation first phase succeeded
I! Detecting run_as_user...
I! Trying to detect region from ec2
D! [EC2] Found active network interface
I! imds retry client will retry 1 times
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
Configuration validation second phase succeeded
Configuration validation succeeded

 

 

아래 명령어를 통해 정상적으로 AmazonCloudWatchAgent가 실행되었는지 확인합니다.

  • 실행 명령어
amazon-cloudwatch-agent-ctl -m ec2 -a status
  • 결과
{
  "status": "running",
  "starttime": "2023-12-07T07:27:51+00:00",
  "configstatus": "configured",
  "version": "1.300031.0b313"
}

 

  • 실행 명령어
systemctl status amazon-cloudwatch-agent
  • 결과
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
     Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; preset: disabled)
     Active: active (running) since Thu 2023-12-07 07:26:19 UTC; 23s ago
   Main PID: 11484 (amazon-cloudwat)
      Tasks: 7 (limit: 22602)
     Memory: 19.7M
        CPU: 170ms
     CGroup: /system.slice/amazon-cloudwatch-agent.service
             └─11484 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/amazon>

Dec 07 07:26:19 TEST start-amazon-cloudwatch-agent[11489]: 2023/12/07 07:26:19 Reading json config file path: /opt/aws/amazon-cloudwa>
Dec 07 07:26:19 TEST start-amazon-cloudwatch-agent[11489]: 2023/12/07 07:26:19 I! Valid Json input schema.
Dec 07 07:26:19 TEST start-amazon-cloudwatch-agent[11489]: I! Detecting run_as_user...
Dec 07 07:26:19 TEST start-amazon-cloudwatch-agent[11489]: I! Trying to detect region from ec2
Dec 07 07:26:19 TEST start-amazon-cloudwatch-agent[11489]: 2023/12/07 07:26:19 D! ec2tagger processor required because append_dimensi>
Dec 07 07:26:19 TEST start-amazon-cloudwatch-agent[11489]: 2023/12/07 07:26:19 D! metric decorator required because measurement field>
Dec 07 07:26:19 TEST start-amazon-cloudwatch-agent[11489]: 2023/12/07 07:26:19 D! pipeline hostDeltaMetrics has no receivers
Dec 07 07:26:19 TEST start-amazon-cloudwatch-agent[11489]: 2023/12/07 07:26:19 Configuration validation first phase succeeded
Dec 07 07:26:19 TEST start-amazon-cloudwatch-agent[11484]: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json does not>
Dec 07 07:26:19 TEST start-amazon-cloudwatch-agent[11484]: I! Detecting run_as_user...

 

 


인스턴스 메트릭 정보 확인

이제 CloudWatch에서 정상적으로 인스턴스의 메트릭 정보가 저장되고 있는지 확인합니다.

 

CloudWatch -> Metrics -> All metrics 메뉴를 통해 "CloudWatch/TestMetrics" 이름의 네임스페이스가 생성되었는지 확인합니다.

 

 

config.json 파일에서 정의한 DISK_USED, MEMORY_USED 정보를 검색하여 메트릭 정보를 확인하실 수 있습니다.

  • DISK_USED

  • MEMORY_USED

 

 

 

이제 AWS 리눅스 EC2 서버의 메모리 및 디스크 사용량 등의 인스턴스 정보를 CloudWatch를 통해서 확인하시길 바랍니다. 지금까지 CloudWatchAgent를 설치하고, AWS를 설정하는 작업을 알아보는 시간이었습니다....! 끝...!

 

 

 

[Reference]

 

 

[AWS] 윈도우 서버 CloudWatchAgent 설치하기

AWS에서 CloudWatch를 통해 서버의 메모리 및 디스크 사용량 등을 확인하기 위해서는 EC2 서버에 CloudWatchAgent를 설치해야 됩니다. 윈도우 서버의 메모리 및 디스크 사용량 등을 확인하기 위해 CloudWatchAgent를 설치하고, AWS를 설정하는 방법을 알아봅시다.

 

 


IAM Role 적용

EC2에서 CloudWatchAgent를 통해 EC2 인스턴스의 정보를 보낼 수 있도록 IAM 역할을 인스턴스에 연결해야 합니다.
허용이 필요한 정책은 CloudWatchAgentServerPolicy 이며, IAM 역할 추가를 통해 생성합니다.

 

 

IAM -> Roles 메뉴에서 신규로 Role을 생성합니다.

 

 

서비스는 EC2를 선택합니다.

 

 

정책은 CloudWatchAgentServerPolicy를 검색 후 해당 정책을 선택합니다.

 

 

IAM Role 이름을 설정 후 생성합니다.

 

 

생성된 IAM Role을 확인하실 수 있습니다.

 

 

이제 EC2 -> Instances 메뉴에서 역할을 적용할 EC2를 우클릭 후 Security -> Modify IAM role을 클릭합니다.

 

 

생성한 IAM role을 선택 후 업데이트하면 IAM Role 적용이 완료됩니다.

 

 


CloudWatchAgent 설치 및 설정 파일 적용

CloudWatchAgent를 설치할 윈도우 서버에 접속 후 설치 파일을 통해 패키지를 설치하고, 설정 파일을 적용해보겠습니다.
테스트한 EC2 서버의 OS는 Windows Server 2022를 사용하였습니다.

 

설치 파일을 다운로드 합니다.

https://amazoncloudwatch-agent.s3.amazonaws.com/windows/amd64/latest/amazon-cloudwatch-agent.msi

 

 

설치 파일을 실행하여 패키지를 설치합니다.

 

 

CloudWatchAgent 실행 시 사용할 메트릭 정보를 정의하기 위해 아래 내용으로 config.json 파일을 생성 후 윈도우 서버 "C:\Program Files\Amazon\AmazonCloudWatchAgent" 경로에 추가합니다.

설정한 namespace 값으로 CloudWatch의 Metrics 정보를 구분하여 확인하실 수 있습니다.

{
    "agent":{
        "metrics_collection_interval":60
    },

    "metrics": {
        "namespace": "CloudWatch/TestMetrics",
        "metrics_collected": {
            "statsd": {},
            "Processor": {
                "measurement": [
                    {"name": "% Idle Time", "rename": "CPU_IDLE", "unit": "Percent"}
                ],
                "resources": [ 
                    "*"
                ]
            },
            "LogicalDisk": {
                "measurement": [
                    {"name":"% Free Space", "rename" : "DISK_FREE"}
                ],
                "resources": [
                    "*"
                ]
            },
            "Memory": {
                "metrics_collection_interval": 10,
                "measurement": [
                    {"name":"% Committed Bytes In Use", "rename" : "MEMORY_USED", "unit":"Percent"}]
            }
        },
        "append_dimensions":{
            "InstanceId":"${aws:InstanceId}"
        }
    }
}

 

 

아래 명령어를 통해 추가한 config.json 파일 내용으로 AmazonCloudWatchAgent를 실행합니다.

& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m ec2 -s -c file:"C:\Program Files\Amazon\AmazonCloudWatchAgent\config.json"

****** processing amazon-cloudwatch-agent ******
I! Trying to detect region from ec2
D! [EC2] Found active network interface
I! imds retry client will retry 1 timesSuccessfully fetched the config and saved in C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\file_config.json.tmp
Start configuration validation...
2023/12/06 09:21:38 Reading json config file path: C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\file_config.json.tmp ...
2023/12/06 09:21:38 I! Valid Json input schema.
I! Trying to detect region from ec2
D! [EC2] Found active network interface
I! imds retry client will retry 1 times2023/12/06 09:21:38 D! ec2tagger processor required because append_dimensions is set
2023/12/06 09:21:38 D! metric decorator required because measurement fields are set
2023/12/06 09:21:38 D! pipeline hostDeltaMetrics has no receivers
2023/12/06 09:21:38 Configuration validation first phase succeeded
Configuration validation second phase succeeded
Configuration validation succeeded
AmazonCloudWatchAgent has been stopped
AmazonCloudWatchAgent has been started

 

 

아래 명령어를 통해 정상적으로 AmazonCloudWatchAgent가 실행되었는지 확인합니다.

& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -m ec2 status

{
  "status": "running",
  "starttime": "2023-12-06T09:21:40",
  "configstatus": "configured",
  "version": "1.300031.0b313"
}

 

 


인스턴스 메트릭 정보 확인

이제 CloudWatch에서 정상적으로 인스턴스의 메트릭 정보가 저장되고 있는지 확인합니다.

 

CloudWatch -> Metrics -> All metrics 메뉴를 통해 "CloudWatch/TestMetrics" 이름의 네임스페이스가 생성되었는지 확인합니다.

 

 

config.json 파일에서 정의한 CPU_IDLE, DISK_FREE, MEMORY_USED 정보를 검색하여 메트릭 정보를 확인하실 수 있습니다.

  • CPU_IDLE

  • DISK_FREE

  • MEMORY_USED

 

 

 

이제 AWS 윈도우 EC2 서버의 메모리 및 디스크 사용량 등의 인스턴스 정보를 CloudWatch를 통해서 확인하시길 바랍니다. 지금까지 CloudWatchAgent를 설치하고, AWS를 설정하는 작업을 알아보는 시간이었습니다....! 끝...!

 

 

 

[Reference]

 

 

+ Recent posts