지구정복
[Elastic Stack] AWS 리눅스 단일서버 이용해서 ELK 구축하기 본문
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로 시각화하는 내용에 대해서
포스팅을 해보겠다.
'데이터 엔지니어링 정복 > Elastic Stack' 카테고리의 다른 글
[Elastic Stack] AWS 리눅스 단일서버에서 ELK 사용하기(Metricbeat, Filebeat로부터 Logstash > elasticsearch > kibana) (0) | 2021.07.05 |
---|