본문 바로가기

Log Aggregation/CloudWatch or S3

3. EC2 Linux Application Logs - S3 (Logstash)

가장 먼저 S3 Bucket을 만들어 주도록 하겠습니다.

 

 


 

이제 서버 설정을 해보겠습니다.

 

EC2에 S3 FullAccess 정책을 붙인 롤을 할당해줍니다. (Put과 Describe에 대한 권한으로 최소화 시키셔도 됩니다.)

 

먼저, Java11을 설치해야 합니다.

 

아래 명령어를 수행해서 기본적인 업데이트를 해주겠습니다.

sudo yum -y update
sudo amazon-linux-extras install -y epel

Amazon Linux2에서는 openjdk를 설치할 수 있는것이 아래와 같습니다.

 

직접 11버전을 찾아서 강제로 설치하는 방법도 있겠으나, 가장 최신버전을 그냥 설치하도록 하겠습니다.

sudo yum -y install java-latest-openjdk-devel
cat > java.sh <<EOF
export JAVA_HOME=\$(dirname \$(dirname \$(readlink \$(readlink \$(which javac)))))
export PATH=\$PATH:\$JAVA_HOME/bin
export CLASSPATH=.:\$JAVA_HOME/jre/lib:\$JAVA_HOME/lib:\$JAVA_HOME/lib/tools.jar
EOF
sudo mv java.sh /etc/profile.d/java.sh
source /etc/profile.d/java.sh
java --version

 

이제 EC2 Role을 S3에 Put할 수 있어야 하기 때문에 아래와 같이 권한을 넣어주도록 하겠습니다.

 

 


 

자 그리고 이제 실제로 로그를 찍는 간단한 Jar 파일을 서버에 넣어서 실행한 후 로그를 쌓아보겠습니다.

JAR파일은 10MB가 넘는 관계로 링크에서 다운받아서 사용하시면 됩니다. (서비스 포트는 9000번 입니다.)

 

아래 명령어를 수행해서 서비스를 실행시켜주시고, 접속해보겠습니다.

nohup java -jar maven-basic.jar 1> /dev/null 2>&1 &

 

그러면, 아래와 같이 서비스가 되는 것을 볼 수 있고, 여기서 각 버튼을 통해 원하는 로그들을 남길 수 있으며

Start를 할 경우 세개의 로그가 Stop을 누를때까지 로그를 쌓게됩니다.

info 버튼을 한번 클릭하면 아래와 같이 개발자 도구 콘솔에서 확인할 수 있으며,

실제 서버에서도 로그가 쌓이는 것을 볼 수 있습니다.

 

 

 


 

 

이제 Logstash를 설치해주도록 하겠습니다.

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.4.0.rpm
sudo yum install -y logstash-7.4.0.rpm

 

 

이제 Config파일을 아래와 같이 작성하여 주세요

cat > logstash-test.conf <<EOF
input {
  file {
    path => "/home/ec2-user/logs/spring.log"
    type => "log"
    start_position => "beginning"
    stat_interval => 30
  }
}

output {
  stdout {
    codec => json_lines {}
  }
  s3 {
    region => "ap-northeast-2"
    bucket => "cb-test-logstash"
    restore => true
    codec => "json_lines"
  }
}
EOF

 

아래 명령어를 수행해서 로그를 S3로 수집해보도록 하겠습니다.

sudo /usr/share/logstash/bin/logstash -f logstash-test.conf

 

아래와 같이 정상적으로 수행되며, 로그가 잘 수집되는것을 보실 수 있습니다.

 

 

 

 

txt 파일을 다운로드 해본 결과는 아래와 같고 잘 수집되는 것을 볼 수 있습니다. 

 

 

S3에 이벤트 - 람다를 연동하여 ES 서비스로 로그를 던져서 수집하는 형태로 구성하면,

최종적으로 Log Aggregation을 가장 저렴하게 사용하는 방법을 구성하실 수 있습니다.

 

ES Service로 S3 이벤트 -> 람다를 통해서 수행하는 부분은 나중에 한번에 작성하도록 하겠습니다.

다음 게시글에서는 ELB, VPC FlowLogs, CloudFront Logs를 남기는 각 설정 방법을 간단하게 알아보겠습니다.