본문 바로가기

AWS :D

[AWS EC2-Linux] monitoring Linux metric and logs with Amazon CloudWatch

 


[진행목차]

1. 임시 인스턴스 생성

2. IAM Role 설정

3. 인스턴스에 Tag 달기

4. Agent 다운로드 및 설치 

5. CloudWatch Agnet 설정파일 생성 및 파라메터 스토어 등록

6. Agent 시작 


 

 

1. 임시 인스턴스 생성


이번 단계에서는 임시 인스턴스를 생성합니다.
이 인스턴스는 system manager - Parameter Store에 AmazonCloudWatchAgent 설정 파일을 저장하기위한 용도로 사용합니다.
이 작업을 진행하는 동안 잠시 사용 후 , 작업이 완료되면 삭제(종료,terminate)합니다.

 

EC2 콘솔에 접속하여 "인스턴스 시작"을 클릭하여 새로운 인스턴스를 생성합니다.

 

 

검색창에 "Linux"를 검색하고, 맨 위에있는 "Amazon Linux 2 AMI"를 선택합니다.

참고로 이 버전이 아니더라도 SystemManager가 기본적으로 설치되어있는 버전은 모두 사용이 가능합니다.

 

인스턴스 유형은 기본으로 선택하고 "검토 및 시작"을 클릭합니다.

 

"시작하기"를 클릭합니다.

 

인스턴스를 접속하는데 필요한 키페어를 선택하는 팝업창에 사용 가능한 키 페어를 선택하고 "인스턴스 시작"을 클릭합니다.

 

인스턴스 시작을 확인합니다.

 

페이지를 닫은 후, 인스턴스 이름을 "Temp_Linux"로 변경합니다.

 

 

임시로 사용할 인스턴스의 생성을 완료하였습니다.

 

 

 

 

 


2. EC2 IAM 설정


이번 단계에서는 SystemManager 서비스를 사용할 수 있도록 IAM 역할(Role)을 생성하고 EC2에 적용합니다.
총 2개의 역할을 생성합니다.

1. SSMforCloudWatch : 모니터링할 모든 인스턴스에 적용할 역할입니다.
2. tempRoleforParameter : 파라메터스토어에 CloudWatch Configure를 등록하기 위해 잠시 사용할 역할입니다.

 

2-1)  첫번째 역할 : SSMforCloudWatch

이 역할은 CloudAgent가 설치될 모든 인스턴스에 적용해야 하는 역할입니다.
이미 인스턴스에 역할이 할당되어있다면, 기존 정책에 아래에 필요한 정책을 추가하여 사용하세요.

 

AWS 콘솔에 로그인 후 IAM 을 검색하여 선택합니다.

 

 

왼쪽 네비게이션 바 에서 "역할" 클릭 후, "역할 만들기"를 선택합니다.

 

 

"EC2"를 선택하고 "다음:권한"을 클릭합니다.

 

 

2개의 권한을 추가해야 합니다.

먼저 검색창에 "SSM"을 검색하여 "AmazonECRoleForSSM"을 선택합니다.

 

두번째로 검색창에 "cloudwatchagent"를 검색하고 "CloudWatchAgentServerPolicy"를 선택합니다.

이후, "다음:태그"을 클릭합니다.

 

 

태그 추가단계입니다.

내부 규칙에 따라 태그를 추가하거나, 옵션사항이므로 빈값으로 두고 "다음:검토"를 클릭합니다.

 

 

 

 

역할 이름 "SSMforCloudWatch" 작성 후,

아래 정책에 2개의 정책이 모두 올바르게 설정 되어있는지 확인합니다.

- AmazonEC2RoleforSSM

- CloudWatchAgentServerPolicy

"역할만들기"를 클릭합니다.

 

 

이렇게 생성된 역할을 EC2인스턴스에 할당합니다.

콘솔 상단 "서비스"를 클릭하고, "EC2"를 검색하여 EC2 콘솔에 접속합니다.

 

 

 

왼쪽 네비게이션 바에서 "인스턴스"를 클릭합니다.

