Among Us - Yellow Crewmate [ELK Stack] 로그 시스템을 구축하기 위한 ELK를 설치해보자

DevOps/Logging

[ELK Stack] 로그 시스템을 구축하기 위한 ELK를 설치해보자

감쟈! 2021. 8. 7. 21:39

1. ELK Stack 이란 ?

 

ELK 는 오픈소스 프로젝트인 (Elastic search, LogStash, Kibana)의 앞글자만 따서 만들어진 용어이다.

 

ElasticSearch : LogStash를 통해서 전송받은 데이터 분석 및 저장 기능을 담당한다.

Logstash : 데이터를 처리하는 파이프라인으로, 로그를 수집하여 ElasticSearch에 전송한다.

Kibana : ElasticSearch에 저장되어 있는 데이터를 시각화하고, 실시간으로 분석할 수 있다.

 

+

 

위의 ELK에서 Beat까지 추가되면서 ELK Stack이라고 불리고 있다.

Beat는 대상 서버에서 데이터를 수집하는 역할을 담당하고 있다.

 

 

 

 

ELK 설치하는 방식은 Docker로 설치하기, 패키지로 설치하기 등이 있는데 이번 글에서는 rpm 패키지를 이용하여 설치해본다.

 

 

2. Java 설치

ElasticSearch 설치를 진행하기전 java가 설치되어 있어야 한다.

 

다음과 같이 java -version 명령어로 java가 설치되어 있는지 확인할 수 있다.

# Java 설치확인

$ java -version

openjdk version "1.8.0_302"
OpenJDK Runtime Environment (build 1.8.0_302-b08)
OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)

만약 java가 설치되어 있지 않다면 설치해주어야 한다.

$ sudo yum install -y java-1.8.0

 

3. ElasticSearch 설치

 

https://www.elastic.co/guide/en/elasticsearch/reference/current/rpm.html

 

Install Elasticsearch with RPM | Elasticsearch Guide [7.14] | Elastic

On systemd-based distributions, the installation scripts will attempt to set kernel parameters (e.g., vm.max_map_count); you can skip this by masking the systemd-sysctl.service unit.

www.elastic.co

 

설치는 위의 공식홈페이지를 따라서 순서대로 진행한다.

 

# rpm import 

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

 

# elasticsearch.repo 작성

$ vi /etc/yum.repos.d/elasticsearch.repo

[elasticsearch]
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=0
autorefresh=1
type=rpm-md

다음과 같은 순서대로 진행하면 설치가 완료된다.

# yum 으로 ealsticsearch 설치

$ yum install --enablerepo=elasticsearch elasticsearch

 

 

설치가 완료되고 나면 elasticsearch.yml 파일에서 설정해주어야 한다.

 

$ vi /etc/elasticsearch/elasticsearch.yml

 

 

 

Cluster와 node를 지정할 필요는 없지만 테스트 삼아서 한번 해보았다...

 

 

수정해주어야 할 부분은 Network에서 

1) network.host : 0.0.0.0 (모든 접근을 허용)

2) http.port: 9200 (elasticsearch 기본 포트가 9200)

3) cluster.initial_master_nodes: ["test1"]  (위에서 지정한 node1을 지정)

4) node를 지정하지 않았을 경우는  discovery.seed.hosts: ["127.0.0.1"] 을 지정한다.

 

설치 및 설정이 완료되었으면 elasticsearch를 실행 시켜준다.

 

# elasticsearch 실행

$ systemctl daemon-reload
$ systemctl enable elasticsearch
$ systemctl start elasticsearch

elasticsearch 실행 후 , curl localhost:9200 을 입력해서 elasticsearch가 제대로 실행중인지 확인할 수 있다.

# elasticsearch 접속 확인

$ curl localhost:9200


{
  "name" : "test1",
  "cluster_name" : "test",
  "cluster_uuid" : "sogLiIMJSK28_2WWQiBiJQ",
  "version" : {
    "number" : "7.14.0",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",
    "build_date" : "2021-07-29T20:49:32.864135063Z",
    "build_snapshot" : false,
    "lucene_version" : "8.9.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

 

 

4. Logstash 설치

 

다음으로 elasticsearch로 데이터를 전송하는 Logstash를 설치해보자.

 

# logstash repo 작성

$ 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
# logstash 설치

$ yum install logstash -y

 

# logstash 실행

$ systemctl start logstash
$ systemctl enable logstash

logstash 설치가 완료되었으면 logstash.conf 파일을 생성하여 파이프라인을 작성해야 한다.

 

logstash 파이프라인은 (input, filter, output)의 3가지로 구성된다.

 

1) input 

- filebeat에서 데이터를 받을 때는 input을 beats로 설정한다.

- 데이터를 받을 포트 지정 (기본 포트 5044)

- 호스트 상관없이 모든 데이터를 받을 경우 호스트는 0.0.0.0으로 작성

2) filter

- elasticsearch로 전달하기 전에 원하는 데이터의 타입, 형태 등으로 필터링/전처리하는 과정

(이번 글에서는 작성하지 않고 데이터를 받아오는 과정만 진행한다.)

 

3) output

- filebeat에서 데이터를 받아 logstash에서 전처리를 한 데이터를 전송할 곳을 지정

input {
  beats {
    port => 5044
    host => "0.0.0.0"
  }
}

output {
  elasticsearch {
    hosts => "localhost:9200"
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%+YYYY.MM.dd}"
  }
}

 

# logstash script 적용

$ cd /usr/share/logstash/bin
$ ./system-install

Successfully created system startup script for Logstash

 

5. kibana 설치

이번에는 Kibana를 설치하여 Elasticsearch에 저장되어 있는 데이터들을 시각화하여 대시보드 형태로 만들어보자.

 

# kibana  repo 작성

$ 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

 

# kibana 설치

$ yum install kibana -y

 

# kibana 실행

$ systemctl start kibana
$ systemctl enable kibana

 

kibana를 설치한 후 외부에서 접근할 수 있도록 server.host를 0.0.0.0 으로 변경해주었다.

# kibana.yml 설정


$ vi /etc/kibana/kibana.yml

# Kibana is served by a back end server. This setting specifies the port to use.
#server.port: 5601

# Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values.
# The default is 'localhost', which usually means remote machines will not be able to connect.
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "0.0.0.0"    # "localhost" > "0.0.0.0" 으로 변경

 

 

kibana 설치와 설정이 끝났으면 http://<server ip>:5601 로 kibana 대시보드에 접속할 수 있다.

 

 

이번 글에서는 ELK의 개념과 설치하는 과정에 대해서 알아보았다.

 

ELK 를 이용하여 Log를 수집하여 시각화하는 방법에 대해서는 다음 글에서 작성하도록 해보자.