본문 바로가기

Log Aggregation/CloudWatch or S3

1. EC2 Linux Command Log 수집 - CloudWatch Logs Agent

CloudWatch Logs 에이전트 필수 조건

CloudWatch Logs 에이전트에는 Python 버전 2.7, 3.0 또는 3.3과 다음과 같은 버전의 Linux가 필요합니다.

  • Amazon Linux 버전 2014.03.02 이상. Amazon Linux 2는 지원되지 않습니다.
  • Ubuntu Server 버전 12.04, 14.04 또는 16.04
  • CentOS 버전 6, 6.3, 6.4, 6.5 또는 7.0
  • Red Hat Enterprise Linux(RHEL) 버전 6.5 또는 7.0
  • Debian 8.0

먼저 서버에 CloudWatchAgentServerPolicy를 붙여줍니다.

 

서버에서 CMD Log를 쌓도록 세팅하는 명령어입니다.

아래 명령어를 수행해주세요

sudo bash -c 'echo "HISTTIMEFORMAT=\"%Y-%m-%d_%H:%M:%S \"" >> /etc/profile'
sudo bash -c 'echo "export HISTTIMEFORMAT" >> /etc/profile'
source /etc/profile

sudo bash -c 'echo "export PROMPT_COMMAND=\`RETRN_VAL=\$?;logger -p local6.debug \"[\$("whoami")][\$"PWD"][\$\$]: \$(history 1 | sed \"s/^[ ]*[0-9]\+[ ]*//\") [\$"RETRN_VAL"]\"\`" >> /etc/bashrc'
sudo sed -i "s/\`/\'/g" /etc/bashrc
source /etc/bashrc

sudo touch /var/log/cmdlog.log
sudo chmod 600 /var/log/cmdlog.log
sudo bash -c 'echo "# cmd log" >> /etc/rsyslog.conf'
sudo bash -c 'echo "local6.*  /var/log/cmdlog.log" >> /etc/rsyslog.conf'
sudo service rsyslog restart

 

간단하게 위의 쉘을 설명하자면, 첫번째로, 명령어를 수행한 시간에 대한 포맷을 설정한 후,

터미널에서 타이핑 후 엔터를 입력하면 syslog에서 local6.notice 채널로 넘겨 해당 cmdlog.log에 그 이력이 쌓이도록 구성하는것 입니다.

 

아래와 같이 history에서 시간포맷을 정한대로 확인할 수 있으며,

설정한 대로 cmdlog.log에서 명령어들에 대한 로그를 확인할 수 있습니다.

 

 

이제 이 경로에 쌓이는 로그를 CloudWatch Logs에 전달될 수 있도록 설정하겠습니다.

아래 명령어를 수행해주세요.

sudo yum update -y
sudo yum install -y awslogs

 

아래 경로에 있는 awslogs.conf에 아래 사항을 추가해주세요.

 

 

[/var/log/cmdlog.log]
datetime_format = %b %d %H:%M:%S
file = /var/log/cmdlog.log
buffer_duration = 5000
log_stream_name = cb-test-api-cmd
initial_position = end_of_file
log_group_name = cb-test-api-cmd

 

이제 아래 명령어를 수행해서 수집해주도록 하겠습니다.

sudo systemctl enable awslogsd.service
sudo service awslogsd start

 

 

 

만약 위와 같이 수행이 안 된다면, 아래 로그를 통해 문제점을 찾아보시면 됩니다.

sudo cat /var/log/awslogs.log

 

정상적으로 수행됐을 경우 아래와 같은 로그를 보실 수 있습니다.