이후 모니터링할 서버를 선택하고 상단 "작업" -> "인스턴스 설정" -> "IAM 역할 연결/바꾸기"를 클릭합니다.

 

IAM 콘솔에서 생성한 IAM역할(SSMforCloudWatch)을 선택하고 "적용"을 클릭합니다.

 

모니터링을 위한 IAM 역할 생성 및 할당이 완료되었습니다.

 

 

 

2-2)  두번째 역할 : tempRoleforParameter

 

왼쪽 네비게이션 바 에서 "역할" 클릭 후, "역할 만들기"를 선택합니다.

 

 

"EC2"를 선택하고 "다음:권한"을 클릭합니다.

 

 

2개의 권한을 추가해야 합니다.

먼저 검색창에 "SSM"을 검색하여 "AmazonECRoleForSSM"을 선택합니다.

 

두번째로 검색창에 "cloudwatchagent"를 검색하고 "CloudWatchAgentAdminPolicy"를 선택합니다.

이후, "다음:태그"을 클릭합니다.

 

태그 추가단계입니다.

내부 규칙에 따라 태그를 추가하거나, 옵션사항이므로 빈값으로 두고 "다음:검토"를 클릭합니다.

 

 

 

 

역할 이름 "tempRoleforParameter" 작성 후,

아래 정책에 2개의 정책이 모두 올바르게 설정 되어있는지 확인합니다.

- AmazonEC2RoleforSSM

- CloudWatchAgentAdminPolicy

"역할만들기"를 클릭합니다.

 

 

이렇게 생성된 역할을 EC2인스턴스에 할당합니다.

콘솔 상단 "서비스"를 클릭하고, "EC2"를 검색하여 EC2 콘솔에 접속합니다.

 

 

 

왼쪽 네비게이션 바에서 "인스턴스"를 클릭합니다.

이후 앞서 생성한 임시 인스턴스(Temp_linux)를 선택하고 상단 "작업" -> "인스턴스 설정" -> "IAM 역할 연결/바꾸기"를 클릭합니다.

 

IAM 콘솔에서 생성한 IAM역할(tempRoleforParameter)을 선택하고 "적용"을 클릭합니다.

 

모니터링을 위한 IAM 역할 생성 및 할당이 완료되었습니다.

 

 

 

 

 

 

 


3.  인스턴스에 Tag 달기


이번 단계에서는 여러대의 인스턴스에 한번에 설치가 가능하도록 Tag를 추가합니다.
AWS CloudWatch를 통해 모니터링 할 인스턴스에 Tag를 설정합니다


 

 

모니터링할 인스턴스를 클릭하고 하위 탭에서 "태그" -> "태그 추가/편집"을 클릭합니다

 

태그 추가/편집 팝업창에 알아보기 쉽도록 태그를 추가합니다.

본 실습에서는 아래와 같이 설정했으며, 본인이 알아보기 쉽도록 설정하거나 똑같이 설정합니다.

- Key : EnableMonitoring 

- Value : True/False
추가적으로 필요한 태그를 설정하거나 OS 구분 및 버전을 추가할 수 있습니다.

완료 후 "저장"을 클릭합니다.

 

임시로 생성한 인스턴스(Temp_Linux)도 위와 같이 태그를 추가합니다.

 

- Key : EnableMonitoring 

- Value : True/False

완료 후 "저장"을 클릭합니다.

 

모니터링이 필요한 모든 인스턴스와 Temp_Linux 인스턴스의 태그 설정이 올바르게 되었는지 확인합니다.

 

태그 설정이 모두 완료되었습니다.

 

 

 

 


4. Agent 다운로드 및 설치 

 


이번 단계에서는 System Manager를 이용하여 한번에 AWSPackage를 설치합니다.


 

 

콘솔 왼쪽 상단 "서비스"를 선택하고 "System Manager"를 검색 및 클릭하여 SystemManager 콘솔에 접속합니다.

 

 

왼쪽 네비게이션 바에서 "Run Command"를 선택하고 "명령실행"을 클릭합니다.

 

 

아래의 사진 예시와 같이 모든 정보를 입력 후 "실행"을 클릭합니다.

 

