지구정복

[Elastic Stack] AWS 리눅스 단일서버 이용해서 ELK 구축하기 본문

데이터 엔지니어링 정복/Elastic Stack

[Elastic Stack] AWS 리눅스 단일서버 이용해서 ELK 구축하기

eeaarrtthh 2021. 7. 5. 14:09
728x90
반응형

1. AWS에서 EC2 인스턴스 생성

더보기

서버 사양은 다음과 같다.

  • m4.xlarge: 4 vCPU / 16GB
  • OS: Amazon Linux2 AMI 
  • EBS: 200GB

비용은 아마존 비용설명 참고! 요금폭탄 맞을수도 있으니 사용하지 않을 때는 중지시키고
더 이상 쓰지않을 때는 종료해서 인스턴스를 없애주자! 이틀정도 사용했는데 예상금액이 2만원 ... ㅎㅎ

 

AWS에 로그인하고 EC2 서비스에 들어간다. 그리고 인스턴스 시작을 누른다.

 

아마존 리눅스2 AMI를 선택

 

밑으로 내려서 m4 유형을 선택한다.

 

검토 및 시작을 누른뒤 시작하기를 누른다. 그러면 기존 키페어 사용 및 키페어 생성 문구가 나오고 아래와 같이 새로운 키페어를 만들어준다.

 

보안그룹에서 모든 TCP에 대해서 0.0.0.0/0을 허용해준다. 이러면 모든 포트에 대해서 외부접속을 할 수 있다. 원래는 사용하는 포트만 하는게 맞는데 어차피 개발 연습용이므로 이렇게 진행한다.

보안탭으로 들어간다. 그리고 인바운드 규칙을 누른다.


* 참고 *
만일 AWS처럼 클라우드환경이 아니라면 서버에 접속한 뒤 해당포트에 대한 방화벽을 열어줘야한다.
방화벽 열어주는 리눅스 명령어는 아래와 같다.

> firewall-cmd --permanent --zone=public --add-port=9200/tcp 
> firewall-cmd --reload 
> firewall-cmd --list-ports

 

위에서 생성했던 키페어를 puttygen.exe를 이용해서 .ppk파일로 만들어줘야 ssh접속시 로그인을 할 수 있다.

puttygen.exe은 putty를 설치폴더에 같이 있다.

 

Conversions - Import Key 를 눌러서 아까 다운받은 키페어를  선택한다.

 

그리고 Save private key를 눌러서 .ppk 파일을 만들어준다.

 

이제 putty를 실행해서 아래와 같이 .ppk파일을 등록해주고 접속을 한다.

 

접속 로그인 ID는 ec2-user이다.

 

2. Elasticsearch 설치하기

더보기

# 시간대 설정하기

> sudo cp -p /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 

# Java 8버전 설치하기

> sudo yum install java-1.8.0-openjdk-devel.x86_64 -y
> java -version
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-b08)
OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)

 

# Elasticsearch 설치하기

> sudo vi /etc/yum.repos.d/elasticsearch.repo

 아래 내용을 입력해준다.

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

 yum을 이용해 설치한다.

> sudo yum install elasticsearch-7.6.2 -y

 

엘라스틱 서치 서비스 시작과 상태, 종료 명령어는 아래와 같다.

sudo service elasticsearch start
sudo service elasticsearch status
sudo service elasticsearch stop

 

# 호스트명 변경

 

클러스터를 구성할 때 편의상 호스트명을 변경해주는데 변경하는 방법을 알아보자.

변경하게 되면 앞으로 ELK 연동과정에서 호스트명을 변경된 호스트명으로 적어줘야한다.

 

변경하지 않으면 그냥 localhost를 쓰면된다.

여기서는 한 번 바꾸고 진행해보자.

 

예시로 es-master로 변경해보자.

> sudo vi /etc/sysconfig/network
NETWORKING=yes
NOZEROCONF=yes
HOSTNAME=es-master

 두 번째의 IP는 AWS 인스턴스의 프라이빗 주소이다.

> sudo vi /etc/hosts
127.0.0.1   localhost es-master
172.31.4.111 es-master
::1         localhost6 localhost6.localdomain6

 기존에 있던 호스트명을 지우고 아래와 같이 바꿔준다.

> sudo vi /etc/hostname
es-master

 

리부팅하고 1분정도 뒤에 다시 접속한다. putty로 접속할 때 다시 ppk파일을 등록하고 접속해야한다.

> sudo reboot

 

이제 엘라스틱 서치가 잘 설치되었는지 확인한다. 아래와 같이 나오면 설치가 잘 된 것이다.

> sudo service elasticsearch start
> curl localhost:9200

 

# 엘라스틱 서치 설정파일 수정

 

이제 엘라스틱 서치 설정파일을 수정해준다.

> sudo vi /etc/elasticsearch/elasticsearch.yml

