시작하며

Logstash는 별도의 애플리케이션 작성 없이 데이터를 원하는 형태로 가공하여 ElasticSearch에 저장하는 데이터 전처리 도구이다. 파이프라인의 핵심 구성 요소와 자주 사용하는 플러그인 옵션을 Q&A 형식으로 정리한다.

Logstash 플러그인과 파이프라인 옵션

grok vs dissect 필터 플러그인

Q. filter 플러그인에서 grok과 dissect의 차이는?

A.

  • grok: grok 패턴을 사용하며 일반적인 정규식과 유사해 자유도가 높다.

    grok {
        match => {"message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] [ ]*\[%{DATA:id}\] %{IP:ip}
        %{NUMBER:port:int} \[%{LOGLEVEL:level}\] \- %{DATA:msg}"}
    }
    
  • dissect: 미리 지정된 간단한 패턴을 사용하므로 grok에 비해 자유도는 떨어지지만 더 빠른 처리가 가능하다.

    dissect {
        mapping => {"message" => "[%{timestamp}]%{?->}[%{id}] %{ip} %{+ip} %{port} [%{?level}] - %{}."}
    }
    
    • %{?->}: 공백을 하나의 필드로 만들어 무시하게 된다.

start_position vs sincedb_path

Q. 파이프라인 설정 파일의 input{} 필드에 있는 start_position 옵션과 sincedb_path 옵션의 역할 차이는?

A.

  • start_position: 읽기 시작하는 파일의 위치를 의미하며, 최초 한 번 실행될 때 적용된다.
  • sincedb_path: 이후 Logstash가 재실행되면 start_position이 아니라 sincedb_path에 기록된 위치부터 파일을 읽는다.

코덱 (Codec)

Q. 입력·출력 단계에서 사용되는 플러그인으로, 스트림으로 데이터의 인코딩·디코딩을 담당하는 것은?

A. **코덱(codec)**이다. 입력/출력/필터 플러그인과 달리 스트림 단위로 데이터의 인코딩 및 디코딩을 처리한다.

다중 파이프라인 (Multi-pipeline)

Q. 하나의 Logstash에서 여러 개의 파이프라인을 구성하는 다중 파이프라인의 실행 방법을 설명하라.

A.

  1. pipelines.yml 파일을 수정한다.
  2. 개별 파이프라인 설정 파일(.conf)을 여러 개 작성한다.
  3. Logstash를 -f 옵션 없이 실행한다.

정리하며

Logstash의 핵심은 파이프라인 설계이다. grok과 dissect는 각각 정규식 기반의 유연성과 패턴 기반의 처리 속도 사이의 트레이드오프를 가진다. 로그 구조가 단순하고 고정적이라면 dissect를, 복잡한 패턴이 필요하다면 grok을 선택하는 것이 좋다. 또한 sincedb_path를 활용하면 Logstash 재시작 시에도 데이터 중복 수집을 방지할 수 있다.