- 명령문서

    > AWS-ConfigureAWSPackage

- 명령파라메터 
    > Name: AmazonCloudWatchAgent

    > Version: latest

- 인스턴스 태그 지정

    > EnableMonitoring : True    [Add] 

    > OS : Linux [Add]  (이 부분은 윈도우 인스턴스와 구분해주기위해 넣은 태그입니다. 다른 OS인 인스턴스가 있다면 구분해주세요)

 

명령에 해당되는 인스턴스의 개수, 완료개수 및 오류(성공/실패) 확인이 가능합니다.

 

이 명령으로 CloudWatchAgent의 설치가 완료되었습니다.

CloudWatchAgent 가 정상적으로 설치 되었음을 확인할 수 있습니다.

# systemctl status amazon-cloudwatch-agent.service

 

 

 

 

 

 

 


5. CloudWatch Agnet 설정파일 생성 및 파라메터 스토어 등록


이 단계에서는 CloudWatchAgent에서 설정할 파라메터들을 생성하고, SystemManager의 파라메터 스토어에 등록합니다.
SystemManager 파라메터 스토어에 설정을 저장해놓으면, 서버마다 설정파일을 새로 만들 필요 없이 한번에 설치가 가능합니다.

 

콘솔 상단 "서비스"를 클릭하고, "EC2"를 검색하여 EC2 콘솔에 접속합니다.

 

 

왼쪽 네비게이션 바에서 "인스턴스" -> "Temp_Linux"  선택 후 퍼블릭 아이피를 확인합니다.

 

 

이 인스턴스로 접속하여 설정예정이며, 별도로 접속하는 방법에 대해서는 기술하지 않습니다.

 

* 반드시 CloudWatchAgentAdminPolicy 권한을 할당한 "Temp_Linux" 인스턴스로 접속합니다.

 

"amazon-cloudwatch-agent-config-wizard"를 실행합니다.

# sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

 

Amazon Cloud Watch Agent에서는 윈도우 로그와 시스템 상태에 대한 메트릭을 모두 받아볼 수 있습니다.

그 설정값을을 자동으로 생성 가능하도록 마법사를 실행하여 원하는 설정을 선택합니다.

 

[주의사항 1] 이 질문이 나오면, 반드시 1.yes 를 선택합니다.

==================================================================

Do you want to store the config in the SSM parameter store?

1. yes

2. no

default choice: [1]:

==================================================================

 

[주의사항 2] 이 질문이 나오면, 반드시 standard 혹은 advenced를 선택합니다.
Basic은 disk사용량 모니터링이 포함되어있지 않습니다.

==================================================================

Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:

==================================================================

 

* Cloudwatch agent configuration file 참고 URL:  https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html

* Cloudwatch agent가 수집하는 지표 : https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html

 

아래 더보기를 클릭하여 설정값들을 참고하실 수 있습니다.

 

↓ 더보기 클릭 

더보기

 =============================================================

= Welcome to the AWS CloudWatch Agent Configuration Manager =

=============================================================

On which OS are you planning to use the agent?

1. linux

2. windows

default choice: [1]:

 

Trying to fetch the default region based on ec2 metadata...

Are you using EC2 or On-Premises hosts?

1. EC2

2. On-Premises

default choice: [1]:

 

Which user are you planning to run the agent?

1. root

2. cwagent

3. others

default choice: [1]:

 

Do you want to turn on StatsD daemon?

1. yes

2. no

default choice: [1]:

2

Do you want to monitor metrics from CollectD?

1. yes

2. no

default choice: [1]:

 

Do you want to monitor any host metrics? e.g. CPU, memory, etc.

1. yes

2. no

default choice: [1]:

 

Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.

1. yes

2. no

default choice: [1]:

 

Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?

1. yes

2. no

default choice: [1]:

 

Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.

1. 1s

2. 10s

3. 30s

4. 60s

default choice: [4]:

 

Which default metrics config do you want?

1. Basic

2. Standard

3. Advanced

4. None

default choice: [1]:

3

Current config as follows:

