본문 바로가기
Programming/DevOps, Tools

ELK 스택으로 구축하는 로그 수집, 시각화

by kghworks 2024. 7. 24.

ELK Stack (Elasticsearch + Logstash + Kibana)

 

목차

  • 모니터링 방법과 ELK 스택
  • 구축해 보기

모니터링 방법과 ELK 스택

 

 

애플리케이션은 여러대지만 개발자는 한명이다

 

어제 8시 즈음 회원 서버 로그 좀 봐볼까?
(회원 서버만 10대인데요?)

 

 애플리케이션이 많아질수록 개발자 (관리자)가 조회해야 하는 애플리케이션 관련 데이터가 급격히 늘어난다. metric, 로그 데이터와 같은 것들이다. 애플리케이션이 한 개이고, 레플리카도 하나라면 직접 서버에 접속해 로그 파일을 추적해 보면 되지만, 여러 대인 상황에서는 쉽지 않다. APM (Application Performance Monitoring) 솔루션을 사용하면 애플리케이션의 실시간 모니터링이 가능하다.

 

 성능 관련 데이터는 실시간에 가깝게 조회되어야 하는 데이터지만, 로그나 사용자 추적 데이터 (히스토리, 페이지 이동 이력 등)는 성격이 다르다. 실시간에 가깝지 않아도 되며, 나중에 시각화되어 개발자 (관리자)의 입맛에 맞게 데이터를 확인할 수 있어야 된다.

 

 이때 데이터들을 집중 저장소에 모아두면 조회하기 편하지 않을까?라는 발상으로 DBMS와 같은 저장소에 저장하는 것이 방법이 될 수 있다. 실무에서도 사용자 히스토리 데이터들은 별도의 히스토리 전용 테이블을 생성해서 저장해두곤 한다. 이런 데이터들은 조회 시기도 불분명하고, 잦지도 않아 DBMS에 적재하는 것만으로 큰 불편함은 없다. 데이터가 시각화될 필요가 딱히 없다.

DBMS에서 관리되는 N대의 애플리케이션 데이터

 

 

 그러나 어떤 데이터들을 시각화해야 할 수 있고, 빠르게 조회가 가능하고 쉽게 접근할 수 있어야 한다.  (HTTP 접근 로그, 로그 레벨(유형) 별 개수, 조회) 이에 적합한 오픈소스로 ELK 스택이 있다.

ELK Stack (Elasticsearch + Logstash + Kibana)

 

 

  1. 애플리케이션 로그들을 Logstash 파이프라인으로 처리하여
  2. Elasticsearch 저장소로 저장 (색인)하면
  3. Kibana를 통해 보기 좋게 확인한다.

 

 


구축해 보기

ELK 스택을 위해서는 Java가 필요하다.

 

환경

  • OS : Mac OS
  • Elasticsearch 8.14.3
  • Kibana 8.14
  • Logstash 8.14
  • Java 17
  • Spring Boot 3.3

 

구축 순서

  1. Elasticsearch, Kibana, Logstash 설치
  2. Logstash 파이프라인 설정
  3. Spring Boot와 Logstash 연동
  4. Kibana에서 Dataview 생성, 확인

 

Step 1. Elasticsearch 설치 & 실행

curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.3-darwin-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.3-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c - 
tar -xzf elasticsearch-8.14.3-darwin-x86_64.tar.gz
cd elasticsearch-8.14.3/

## elasticsearch 실행
./bin/elasticsearch

 

처음 실행하면 각 정보들이 로그에 남는다. elastic user의 비밀번호는 따로 메모해 두거나 EXPORT 해주자.

ES 최초 실행시 로그

 

 

Elasticsearch의 기본 포트는 9200으로, 계정 정보 (ID : elastic, PWD : 최초 실행 시 elatic user의 비밀번호)로 로그인해 보면

로그인에 대한 정상 응답

 

만일 이 포스팅처럼 모두 localhost에서 진행할 예정이면 xpack 관련 설정을 모두 false로 수정한다. (elasticsearch.yml)

 

Step 2. Kibana 설치 & 실행

curl -O https://artifacts.elastic.co/downloads/kibana/kibana-8.14.3-darwin-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/kibana/kibana-8.14.3-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c - 
tar -xzf kibana-8.14.3-darwin-x86_64.tar.gz
cd kibana-8.14.3/ 

## Kibana 실행
./bin/kibana

 

Kibana의 기본 포트는 5601이다. 접속해서 나의 elastic 계정 정보로 로그인한다.

 

