백엔드

[ELK] Logstash 핵심 요약 및 설정법

SparkIT 2025. 2. 8. 20:04

Logstash란?

Logstash는 로그를  수집하고 변환하는 데이터 처리 파이프라인입니다.

 

 

Logstash 설정법

기본적으로 logstash 관련 설정은 logstash.conf 파일을 통해 관리할 수 있습니다. 몇 가지 예시를 통해 logstash를 설정해봅시다.

input

  • filebeat로부터 데이터 전송받을 때
input {
  beats {
    port => 5044 # logstash 포트
  }
}
  • logstash에서 직접 데이터 수집할 때
input {
  file {
    path => "데이터 경로"

    codec => multiline { # 멀티라인(줄 바뀌어가며 기록된 로그)을 인식하기 위할 경우 
      pattern => "^{"
      negate => true
      what => "previous"
    }
  }
}

 

filter

  • JSON 형식의 데이터를 전달받고, 여기서 message라는 key값이 JSON 형식을 띄고 있을 때(중첩된 JSON) 이를 파싱하는 방법
filter {
    json {
    source => "message"
  }

  mutate {
    remove_field => ["message"]
  }
}

예를 들어 logstash가 아래와 같은 로그를 변환한다면?

{ 
  "level": "info", 
  "message": { 
    "status": "success", 
    "detail": "This is test" 
  }
}

위 JSON의 message key값은 파싱될 것이고, 원래 message key값은 remove 되어 최종적으로 다음과 같은 형태가 됩니다.

{ 
  "level": "info",
  "status": "success",
  "detail": "This is test"
}

 

output

logstash에서는 보통 elasticsearch로 데이터를 전송합니다. 아래는 간단한 예시입니다.

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"] # elasticsearch 주소(도커 컨테이너로 실행한다면 엘라스틱서치 컨테이너명 그대로 사용 가능)
    index => "auth-logs-%{+YYYY.MM.dd}" # 인덱스 직접 설정
  }
  stdout {
    codec => rubydebug # 읽기 쉽게 포맷된 JSON 형태로 로그 출력
  }
}