{

"agent": {

"metrics_collection_interval": 60,

"run_as_user": "root"

},

"metrics": {

"append_dimensions": {

"AutoScalingGroupName": "${aws:AutoScalingGroupName}",

"ImageId": "${aws:ImageId}",

"InstanceId": "${aws:InstanceId}",

"InstanceType": "${aws:InstanceType}"

},

"metrics_collected": {

"collectd": {

"metrics_aggregation_interval": 60

},

"cpu": {

"measurement": [

"cpu_usage_idle",

"cpu_usage_iowait",

"cpu_usage_user",

"cpu_usage_system"

],

"metrics_collection_interval": 60,

"resources": [

"*"

],

"totalcpu": false

},

"disk": {

"measurement": [

"used_percent",

"inodes_free"

],

"metrics_collection_interval": 60,

"resources": [

"*"

]

},

"diskio": {

"measurement": [

"io_time",

"write_bytes",

"read_bytes",

"writes",

"reads"

],

"metrics_collection_interval": 60,

"resources": [

"*"

]

},

"mem": {

"measurement": [

"mem_used_percent"

],

"metrics_collection_interval": 60

},

"netstat": {

"measurement": [

"tcp_established",

"tcp_time_wait"

],

"metrics_collection_interval": 60

},

"swap": {

"measurement": [

"swap_used_percent"

],

"metrics_collection_interval": 60

}

}

}

}

Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.

1. yes

2. no

default choice: [1]:

 

Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration?

1. yes

2. no

default choice: [2]:

 

Do you want to monitor any log files?

1. yes

2. no

default choice: [1]:

 

Log file path:

/var/log/httpd/

Log group name:

default choice: [httpd]

 

Log stream name:

default choice: [{instance_id}]

 

Do you want to specify any additional log files to monitor?

1. yes

2. no

default choice: [1]:

2

Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.

Current config as follows:

{

"agent": {

"metrics_collection_interval": 60,

"run_as_user": "root"

},

"logs": {

"logs_collected": {

"files": {

"collect_list": [

{

"file_path": "/var/log/httpd/",

"log_group_name": "httpd",

"log_stream_name": "{instance_id}"

}

]

}

}

},

"metrics": {

"append_dimensions": {

"AutoScalingGroupName": "${aws:AutoScalingGroupName}",

"ImageId": "${aws:ImageId}",

"InstanceId": "${aws:InstanceId}",

"InstanceType": "${aws:InstanceType}"

},

"metrics_collected": {

"collectd": {

"metrics_aggregation_interval": 60

},

"cpu": {

"measurement": [

"cpu_usage_idle",

"cpu_usage_iowait",

"cpu_usage_user",

"cpu_usage_system"

],

"metrics_collection_interval": 60,

"resources": [

"*"

],

"totalcpu": false

},

"disk": {

"measurement": [

"used_percent",

"inodes_free"

],

"metrics_collection_interval": 60,

"resources": [

"*"

]

},

"diskio": {

"measurement": [

"io_time",

"write_bytes",

"read_bytes",

"writes",

"reads"

],

"metrics_collection_interval": 60,

"resources": [

"*"

]

},

"mem": {

"measurement": [

"mem_used_percent"

],

"metrics_collection_interval": 60

},

"netstat": {

"measurement": [

"tcp_established",

"tcp_time_wait"

],

"metrics_collection_interval": 60

},

"swap": {

"measurement": [

"swap_used_percent"

],

"metrics_collection_interval": 60

}

}

}

}

Please check the above content of the config.

The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json.

Edit it manually if needed.

Do you want to store the config in the SSM parameter store?

1. yes

2. no

default choice: [1]:

 

What parameter store name do you want to use to store your config? (Use 'AmazonCloudWatch-' prefix if you use our managed AWS policy)

default choice: [AmazonCloudWatch-linux]

 

Trying to fetch the default region based on ec2 metadata...

Which region do you want to store the config in the parameter store?

default choice: [ap-northeast-2]

 

Which AWS credential should be used to send json config to parameter store?

1. ASIA4VWMBWWCJMANGHOG(From SDK)

2. Other

