AWS EC2에 Logstash 설치하기

망7H·2021년 4월 10일
3

이번 포스팅의 목표는 아래와 같습니다.

  • AWS EC2에 Logstash 설치하기.
  • Logstash를 사용하여 데이터 입력 / 출력 확인하기.

0. 작업 환경 및 서버 정보

NameMain Info기타
JDKVer: 1.8.0_282AWS EC2 인스턴스 A
LogstashIP: 52.79.253.63
PORT: 5044
AWS EC2 인스턴스 A

1. AWS EC2에 인스턴스 생성하고 접근하기

AWS EC2 인스턴스 생성하고 접근하기
이전에 작성한 글이 있으니 인스턴스 생성은 위 링크를 참고해주세요.
이번에는 Logstash 작업이니 pem key만 logstash-key로 생성해서 인스턴스 접근하시면 됩니다.
기존에 사용하던 pem key를 쓰고 싶으시면 그걸 쓰셔도 무방합니다.


2. EC2에 Logstash 설치하기

인스턴스에 접근하셨다면 sudo su 명령으로 root 계정으로 변경해주세요.

1) Java 8 버전 이상 설치

※ Logstash는 Java 9 또는 Java 10과는 호환되지 않는다고 합니다

참고 링크
Running Logstash on an EC2 Instance
We’re going to install Logstash on an Amazon Elastic Compute Cloud (EC2) instance running a standard Amazon Linux AMI. The easiest way to add software to an AMI is with YUM. Elastic publishes a package that manages the system dependencies. Logstash is a Java application. It requires Java 8 and is not compatible with Java 9 or 10.

(1) Java 8 설치

yum install -y java-1.8.0-openjdk-devel.x86_64 명령으로 Java 8을 설치합니다.
java -version 명령으로 설치된 버전을 한번 빠르게 체크 하겠습니다.

(2) JAVA_HOME, PATH 변수 설정

echo $JAVA_HOME 명령을 실행하시면, 설정된 JAVA_HOME이 나오시면 그대로 쓰시면 됩니다.
이 포스팅에서는 인스턴스를 새로 생성했으니, 아래 그림과 같이 아무것도 나오지 않습니다.
which java 명령으로 나온 경로를 readlink -f [java 경로] 명령의 java 경로 부분에 넣고 실행하면 절대경로가 나옵니다. 그대로 복사해주세요.
vi /etc/profile 명령으로 환경변수 설정 파일에 진입합니다.
단축키 Shift + G로 가장 아래로 접근해서, 아래 그림과 같이 추가해주세요.
/etc/profile 파일의 수정이 끝났다면, source /etc/profile 명령으로 변경된 설정 정보를 적용해줍니다.

2) Elastic 공개 키 검색

rpm –import https://artifacts.elastic.co/GPG-KEY-elasticsearch

3) logstash.repo 생성

vi /etc/yum.repos.d/logstash.repo 명령으로 파일을 생성하고, 아래의 내용을 붙여넣어 줍니다.

[logstash-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

4) Logstash 설치

yum install logstash 명령으로 Logstash를 설치합니다.

5) 사용자 환경 수정

(1) 메시지 캐싱을 위해 사용자를 logstash 그룹에 추가

usermod -a -G logstash ec2-user

(2) java 메모리 설정 변경

인스턴스 프리티어에서는 Logstash를 바로 실행할 경우, cannot memory allocate 이슈가 발생하곤 합니다.
빠르게 실습만 진행할 목적이라면 프리티어보다 메모리가 더 많이 제공되는 인스턴스로 생성하는 것도 좋습니다.
vi /home/ec2-user/.bashrc 명령으로 .bashrc 파일에 아래와 같은 메모리 설정을 추가해줍니다.
작업을 마치셨다면 source /home/ec2-user/.bashrc로 변경된 설정 정보를 반영해주세요.

3. Logstash Pipeline 세팅

