CloudWatch 이용한 EC2 모니터링
AWS에서 EC2에 대한 raw data 를 측정(기본 5분)하는 부분이 있으며 OS 내부 지표가 필요한 경우에는 CloudWatch agent를 이용하여 수집 및 모니터링 가능함
CloudWatch agent
운영 체제 전반에 걸쳐 Amazon EC2 인스턴스에서 내부 시스템 수준 지표를 수집할 수 있습니다.
온프레미스 서버로부터 시스템 수준 지표를 수집
CloudWatch 에이전트가 수집하는 지표의 기본 네임스페이스는 CWAgent
이며 변경 가능.
설치
ubuntu 에 CloudWatch agent 설치
region="ap-northeast-2"
wget -c https://s3.${region}.amazonaws.com/amazoncloudwatch-agent-${region}/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
# wget https://s3.ap-northeast-2.amazonaws.com/amazoncloudwatch-agent-ap-northeast-2/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
windows의 경우 아래 경로에서 다운로드 가능
https://s3.amazonaws.com/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi
EC2 인스턴스에서 CloudWatch 에이전트를 실행을 위해서 EC2의 instance profile에 CloudWatchAgentServerPolicy policy 추가를 해줌.
에이전트가 CloudWatch Logs에 로그를 전송하고 에이전트가 이러한 로그 그룹에 대한 보존 정책을 설정할 수 있도록 하려면 역할에 logs:PutRetentionPolicy
권한을 추가해야 함.
설정파일 생성
마법사 실행. CloudWatch 에이전트의 미리 정의된 지표 세트(basic, standard, 고급 등)에서 선택을 할 수 있음. 초기에는 standard 로 설정을 하고 사용을 하면서 변경을 하는 것이 좋을 것 같음.
[linux]
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
마법사를 실행하면 설정파일은 /opt/aws/amazon-cloudwatch-agent/bin/config.json 에 생김.
[windows]
마법사 실행 시 C:\Program Files\Amazon\AmazonCloudWatchAgent/config.json으로 생성됨.
설정파일에 대한 상세 설명은 https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html
세가지 섹션으로 구성이 되어 있음.
agent
섹션에는 에이전트의 전체 구성에 대한 필드가 포함되어 있습니다. 마법사를 사용하는 경우 agent 섹션이 생성되지 않습니다.metrics
섹션은 수집하여 CloudWatch에 게시할 사용자 지정 지표를 지정합니다. 에이전트를 사용하여 로그만 수집하는 경우 파일에서metrics
섹션을 생략할 수 있습니다.logs
섹션은 CloudWatch Logs에 게시되는 로그 파일을 지정합니다. 서버에서 Windows Server가 실행되는 경우 Windows 이벤트 로그에 따른 이벤트가 포함될 수 있습니다
전체 예제 참고.
agent 섹션
metrics_collection_interval
: 지표 수집 빈도. 기본값은 60
run_as_user
: CloudWatch 에이전트를 실행하는 데 사용할 사용자를 지정합니다. 이 파라미터를 지정하지 않으면 루트 사용자가 사용됩니다.
debug
: debug . 기본은 false
logfile
지정하지 않으면 /opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
. CloudWatch 에이전트는 생성한 로그 파일을 자동으로 교체합니다. 로그 파일의 크기가 100MB에 도달하면 교체됩니다. 에이전트는 교체된 로그 파일을 최대 7일 동안 보존하며 교체된 백업 로그 파일을 최대 5개까지 보존합니다.
metrics 섹션
namespace
: 기본값은 CWAgent
append_dimensions
: 에이전트가 수집한 모든 지표에 Amazon EC2 지표 측정기준을 추가. ( 설정하지 않으면 hostname 으로 측정 기준을 사용함)
aggregation_dimensions
: 수집된 지표가 집계될 측정기준을 지정. 단일 기준 또는 여러 개를 조합할 수 있음.
logs 섹션
file_path
log_group_name
log_stream_name
retention_in_days
filters
: 필터와 일치하는 로그 항목에 대해 로그를 남기거나 남기지 않도록 설정할 수 있음.
실행
[linux]
[windows]
system manager 의 parameter store 에 설정파일을 넣어두었으면 로컬 파일 대신에 parameter store에서 설정파일을 가져올 수 있음. (AmazonSSMManagedInstanceCore policy에 ssm:GetParameter, ssm:GetParameters 가 들어가 있음)
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl 명령을 실행하고 나서 config.json 파일이 /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json 로 복사가 되었다.
parameter store에서 설정파일을 가져오는 경우에는 /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_AmazonCloudWatch-cloudwatch-agent 파일로 복사가 된다. 중간의 파일명(AmazonCloudWatch-cloudwatch-agent)은 parameter sotre 에 지정한 name이다.
로그를 보면 프로그램 시작을 할 때 먼저 /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json 를 찾고 /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ 디렉토리에 있는 파일을 읽는다.
cpu_, disk_, ethtool_, mem_, net_, processes_, swap_ 등 OS 내부 지표.
StatsD, collectd 등을 사용한 사용자 지정 지표 검색
StatsD, collectd 등을 사용한 사용자 지정 지표 검색이 가능하며 Prometheus 와도 연동이 가능하다.
EC2 모니터링
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/monitoring_ec2.html
EC2 기본 모니터링은 데이터가 5분간 자동으로 제공되며 무료임. 세부 모니터링은 데이터가 1분간 제공되는데 유료임.
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/using-cloudwatch-new.html
인스턴스에 사용 가능한 CloudWatch 지표. CPU, Disk, Network, CPU Credit 등. AWS/EC2
네임스페이스를 이용함. (OS 내부 지표가 필요한 경우에는 CloudWatch agent를 이용해야 함)
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html
Terraform 샘플코드
terraform-iac-test/monotoring/monitoring.tf at main · taejoonmoon/terraform-iac-test