Tech story/Cloud

ELK 스택 간단히 구축하기

kt cloud 테크블로그 2024. 10. 29. 09:47

[kt cloud 서비스개발팀 현지수 님]

 

 ELK스택 간단히 구축하기

 

시스템에서 발생하는 로그들이 여기저기 흩어져 있어서 문제를 추적하기 힘든 경험 다들 있을 것이라고 생각합니다. 로그를 따로 관리하다 보면 나중에 무슨 일이 일어났는지 확인하는 데만 많은 시간을 쏟게 됩니다.

 

이런 복잡함을 해결해 줄 강력한 도구가 바로 ELK 스택인데요! 분산된 로그들을 한 곳으로 모아 실시간으로 분석하고, 빠르게 검색할 수 있게 해주는 ELK 스택은 로그 관리에 큰 도움이 되는 솔루션입니다.

그럼 ELK를 활용해 어떻게 통합 로그 시스템을 구축할 수 있는지 알아봅시다~

 

 

ELK 스택이란?

 

 

[ 이미지 출처 : https://accordions.co.kr/accordion_tip/accordion-elk/ ]

 

ELK 스택은 간단히 말하면 통합 로그 관리와 데이터 분석을 위한 오픈 소스 툴 세트입니다.

 

또한 ELK 이름은 세 가지 핵심 구성 요소인 Elasticsearch, Logstash, Kibana의 앞글자를 따서 이름 붙여졌습니다. ELK 스택은 이 세가지에 Beats를 추가 연동하여 구성합니다.

각각 구성요소를 알아본다면 다음과 같습니다.

  1. Elasticsearch
    • 검색 및 분석을 담당하는 분산형 데이터 저장소입니다.
    • 대량의 로그 데이터를 효율적으로 저장하고, 실시간으로 빠르게 검색할 수 있는 기능을 제공합니다.
    • Indexing 형태로 데이터를 적재하도록 구현되어있습니다.
  2. Logstash
    • 데이터 수집을 담당합니다.
    • 다양한 소스에서 데이터를 수집하고 필터링 및 변환하여 Elasticsearch로 전송하는 데이터 파이프라인 역할을 합니다. 로그뿐만 아니라 다양한 형식의 데이터를 처리할 수 있습니다.
    • Input, Filter, Output Plugin으로 크게 구성되어있습니다.
  3. Kibana
    • Elasticsearch에 저장된 데이터를 시각화하고 분석할 수 있는 대시보드를 제공합니다. 사용자 정의 대시보드를 통해 데이터를 그래프, 차트 등으로 표현하여 실시간 모니터링이 가능합니다.
  4. Beats
    • 데이터 전송 역할을 담당합니다.
    • 단순한 전송 기능만을 담당하지만 목적별로 다양한 Beats가 존재합니다.
    • File Beat(로그데이터 수집), Metric Beat (메트릭 데이터 수집), Packet Beat(네트워크 트래픽 데이터 수집)

 

ELK 스택 구축하기

 

저희는 로그가 쌓이는 VM에 FileBeats를 설치하고, ELK는 또 다른 VM에 설치하여 통합 로그 시스템을 구축할 것입니다.

ubuntu 20.04 기준으로 작성하겠습니다.

 

1. Java 설치

일반적으로 ELK 스택에는 OpenJDK 11 이상 버전이 권장되어 이에 맞게 설치합니다.

sudo apt-get update
sudo apt-get install openjdk-11-jdk

java -version

 

2. Elasticsearch 설치

# APT 저장소 추가
wget -qO - <https://artifacts.elastic.co/GPG-KEY-elasticsearch> | sudo apt-key add -
sudo sh -c 'echo "deb <https://artifacts.elastic.co/packages/8.x/apt> stable main" > /etc/apt/sources.list.d/elastic-8.x.list'

# Elasticsearch 설치
sudo apt-get update
sudo apt-get install elasticsearch

# Elasticsearch 실행
sudo systemctl start elasticsearch.service
sudo systemctl enable elasticsearch.service

# Elasticsearch 실행확인
systemctl status elasticsearch.service

# 설정파일 확인
# default로 Port는 9200이다
cat /etc/elasticsearch/elasticsearch.yml

# http 통신이 필요하면 해당 설정 파일에서 아래와 같이 변경
xpack.security.enabled: false
xpack.security.http.ssl.enabled: false

 

3.Logstash 설치

# Logstash 설치
sudo apt-get install logstash

# conf 파일 생성
sudo vi /etc/logstash/conf.d/logstash.conf
  • logstash.conf
#logstash.conf

input {
  beats {
    port => 5044 # 5044 포트로 Filebeat에서 보낸 메세지를 받음
  }
}
filter { # 로그 데이터를 변환하거나 처리하는데 사용되는 섹션 (옵션입니다)
  json { #로그가 json인 경우 이 플러그인을 사용하여 파싱
      source => "message" # 여러필드를 포함하지만 message 필드 데이터만을 파싱
  }
}
output {
  elasticsearch {
    hosts => "localhost:9200" #elasticsearch 서버 호스트와 포트번호
    manage_template =>false # 인덱스 템플릿을 자동으로 관리하지 않음
    index => "logstash-log" # logstash-log라는 인덱스에 데이터를 저장 (날짜로 하셔도 됩니다)
  }
  stdout {} # 콘솔에 출력 (디버깅용)
}
  • 실행
# 실행
sudo systemctl start logstash
sudo systemctl enable logstash

# 상태 확인
sudo systemctl status logstash

 

4. Kibana 설치


# 설치
sudo apt-get install kibana

# 실행
sudo systemctl start kibana
sudo systemctl enable kibana

# 상태 확인
sudo systemctl status kibana

# 설정 확인
cat /etc/kibana/kibana.yml

# 설정 변경 (optional)
server.host="serverIP"

 

 

5. FileBeat 설치

어플리케이션이 실행되고 있는 VM 즉 log가 직접 저장되는 VM에 filebeat를 설치합니다.

# ElasticSearch APT 저장소 추가
wget -qO - <https://artifacts.elastic.co/GPG-KEY-elasticsearch> | sudo apt-key add -
echo "deb <https://artifacts.elastic.co/packages/8.x/apt> stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

# Filebeat 설치
sudo apt-get update
sudo apt-get install filebeat

 

  • Filebeat 설정
sudo vi /etc/filebeat/filebeat.yml

# 아래와 같은 설정 부분을 수정
filebeat.inputs:     # filebeat의 데이터 수집에 대한 설정
- type: log      # /home/ubuntu/log밑의 파일들을 계속 읽어 filebeat의 input으로 설정한다.
  enabled: true
  paths:
    - /home/ubuntu/log/*
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 3
setup.kibana:
output.logstash:                    #  읽어온 로그를 logstash로 내보내는 설정 
  hosts: ["localhost:5044"]     #  localhost:5044 로 읽어온 로그를 보냄


이렇게 설정하고 나면 예시화면처럼 시각화된 로그 시스템을 확인할 수 있습니다

 

 

여러분도 ELK Stack 을 통해 편리하게 로그 관리해보시길 바랍니다

 

 

 

참고/출처