호스트명은 아래와 같이 설정해준다.

bootstrap.memory_lock을 설정한다. 이를 설정하면 엘라스틱서치가 너무 많은 메모리를 사용하지 않게 해준다.

 

네트워크 설정을 해준다. 어디서나 접근할 수 있게 0.0.0.0을 적어준다.

엘라스틱 서치가 처음 실행되는 노드를 명시해준다.

 

이제 엘라스틱 서치 서비스를 재시작하고 다시 잘 실행되는지 확인한다.

> sudo service elasticsearch restart
> curl localhost:9200
{
  "name" : "es-master",
...
}

 

이제 외부접속도 되는지 확인해보자.

AWS의 공인 IP주소:9200을 입력하면 접속이 되는 것을 확인할 수 있다.

 

# 엘라스틱 서치관련 디렉토리 접근권한 부여하기

 

나중에 실행하거나 다른 소프트웨어와 연동할 때 디렉터리 접근권한때문에 에러가 나는 경우가 있으므로 미리 접근권한을 준다.

> sudo chown -R ec2-user:root /etc/elasticsearch
> sudo chown -R ec2-user:root /usr/share/elasticsearch/
> sudo chown -R ec2-user:root /etc/sysconfig/elasticsearch
> sudo chown -R ec2-user:root /usr/share/elasticsearch/
> sudo chown -R ec2-user:root /var/lib/elasticsearch

 

 

# Java Heap 메모리 설정

 

> sudo vim /etc/elasticsearch/jvm.options

현재 서버의 램이 8g이므로 아래와 같이 최대 8, 최소 8기가로 바꿔준다.

 

# 한글 형태소 분석기 설치하기

 

엘라스틱서치 디렉토리로 이동하고 nori플러그인을 설치한다.

> cd /usr/share/elasticsearch/
> sudo bin/elasticsearch-plugin install analysis-nori

 

혹시 제거할 일이 생기면 아래와 같이 플러그인을 제거하면 된다.

> bin/elasticsearch-plugin remove analysis-nori

 

# AWS 이미지 만들기

 

추가적으로 AWS 데이터 백업을 이미지로 만들어서 해보자.

혹시 진행하다가 문제가 생기면 해당 인스턴스를 지우고 미리 만들어놓은 이미지로 다시 인스턴스를 만들면된다.

 

인스턴스 우클릭 - 이미지 - 이미지 생성

적당한 이름을 설정한다. 또한 필요한 설명은 이미지 설명란에 영어로 작성해준다.

 생성되는데 약 5분정도 소요된다. 이때 인스턴스는 재부팅된다.

 생성이 완료되면 나중에 혹시 백업이 필요하면 시작하기를 눌러서 새로운 인스턴스를 만들면된다.

 

 

3. Kibana 설치하기

더보기

# Kibana 설치

 

yum을 이용해서 설치한다.

> sudo vi /etc/yum.repos.d/kibana.repo
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
> sudo yum install kibana-7.6.2 -y

 

클라우드환경이 아닌 경우 5601포트에 대해서 방화벽을 열어준다.
클라우드 환경인 경우 위에서 모든 포트에 대해 0.0.0.0/0 외부접속을 허용했기 때문에 따로 바꿀 게 없다.

 

# Kibana 설정파일 수정하기

 

아래와 같이 네트워크 설정을 해준다.

> sudo vi /etc/kibana/kibana.yml

 

# Kibana 실행하기

> sudo service kibana start
> sudo service kibana status

 

이제 웹브라우저에서 AWS공인IP:5601 을 입력해서 키바나 웹UI에 접속해보자. 접속이 되면 성공이다.
만일 접속이 안되면 키바나를 끄고 엘라스틱서치도 껐다가 다시 켜고 접속해보자.

 

 

4. Logstash 설치하기

더보기

# Logstash 설치

 

yum을 이용해서 설치한다.

> sudo vi /etc/yum.repos.d/logstash.repo

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

 

# 간단한 예제 실행하기

 

예제파일은 그냥 ec2-user 홈 디렉터리에 만들어준다.

> vi /home/ec2-user/test.conf
input { 
  stdin {} 
} 
output {
  stdout {} 
}

 

아래 명령어로 로그스태시를 실행한다.

> sudo /usr/share/logstash/bin/logstash -f /home/ec2-user/test.conf

그리고 커서에 hello를 입력하고 엔터를 눌러본다.

 그러면 아래와 같이 결과가 출력된다.

 

로그스태시는 컨트롤+c를 눌러서 종료한다.

 

 

 

 

 

 

이상으로 단일노드에 ELK구축과정에 대해서 공부해보았다.

다음에는 metricbeat와 filebeat에서 logstash, elasticsearch로 데이터가 적재되고 kibana로 시각화하는 내용에 대해서 

포스팅을 해보겠다.

 

 

 

 

 

 

 

 

728x90
반응형
Comments