이번 포스팅의 목표는 아래와 같습니다.
Name | Main Info | 기타 |
---|---|---|
JDK | Ver: 1.8.0_282 | AWS EC2 인스턴스 A |
Logstash | IP: 52.79.253.63 PORT: 5044 | AWS EC2 인스턴스 A |
AWS EC2 인스턴스 생성하고 접근하기
이전에 작성한 글이 있으니 인스턴스 생성은 위 링크를 참고해주세요.
이번에는 Logstash
작업이니 pem key만 logstash-key로 생성해서 인스턴스 접근하시면 됩니다.
기존에 사용하던 pem key를 쓰고 싶으시면 그걸 쓰셔도 무방합니다.
인스턴스에 접근하셨다면 sudo su
명령으로 root 계정으로 변경해주세요.
※ 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.
yum install -y java-1.8.0-openjdk-devel.x86_64
명령으로 Java 8을 설치합니다.
java -version
명령으로 설치된 버전을 한번 빠르게 체크 하겠습니다.
echo $JAVA_HOME
명령을 실행하시면, 설정된 JAVA_HOME
이 나오시면 그대로 쓰시면 됩니다.
이 포스팅에서는 인스턴스를 새로 생성했으니, 아래 그림과 같이 아무것도 나오지 않습니다.
which java
명령으로 나온 경로를 readlink -f [java 경로]
명령의 java 경로 부분에 넣고 실행하면 절대경로가 나옵니다. 그대로 복사해주세요.
vi /etc/profile
명령으로 환경변수 설정 파일에 진입합니다.
단축키 Shift + G로 가장 아래로 접근해서, 아래 그림과 같이 추가해주세요.
/etc/profile
파일의 수정이 끝났다면, source /etc/profile
명령으로 변경된 설정 정보를 적용해줍니다.
rpm –import https://artifacts.elastic.co/GPG-KEY-elasticsearch
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
yum install logstash
명령으로 Logstash
를 설치합니다.
usermod -a -G logstash ec2-user
인스턴스 프리티어에서는 Logstash
를 바로 실행할 경우, cannot memory allocate 이슈가 발생하곤 합니다.
빠르게 실습만 진행할 목적이라면 프리티어보다 메모리가 더 많이 제공되는 인스턴스로 생성하는 것도 좋습니다.
vi /home/ec2-user/.bashrc
명령으로 .bashrc
파일에 아래와 같은 메모리 설정을 추가해줍니다.
작업을 마치셨다면 source /home/ec2-user/.bashrc
로 변경된 설정 정보를 반영해주세요.
mkdir /usr/share/logstash/config
명령으로 config 폴더를 생성합니다.
여기에, logstash_simple.conf
라는 파일을 생성하겠습니다.
vim /usr/share/logstash/config/logstash_simple.conf
명령으로 생성된 logstash_simple.conf
파일에 아래와 같이 데이터를 입력하면 입력한 데이터와 관련 정보를 출력하는 코드를 추가합니다.
input {
stdin {}
}
output {
stdout {}
}
이제 모든 준비가 끝났으니 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 부분에 출력되고 있음을 확인할 수 있습니다. 성공적입니다.
혹시해서 진행해본 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/