FileBeat를 활용해 로그 전송 (Loggin - 3)

2025. 11. 22. 14:22·Infra/LogBack

 

 

로그를 시각화하고 중앙에서 모니터링하려는 목적에서 Elasticsearch, Kibana을 사용한 로그 수집 및 시각화 시스템을 구축하려고 한다. 이를 위해, Spring 서버에서 생성된 로그를 통일화하여 ELK 시스템에 전송하는 두 가지 방법을 고려하였다.

 

 

방법 1: Spring → Logstash TCP 직결

 

  • Spring 애플리케이션에서 생성된 로그를 Logback을 사용하여 직접 TCP를 통해 Logstash로 전송하고, Logstash는 해당 로그를 받아 Elasticsearch에 삽입하는 방식
  • 구성:
    1. Spring에서 생성된 로그는 logback.xml 또는 logback-spring.xml에서 설정된대로 TCP를 통해 Logstash에 전달
    2. Logstash는 TCP로 받은 로그를 처리하고, 이를 JSON 형식으로 변환한 후 Elasticsearch에 전송
    3. Kibana는 Elasticsearch의 로그 데이터를 시각화하여 대시보드로 제공
  • 장점:
    • 실시간 처리: 로그가 생성되면 즉시 Logstash를 통해 Elasticsearch로 전송되어 빠르게 시각화 가능합니다.
    • 중앙 집중식 처리: 모든 로그가 Logstash를 거쳐 Elasticsearch로 집합되므로, 로그 전처리 및 변환이 용이합니다.
  • 단점:
    • Spring 애플리케이션의 부하: TCP 전송을 직접 처리하게 되면 Spring 애플리케이션의 성능에 어느 정도 영향을 끼칠 수 있다.
    • Logstash 의존성: Logstash가 항상 온라인 상태여야 하며, 장애가 발생하면 로그 전송에 차질이 생길 수 있다.

 

 

 

방법 2 : Spring → 파일(JSON) → 라즈베리에서 수집 (Filebeat/Fluent Bit)

 

  • Spring 애플리케이션에서 로그를 파일로 기록하고, 이 파일을 Filebeat 또는 Fluent Bit와 같은 경량 로그 수집기가 Elasticsearch로 전송하는 방식
  • 구성:
    1. Spring 애플리케이션은 JSON 형식으로 로컬에 로그를 기록
    2. Filebeat 또는 Fluent Bit를 사용해 파일을 주기적으로 모니터링하고, 변경 사항이 발생하면 해당 로그 파일을 읽어 Elasticsearch로 전송
    3. Kibana는 Elasticsearch의 로그 데이터를 시각화하여 대시보드로 제공

 

 

 

방법 2 선택 이유

1. MSA (Microservice Architecture) 확장에 유리

  • MSA 환경에서는 서비스가 계속해서 추가되고 변경되어 새로운 서비스가 추가될 때마다 동일한 로그 수집 방식을 유지하는 것이 중요
  • 방법 2에서는 Spring 애플리케이션이 로그를 로컬 파일로 기록하고, Filebeat 또는 Fluent Bit가 해당 파일을 수집하여 Elasticsearch로 전송하기 때문에, 새로운 서비스가 추가되어도 기존의 로그 수집 패턴을 그대로 사용할 수 있다.
  • 모든 서비스가 동일한 경로를 사용하도록 맞추면, 수집기는 해당 경로에서 모든 로그를 자동으로 수집

 

2. 네트워크 장애에 강한 안정성

  • 로그를 로컬 파일에 저장하고, Filebeat나 Fluent Bit가 이를 모니터링하는 방식은 네트워크가 일시적으로 끊어져도 로그를 잃지 않도록 버퍼링 및 재전송 기능을 제공
  • Elasticsearch나 네트워크가 잠시 멈추더라도, 수집기는 로컬에 저장된 로그를 일시적으로 버퍼링한 후, 네트워크가 복구되면 자동으로 재전송하므로 로그 유실을 최소화하는 데 매우 효과적

 

