본문 바로가기
Kubernetes

Kubernetes환경에서 Filebeat + ELK를 활용한 Log Pipeline 구축 #3 Logstash편

by beann 2025. 3. 20.

일반적으로 아래 구성처럼 Logstash는 beats한테서 로그를 전달받아 필터링 및 가공 과정을 거쳐 엘라스틱 서치로 전송한다.

Logstash는 beats한테서 로그를 수신하기 위해서는 beats 플러그인 설정을 해야하는데, beats 플러그인은 안전한 데이터 전송 방식을 제공하며, Beats가 보낸 데이터를 제대로 수신했는지 확인하는 응답방식도 사용한다고 한다.

 

  1. Beats → Logstash 전송
    1. Beats(Filebeat, Metricbeat 등)가 로그 데이터를 수집하여 Logstash의 beats 입력 플러그인으로 전송
    2. Logstash는 port 5044에서 수신 대기
  2. Logstash → Beats 응답 (ACK)
    1. Logstash가 데이터를 정상적으로 받으면 ACK (Acknowledgement, 확인 응답) 메시지를 Beats에게 보냄
    2. Beats는 ACK를 받으면 해당 로그를 전송 완료 처리하고 다음 데이터를 보냄
  3. 만약 ACK를 ?
    1. 네트워크 장애, Logstash 다운 등의 이유로 ACK를 못 받으면 Beats는 데이터를 다시 보내려고 시도
      이로 인해 데이터 유실을 방지할 수 있음

Logstash는 3가지 단계로 로그에 대한 처리를 진행하는데 아래와 같다.

예시: Filebeat로 수집된 Nginx 로그를 Logstash에서 구조화된 JSON 데이터로 변환 후 Elasticsearch로 저장

 

Logstash설정 예시


input {
  beats {
    port => 5044
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
    target => "@timestamp"
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "nginx-logs-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug } # 디버깅용 출력

 

1. 입력(input)

입력단계에서는 Beats한테서 전달받는 단계이다

input {

  beats {

    port => 5044

  }

}

 

2. 전처리(filter)

필터단계에서는 beats한테서 전달받은 로그를 필터링 또는 가공한다.

- grok플러그인을 통해 기존 nginx로그를 구조화된 필드로 변환

- date 필터로 timestamp 값을 표준화하여 @timestamp 필드에 저장

 

3. 출력(output)

아래처럼 변환된 JSON방식으로 엘라스틱 서치로 전송한다.

기존 nginx log:

192.168.1.1 - - [20/Mar/2025:10:30:45 +0000] "GET /index.html HTTP/1.1" 200 1024

 

Logstash를 통해 가공된 Nginx Log:

{
  "clientip": "192.168.1.1",
  "timestamp": "20/Mar/2025:10:30:45 +0000",
  "method": "GET",
  "url": "/index.html",
  "response": "200",
  "bytes": 1024,
  "@timestamp": "2025-03-20T10:30:45.000Z"
}

 

기존의 로깅 환경이라면 Elasticsearch만 설치하고 보관하는 방식이었다면, 이후 요구사항이 늘어남에 따라 중간에 필터링 할 수 있는 도구인 Logstash가 생겨났고 이후 다양한 Logging Stack중 많이 쓰이는 도구중 하나가 되었다.

만약 기본적인 로그만 쌓거나, 필터링 및 가공에 대한 요구사항이 없는 환경이라면 아래와 같이 Logstash를 제외하고, Beats -> Elasticsearch -> Kibana와 같은 환경도 고려해볼만 할 것 같다.