5601 포트로 접속한 키바나 최초 화면

 

 이제 Elasticsearch 저장소와 Kibana가 연동되었다. 이제 Logstash 파이프라인으로 데이터를 보내서 Kibana에서 확인해 보자.

 

Step 3. Logstash 설치 & 실행

https://www.elastic.co/kr/downloads/logstash 

 

Download Logstash Free | Get Started Now

Download Logstash or the complete Elastic Stack (formerly ELK stack) for free and start collecting, searching, and analyzing your data with Elastic in minutes....

www.elastic.co

위 링크에서 OS에 맞게 다운로드 후 압축을 풀어준다.

tar -xzf logstash-8.14.3-darwin-x86_64.tar.gz
cd /logstash-8.14.3

 

파이프라인으로 이벤트를 발행해 보자

bin/logstash -e 'input { stdin { } } output { stdout {} }'

## ... (실행 로그 생략)
hello world!

"hello world!" 이벤트 발행시 응답

 

Step 4. Spring Boot에 Logstash 연동

logstash-logback-encoder 라이브러리가 필요하다.

dependencies {
    implementation("net.logstash.logback:logstash-logback-encoder:7.4")
}

 

logback.xml 설정에 Logstash 인코더를 통해 로깅할 수 있게 추가해 준다.

<!--logback.xml-->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>127.0.0.1:5001</destination>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <customFields>{"app_name":"spring_boot_app_2"}</customFields>
        </encoder>
    </appender>

<root level="WARN">
    <appender-ref ref="LOGSTASH" />
</root>

 

 customFields 태그를 활용해 데이터의 필드를 추가할 수 있다. 나는 app_name을 넣어주었다. 다름 애플리케이션 설정에서는 또다른 이름을 부여해주면 키바나에서 로그 확인 시 어떤 애플리케이션의 데이터인지 조회할 수 있다.

Step 5. Logstash 파이프라인 포트 오픈

Logstash가 파이프라인을 통해 SpringBoot의 로그를 수집할 수 있도록 tcp 포트를 설정해주어야 한다.

cd /logstash-8.14.3/config
vi logstash.conf

 

logstash.conf에서 설정해 줄 수 있다. (없으면 만들자)

input {
  tcp {
    port => 5001 # 수집하는 listen port
    codec => json_lines
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"] # Elasticsearch 저장소 주소
    index => "spring_boot_elk" # 파이프라인으로 수집하는 데이터의 인덱스
    user => "elastic"
    password => {elastic_pwd}
  }
}

 

파이프라인 설정에 내 컨피그를 등록해주어야 한다. pipeline.yml을 수정해 준다.

- pipeline.id: from_springboot
  queue.type: persisted
  path.config: config/logstash.conf

 

Step 6. 키바나에서 로그 확인

키바나에서 Logstash로 들어온 데이터의 인덱스 spring_boot_elk에 대한 데이터를 조회할 수 있는 뷰를 만들어준다.

Kibana Discover 메뉴
Data view 생성

 

로그 데이터 조회 화면

 이제 위처럼 로그를 확인할 수 있다. 위 화면은 KQL (Kibana Query Language)을 사용해 데이터를 볼 수 있는 간단한 화면이다. Kibana 문서를 통해 여러 가지 설정, 질의를 해보면 입맛에 맞게 데이터를 조회 확인 가능하다. 


참고

https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html

 

Quick start guide | Elasticsearch Guide [8.14] | Elastic

If you’re interested in using Elasticsearch with Python, check out Elastic Search Labs. This is the best place to explore AI-powered search use cases, such as working with embeddings, vector search, and retrieval augmented generation (RAG).

www.elastic.co

https://www.elastic.co/guide/en/kibana/current/index.html

 

Kibana Guide [8.14] | Elastic

Observability Learn how to monitor logs, metrics, and traces.

www.elastic.co

https://www.elastic.co/guide/en/logstash/current/getting-started-with-logstash.html

 

Getting Started with Logstash | Logstash Reference [8.14] | Elastic

Bundled JDK Logstash offers architecture-specific downloads that include Adoptium Eclipse Temurin 17, the latest long term support (LTS) release of the JDK. Use the LS_JAVA_HOME environment variable if you want to use a JDK other than the version that is b

www.elastic.co

https://github.com/logfellow/logstash-logback-encoder

 

GitHub - logfellow/logstash-logback-encoder: Logback JSON encoder and appenders

Logback JSON encoder and appenders. Contribute to logfellow/logstash-logback-encoder development by creating an account on GitHub.

github.com

 

댓글