ELK Stack 설치 및 Filebeat를 사용한 Spring Boot 로깅 설정
Source: Dev.to
죄송합니다만, 번역하려는 전체 텍스트를 제공해 주시면 한국어로 번역해 드리겠습니다. 현재는 링크만 제공되어 있어 실제 내용을 확인할 수 없습니다. 텍스트를 복사해서 여기 붙여 주시면 바로 번역해 드리겠습니다.
시스템 준비
sudo apt update && sudo apt upgrade -y
sudo apt install apt-transport-https wget curl gnupg -y
Elastic 저장소 추가
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | \
sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] \
https://artifacts.elastic.co/packages/8.x/apt stable main" | \
sudo tee /etc/apt/sources.list.d/elastic-8.x.list
sudo apt update
ELK 스택 설치
Elasticsearch
sudo apt install elasticsearch -y
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
실행 중인지 확인합니다:
curl -k https://localhost:9200
Kibana
sudo apt install kibana -y
sudo systemctl enable kibana
sudo systemctl start kibana
외부 접근을 허용하도록 Kibana 설정을 편집합니다:
sudo nano /etc/kibana/kibana.yml
# change (or add) the line:
# server.host: "0.0.0.0"
필요한 포트를 열고 UI에 접근합니다:
sudo ufw allow 5601
http://YOUR_SERVER_IP:5601 를 브라우저에서 방문합니다.
Kibana 및 Elasticsearch 구성
-
Kibana용 등록 토큰 생성
sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana -
Kibana 인증 코드 가져오기
sudo /usr/share/kibana/bin/kibana-verification-code -
elastic사용자 비밀번호 재설정sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
Logstash
sudo apt install logstash -y
sudo systemctl enable logstash
sudo systemctl start logstash
Spring Boot 로그를 Logstash로 전송하는 방법
워크플로우
- Spring Boot가 로그를 파일에 기록합니다 (Logback).
- Filebeat가 로그 파일을 읽어들입니다.
- Filebeat가 로그를 Logstash(또는 직접 Elasticsearch)로 전달합니다.
- Logstash(선택 사항)가 로그를 파싱합니다.
- Elasticsearch가 로그를 저장합니다.
- Kibana가 로그를 시각화합니다.
Spring Boot Logback 설정
src/main/resources/에 logback-spring.xml 파일을 생성합니다:
%d{HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n
${LOG_DIR}/${APP_NAME}-app.log
${LOG_DIR}/${APP_NAME}.%d{yyyy-MM-dd}.gz
30
%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n
개발 머신과 JAR가 실행되는 VM 모두에 로그 디렉터리를 생성합니다:
sudo mkdir -p /var/log/taxes-backend
sudo chmod 777 /var/log/taxes-backend # 필요에 따라 권한을 조정하세요
Filebeat 설치 및 설정
sudo apt install filebeat -y
Filebeat 설정 파일을 편집합니다:
sudo nano /etc/filebeat/filebeat.yml
Spring Boot 로그 파일을 가리키도록 입력 섹션을 추가(또는 수정)합니다:
# ============================== Filebeat inputs ===============================
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/taxes-backend/taxes-backend-app.log
(필요에 따라 filebeat.yml의 나머지 부분도 편집하세요. 예: Logstash로 출력 설정 등.)
다음 단계
- Logstash 파이프라인 구성을 통해 들어오는 로그를 파싱합니다(예: Grok 사용).
- Filebeat 출력 설정을 하여 Logstash(
output.logstash:섹션)로 연결합니다. - Kibana 대시보드 생성을 통해 Spring Boot 로그를 시각화합니다.
이제 Filebeat → Logstash → Elasticsearch → Kibana를 통해 Spring Boot 로그가 전송되는 기능적인 ELK 스택이 구축되었습니다. 로그 기록을 즐기세요!
Filebeat 및 Logstash 구성 가이드
1. Filebeat 구성 (filebeat.yml)
# Set to true to enable config reloading
reload.enabled: false
# ======================= Elasticsearch template setting =======================
setup.template.settings:
index.number_of_shards: 1
# =================================== Kibana ================================
setup.kibana:
# ------------------------------ Logstash Output ----------------------------
output.logstash:
hosts: ["localhost:5044"]
# ================================= Processors ==============================
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
localhost:5044항목은 Filebeat가 로그를 어디로 전송할지 (Logstash 또는 Elasticsearch) 알려줍니다.
Filebeat 시작
sudo systemctl enable filebeat
sudo systemctl restart filebeat
sudo systemctl status filebeat
2. Logstash 파이프라인 구성
Logstash 구성 파일을 생성합니다. 예: springboot-logstash.conf.
sudo nano /etc/logstash/conf.d/springboot.conf
구성 파일 편집
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} \[%{DATA:thread}\] %{DATA:logger} - %{GREEDYDATA:msg}" }
}
date {
match => ["timestamp", "yyyy-MM-dd HH:mm:ss"]
timezone => "UTC"
}
mutate {
remove_field => ["timestamp"]
}
}
output {
elasticsearch {
hosts => ["https://localhost:9200"]
user => "elastic"
password => "ENTER_YOUR_ELASTIC_PASSWORD"
ssl_verification_mode => "none"
index => "springboot-%{+YYYY.MM.dd}"
}
}
Logstash 구성 구문 테스트
sudo /usr/share/logstash/bin/logstash --config.test_and_exit -f /etc/logstash/conf.d/springboot.conf
Logstash 시작
sudo systemctl restart logstash
인덱스 생성 확인
curl -k -u elastic:ENTER_YOUR_ELASTIC_PASSWORD "https://localhost:9200/_cat/indices?v"
3. Kibana에서 로그 보기
- Kibana를 엽니다.
- Stack Management → Index Patterns 로 이동합니다.
- 로그와 일치하는 인덱스 패턴을 생성합니다 (예:
springboot-logs-*). - Discover 로 이동하여 수집된 로그를 확인합니다.
- 로그 레벨, 서비스, 오류 등을 시각화하는 대시보드를 구축합니다.
ENTER_YOUR_ELASTIC_PASSWORD를 elastic 사용자에 대해 설정한 비밀번호로 교체하세요.