1) Logstash 실행에 사용할 conf 파일 생성

mkdir /usr/share/logstash/config 명령으로 config 폴더를 생성합니다.
여기에, logstash_simple.conf 라는 파일을 생성하겠습니다.
vim /usr/share/logstash/config/logstash_simple.conf 명령으로 생성된 logstash_simple.conf 파일에 아래와 같이 데이터를 입력하면 입력한 데이터와 관련 정보를 출력하는 코드를 추가합니다.

input {
  stdin {}
}
output {
  stdout {}
}

2) Logstash 실행

이제 모든 준비가 끝났으니 Logstash를 실행해보겠습니다.
이 포스팅의 2-5-1에서 ec2-user를 Logstash의 사용자 그룹에 추가해주었으니, root 계정을 나가서 ec2-user로 변경하도록 합니다.
Logstash를 한번 실행해보겠습니다.
/usr/share/logstash/bin/logstash -f /usr/share/logstash/config/logstash_simple.conf 명령을 실행하고 잠시 기다려봅니다.
Oops... 오류가 발생했습니다.
아까 말씀드렸던 "Cannot allocate memory" 이슈가 발생했습니다.
인스턴스에서 완전히 로그아웃 한 뒤, 다시 접속하니 이 오류에 대해서는 해결이 되는군요.

두번째 시도입니다. 실행해보겠습니다.
Oops... 이번엔 또 다른 오류가 발생했습니다.
"Path: "/usr/share/logstash/data" must be a writable directory. It is not writable."라는 메시지에 대해 찾아보니, 여기에 해결방법이 있네요.
sudo chown -R logstash.logstash /usr/share/logstash
sudo chmod 777 /usr/share/logstash/data
위 2개의 명령으로 logstash의 소유 권한과 파일 권한을 수정했습니다.
세번째 시도입니다. 실행해보겠습니다.
Oops... 또 다른 오류가 발생했습니다.
"Expected one on #, input, filter, output at line 1, column 1 after"라는 메시지였습니다.
파이프라인을 만드는 과정에서 발생한 에러이니, logstash_simple.conf 파일을 살펴보았습니다.
input이라고 쓰지 않고, nput 이라고 써두었군요. 복사는 처음부터 끝까지 합시다...
이 부분을 고치고 다시 4번째 시도로 실행해보았습니다.

4번째 시도에서는 제가 입력한 문장들이 JSON 형태로 message 부분에 출력되고 있음을 확인할 수 있습니다. 성공적입니다.

3) stopped 시키고 Logstash 다시 실행

혹시해서 진행해본 5번째 시도입니다.
Ctrl + Z로 실행중인 Logstash를 stopped 시키고 다시 실행하면, "Cannot allocate memory"와 같은 에러메시지가 발생합니다.
아래 그림과 같이 실행중인 프로세스에서 완전히 KILL PID 를 처리한 뒤, 재실행하면 되는 것을 보여드리려고 추가하였습니다.




여기까지, AWS EC2에서 Logstash를 지정한 파이프라인에 따라 데이터의 입/출력을 진행해보았습니다.
다음 포스팅에서는 Logstash의 input에 Postgresql를 지정하여 데이터를 수집하고 Output에 Elasticsearch을 지정해서 데이터를 넘기는 파이프라인을 만들어보면 좋겠네요.

해당 글 작성에 참고한 링크

https://classicismist.blogspot.com/2020/01/centos7-elk-stack-filebeat-logstash.html
https://discuss.elastic.co/t/i-cannot-start-logstash-on-my-machine-error-message-inside/88900
http://blog.naver.com/PostView.nhn?blogId=dorian0520&logNo=221743434945
https://aws.amazon.com/ko/elasticsearch-service/resources/articles/logstash-tutorial/

profile
망한 개발자의 개발 기록입니다. 저를 타산지석으로 삼으시고 공부하세요.

0개의 댓글