default choice: [1]:

 

Successfully put config to parameter store AmazonCloudWatch-linux.

Program exits now.

 

 

모든 설정이 완료되면 "config.json"파일에 내가 설정한 모든 값들이 json형식으로 작성되어 있습니다.

* 경로:/opt/aws/amazon-cloudwatch-agent/bin/config.json

 

정상적으로 systemManager -> parameterStore에 저장되어있는지 확인해야합니다.

 

AWS콘솔 왼쪽 상단 "서비스"를 클릭하고 "System Manager"를 선택하여 콘솔로 접속합니다.

 

 

왼쪽 네비게이션 바에서 "Parameter Store" 클릭 후 Temp_Linux 인스턴스에서 생성한 설정파일이 보이는지 확인합니다.

 

위와같이 "AmazonCloudWatch-linux" 파라메터가 등록되었다면, 정상적으로 이 단계를 완료한 것입니다.

 

 

 

 

 

 


6. Agent 시작

SystemManager 콘솔에서 왼쪽 네비게이션바의 "Run Command" -> "명령실행"을 클릭합니다.

 

 

먼저, 기본적으로 CloudWatch Agent가 시작되어있지 않으므로, Agent를 모두 실행하도록 Start 명령을 실행합니다.

 

- 명령문서

    > AmazonCloudWatch-ManageAgent

- 명령파라메터 
    > Action  =Start

- 인스턴스 태그 지정

    > EnableMonitoring : True    [Add] 

    > OS : Linux [Add]  (이 부분은 윈도우 인스턴스와 구분해주기위해 넣은 태그입니다. 다른 OS인 인스턴스가 있다면 구분해주세요)

 

 

Amazon CloudWatch Agnet Start명령이 정상적으로 성공하였음을 확인합니다.

Linux 인스턴스에서 실제 Amazon Cloudwatch Agent의 시작여부를 확인할수 있습니다.

 

CloudWatch Agent가 제대로 동작할 수 있도록 추가적인 설치를 진행해야합니다. 

이번에는 AWS-RunShellScript를 이용하여 커멘드를 실행합니다.

SystemManager 콘솔에서 왼쪽 네비게이션바의 "Run Command" -> "명령실행"을 클릭합니다.

 

아래의 사진 예시와 같이 모든 정보를 입력 후 "실행"을 클릭합니다.

 

- 명령문서

    > AWS-RunShellScript

- 명령파라메터 (commands)
    > sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 

    > sudo yum install -y collectd

- 인스턴스 태그 지정

    > EnableMonitoring : True    [Add] 

    > OS : Linux [Add]  (이 부분은 윈도우 인스턴스와 구분해주기위해 넣은 태그입니다. 다른 OS인 인스턴스가 있다면 구분해주세요)

 

 

이제, 파라메터 스토어에 등록했던 설정파일을 가지고 CloudWatchAgent를 실행해야합니다.

다시한번 SystemManager 콘솔에서 왼쪽 네비게이션바의 "Run Command" -> "명령실행"을 클릭합니다.

 

 

아래의 사진 예시와 같이 모든 정보를 입력 후 "실행"을 클릭합니다.

 

- 명령문서

    > AmazonCloudWatch-ManageAgent

- 명령파라메터
    > Optional Configuration Location : AmazonCloudWatch-linux   (파라메터 스토어에 등록된 이름)

- 인스턴스 태그 지정

    > EnableMonitoring : True    [Add] 

    > OS : Linux [Add]  (이 부분은 윈도우 인스턴스와 구분해주기위해 넣은 태그입니다. 다른 OS인 인스턴스가 있다면 구분해주세요)

 

 

명령에 해당되는 인스턴스의 개수, 완료개수 및 오류(성공/실패) 확인이 가능합니다.

 

이제, 약 10~15분 후 Amazon CloudWatch에서 해당 인스턴스의 로그와 Metric을 확인할 수 있습니다.

 

 

 

 

모든 절차를 완료하였습니다.

 

임시로 생성한 인스턴스 (temp_windows) 를 반드시 삭제하세요!

 

고생하셨습니다.