Profile picture

[Docker] ELK + Filebeat로 로그 관리 시스템 구축

JaehyoJJAng2024년 03월 10일

개요

최근 운영 중인 리눅스 서버들을 모니터링 하기 위해서 Prometheus와 Grafana를 통해 각 서버들의 메트릭을 수집하고 시각화를 해봤었다.
(Prometheus의 node-exporter로 서버 모니터링하기)


이번에는 각 서버들의 로그 수집을 위해 Elastic Stack(elastic search + logstash + kibana) + Filebeat로 로그 관리 시스템을 구축해보려고 한다.

로그 서버를 구축하는 이유는 다음과 같다.

  • 각 서버들로부터 수집한 로그를 분석해 서버에 오류나 문제가 발생한 것이 있는지
  • 더 견고한 운영 환경을 만들기 위해

ELK Stack ?

  • Elasticsearch: JSON 기반의 분산현 오픈소스 검색 및 분석 엔진. 주로 REST API를 통해 처리함.
  • Logstash: 여러 소스에서 동시에 데이터를 수집하여 변환하고, Elasticsearch와 같은 "stash"로 전송하는 서버사이드 데이터 처리 파이프라인을 의미함.
  • Kibana: Elasticsearch에서 색인된 데이터를 검색하여 시각화하며, 막대 차트, 원형 차트, 표, 히스토그램, 지도 등을 생성하여 데이터를 분석할 수 있도록 해줌.

  • Filebeat
    • 경량화된 설계로 작동. 시스템 자원을 적게 사용하여 데이터를 수집하므로 성능상의 이점 존재
    • 수집한 로그 데이터를 Elasticsearch 또는 Logstash와 같은 저장소로 실시간 전송함.
    • 중앙 집중화된 로그 시스템에서 로그 데이터를 효과적으로 처리할 수 있는 장점이 있음

시스템 아키텍처

image

아키텍처 구조는 다음과 같다.

  • 로그 파일들을 Filebeat에서 읽어와 logstash로 전송
  • logstash는 수집한 로그를 필터링해 Elasticsearch로 전송
  • kibana에서 이를 시각화 처리

1. Docker로 ELK 띄우기

소스코드 clone

아래 명령을 실행해 해당 레포지토리를 clone 해주자.

git clone https://github.com/deviantony/docker-elk

이제 현재 경로에 docker-elk 라는 디렉토리가 생성 되었을거다. 해당 경로로 이동해주자.

cd docker-elk

1-1. 환경변수 설정

.env 파일을 열어서

  • ELASTIC_PASSWORD
  • LOGSTASH_INTERNAL_PASSWORD
  • KIBANA_SYSTEM_PASSWORD

위 환경 변수의 값을 수정해주자.(초기값: changeme)


1-2. Elasticsearch 설정 업데이트

elasticsearch/config/elasticsearch.yml 파일을 아래와 같이 수정

---
cluster.name: docker-cluster
network.host: 0.0.0.0
xpack.security.enabled: false

1-3. Kibana 설정 업데이트

kibana/config/kibana.yml 파일의 33번째줄부터 마지막 줄(xpack 관련) 모두 삭제 또는 주석
image


1-4. Logstash 설정 업데이트

logstash/pipeline/logstash.conf 파일을 아래와 같이 수정

input {
    beats {
        port => 5044
    }
}

output {
    elasticsearch {
        hosts => "http://elasticsearch:9200"
        user => "elastic"
        password => "${LOGSTASH_INTERNAL_PASSWORD}"
        index => "logstash-%{+YYYY.MM.dd}"
      }
}

1-5. 컨테이너 실행

docker-compose up -d --build
docker-compose up setup

2. Filebeat 설정

2-1. 설치


1. Download and install the Public Signing Key

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

2. You may need to install the apt-transport-https package on Debian before proceeding

sudo apt-get install apt-transport-https

3. Save the repository definition to /etc/apt/sources.list.d/elastic-8.x.list

echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

4. Run apt-get update, and the repository is ready for use. For example, you can install Filebeat by running

sudo apt-get update && sudo apt-get install filebeat

5. To configure Filebeat to start automatically during boot, run

sudo systemctl enable filebeat

2-2. 설정 업데이트

/etc/filebeat/filebeat.yml 파일을 아래와 같이 수정

filebeat.inputs:
  - type: log
    paths:
      - {각자 환경에 맞는 로그 경로}/*.log
output.logstash:
  hosts: ["<logstash 서버 IP>:5044"]

image


2-3. filebeat 실행

sudo filebeat -e -c /etc/filebeat/filebeat.yml -d "publish"

3. 로그 확인

3-1. kibana 접속

http://<kibana_서버IP>:5601 접속
image


3-2. index 설정

Management -> Stack Management 접속
image


kibana -> Data view 접속


Create data view 설정
image
image
위에서 설정image 1-4 Logstash 설정 업데이트에서 설정했던 것처럼 logstash-날짜형식으로 데이터가 잡히고 있음.

해당 인덱스가 잡히도록 패턴을 logstash-*으로 설정해주었음.


3-3. 로그 확인하기

Analytics의 Discover 접속
image


날짜 등의 필터를 걸어서 로그를 확인할 수 있게 되었다!
image


Loading script...