3. 서비스의 독립성과 유연성 증가

  • Spring 애플리케이션은 로컬 파일에 로그를 기록하고, 로그를 수집기가 가져가서 전송하는 방식은 비동기적으로 이뤄지므로 각 서비스가 독립적으로 로그를 처리
  • 각 서비스는 로컬 파일 시스템만 관리하면 되기 때문에 다른 서비스와의 종속성을 줄이고, 독립적인 로그 관리가 가능

 

 

FileBeat 설치

https://www.elastic.co/kr/downloads/beats/filebeat

 

Download Filebeat | Elastic

Download Filebeat, the open source data shipper for log file data that sends logs to Logstash for enrichment and Elasticsearch for storage and analysis.

www.elastic.co

 

 

 

 

 

AWS에 FileBeat 설치 후 코드

filebeat.yml 파일

filebeat.inputs:
  - type: filestream
    id: info-logs
    enabled: true
    paths:
      - C:/app/logs/info/application-info.log
    fields:
      log_level: info
    fields_under_root: true
    parsers:
      - ndjson:
          target: ""
          add_error_key: true


  - type: filestream
    id: warn-logs
    enabled: true
    paths:
      - C:/app/logs/warn/application-warn.log
    fields:
      log_level: warn
    fields_under_root: true
    parsers:
      - ndjson:
          target: ""
          add_error_key: true


  - type: filestream
    id: error-logs
    enabled: true
    paths:
      - C:/app/logs/error/application-error.log
    fields:
      log_level: error
    fields_under_root: true
    parsers:
      - ndjson:
          target: ""
          add_error_key: true

setup.ilm.enabled: false
setup.template.enabled: false
setup.template.name: "spring-logs"
setup.template.pattern: "spring-logs-*"


output.elasticsearch:
  hosts: ["http://:9200"]
  index: "spring-logs-%{+yyyy.MM.dd}"

 

첫 번째 테스트 명령 입력 시 Config OK가 나온다면 통과

./filebeat.exe test config

 

두 번째 테스트 명령 입력 시 

./filebeat.exe test output

 

이런 결과가 나오면 통과

  parse url... OK
  connection...
    parse host... OK
    dns lookup... OK
    addresses: xxx.xxx.xxx.xxx
    dial up... OK
  TLS... WARN secure connection disabled
  talk to server... OK
  version: 8.13.4

 

 

 

윈도우 백그라운드로 filebeat 실행 명령어

Start-Process -FilePath "C:\Users\Desktop\filebeat\filebeat.exe" `
  -ArgumentList "-c", "filebeat.yml" `
  -WindowStyle Hidden

 

 

 

로그가 ELK로 전송이 되었다면 인덱스가 생성 되었는지 명령어로 확인 가능

curl "http://localhost:9200/_cat/indices?v" | grep spring

 

인덱스 생성 결과

 

 

'Infra > LogBack' 카테고리의 다른 글

라즈베리파이에 Loki + Grafana로 로그 수집 시스템 구축하기  (0) 2025.12.22
Spring Boot + Logback 구조적 JSON 로그 만들기 (Logging - 2)  (0) 2025.11.29
스프링 로그 분석 환경 구축 Elasticsearch + Kibana 설치 (Logging - 1)  (0) 2025.11.21
'Infra/LogBack' 카테고리의 다른 글
  • 라즈베리파이에 Loki + Grafana로 로그 수집 시스템 구축하기
  • Spring Boot + Logback 구조적 JSON 로그 만들기 (Logging - 2)
  • 스프링 로그 분석 환경 구축 Elasticsearch + Kibana 설치 (Logging - 1)
kimfishes
kimfishes
kimfishes 님의 블로그 입니다.
  • kimfishes
    kimfishes 님의 블로그
    kimfishes
  • 전체
    오늘
    어제
    • 전체 (18) N
      • Infra (5)
        • AWS (0)
        • LogBack (4)
      • Spring Boot (13) N
        • LLM (4) N
      • 일상 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ELK
    스프링 알림 시스템
    분산 락
    pgvector
    Spring boot
    Pre-Signed URL
    loging
    ollama
    Discord 알림 연동
    spring ai
    로깅
    traceId
    실시간 알림 시스템
    UUID v7
    cache stampede
    promtail
    LLM
    Redis
    Qdrant
    캐시 스탬피드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
kimfishes
FileBeat를 활용해 로그 전송 (Loggin - 3)
상단으로

티스토리툴바