ELK스택의 대표 수집 도구 Logstash(2012 출시)와 OpenSearch의 수집 도구 Data Prepper(2021 출시)의 비교
비교 항목
- High-level diagram
- Overview
- Components
- Usage
High-level diagram
Logstash
Data Prepper
Overview
Logstash
Logstash는 다양한 소스에서 데이터를 수집하고 변환 후 원하는 '저장소'로 보내는 무료 개방형 서버 측 데이터 처리 파이프라인
- 수많은 파이프라인 패턴을 구축할 수 있도록 해주는 수많은 전투 테스트를 거친 수집 프레임워크. 한 파이프라인의 출력을 다른 파이프라인으로 연결할 수 있는 옵션과 함께 많은 입력, 필터, 출력을 허용
- HTTP/TCP/CSV에서 GCS/AWS S3/Elasticsearch에 이르기까지 다양한 데이터 소스에서 읽고 쓸 수 있는 방대한 입력 및 출력 플러그인 카탈로그 존재
- 내구성 측면에서 Logstash는 전송할 수 없는 요청을 일시적으로 버퍼링하는 영구 큐(Persistent Queue)와 수집에 실패한 문서를 처리하기 위한 데드 레터 큐(Dead Letter Queue) 제공
Data Prepper
Data Prepper는 다운스트림 분석 및 시각화를 위해 데이터를 필터링, 보강, 변환, 정규화 및 집계할 수 있는 서버 측 데이터 수집기
- OpenSearch의 공식 수집 도구로써 소스, 버퍼, 프로세서, 싱크와 같은 유사한 개념을 사용하여 하나의 소스에서 읽고 여러 데이터 싱크 가능하게 함
- 소스/프로세서/버퍼 카탈로그는 Logstash에 비해 제한적이지만 Logstash configuration 파일의 실행을 지원하며(실행 가능한 구성 제한적) 로그 및 트레이스를 위한 OpenTelemetry와의 통합 지원
- OpenTelemetry 수집기를 활용하는 OpenSearch 분산 추적(distributed tracing)지원 제공 (Logstash는 미지원)
Components
Logstash
Input plugins (총 56개)
다양한 소스로부터 문서를 수집할 수 있게 해주는 데이터 input entrypoint
azure_event_hubs | google_cloud_storage | kinesis | snmptrap |
beats | google_pubsub | log4j | sqlite |
cloudwatch | graphite | lumberjack | sqs |
couchdb_changes | heartbeat | meetup | stdin |
dead_letter_queue | http | pipe | stomp |
elastic_agent | http_poller | puppet_facter | syslog |
elastic_serverless_forwarder | imap | rabbitmq | tcp |
elasticsearch | irc | redis | |
exec | java_generator | relp | udp |
file | java_stdin | rss | unix |
ganglia | jdbc | s3 | varnishlog |
gelf | jms | s3-sns-sqs | websocket |
generator | jmx | salesforce | wmi |
github | kafka | snmp | xmpp |
Filter plugins (총 47개)
선택 사항이며, 필드 제거와 같은 간단한 작업부터 사용자 정의 루비 코드 허용에 이르기까지 Logstash가 데이터 처리를 할 수 있게 해줌
age | drop | json | syslog_pri |
aggregate | elapsed | json_encode |
threats_classifier
|
alter | elasticsearch | kv | throttle |
bytes | environment | memcached | tld |
cidr | extractnumbers | metricize | translate |
cipher | fingerprint | metrics | truncate |
clone | geoip | mutate | urldecode |
csv | grok | prune | useragent |
date | http | range | uuid |
de_dot | i18n | ruby |
wurfl_device_detection
|
dissect | java_uuid | sleep | xml |
dns | jdbc_static | split |
Output plugins (57개)
파이프라인의 끝. 하나 또는 여러 개 정의 필요
boundary | google_bigquery | metriccatcher | sns |
circonus | google_cloud_storage | mongodb | solr_http |
cloudwatch | google_pubsub | nagios | sqs |
csv | graphite | nagios_nsca | statsd |
datadog | graphtastic | opentsdb | stdout |
datadog_metrics | http | pagerduty | stomp |
dynatrace | influxdb | pipe | syslog |
elastic_app_search | irc | rabbitmq | tcp |
elastic_workplace_search | java_stdout | redis | timber |
elasticsearch | juggernaut | redmine | udp |
kafka | riak | webhdfs | |
exec | librato | riemann | websocket |
file | loggly | s3 | xmpp |
ganglia | lumberjack | sink | zabbix |
gelf |
Persistent Queue (PQ)
Logstash가 데이터 손실을 방지하고 이벤트를 디스크에 저장하여 재시작 후 복구 가능하며 출력에서 처리할 수 없는 메시지 버스트 흡수 가능.
이벤트가 메모리에서 처리되기 때문에 기본적으로 비활성화 되어있는 기능으로, 활성화 시 수집 속도 느려짐
Dead Letter Queue (DLQ)
코드 400 또는 404로 수집에 실패한 문서에 특정 파이프라인(입력-필터-출력)을 설정하여 문제를 해결한 다음 다시 수집 시도 가능.
데이터 손실 없이 문서의 오류를 수정할 수 있기 때문에 매우 편리하지만 기본적으로 비활성화 되어있으며 Elasticsearch output에서만 지원
Data Prepper
Source (5개)
http_source |
otel_metrics_source
|
otel_trace_source source
|
s3 source |
otel_logs_source
|
Logstash에 비해 사용 가능한 소스가 훨씬 적으며, Logstash의 Kafka, JDBC, Syslog 및 FIlebeat 입력 소스 사용 불가.
Fluentd와 같은 대체 로그 수집기로 s3, http_source 소스와 함께 사용 가능
Buffer
이벤트를 누적하며 사용자 지정 버퍼를 만들기로 결정한 경우 메모리 또는 디스크 사용 가능하지만 현재 in-memory bounded blocking buffer만 사용 가능. s3 버킷을 통해 로그를 소비 시 Data Prepper 내부에서 버퍼링 안할 수 있음
Processor
Logstash 필터와 동일한 목적을 수행하며 이벤트 데이터를 필터링, 변환, 보강하는 기능 제공
사용 가능 filter/processor 비교
일반적으로 Logstash의 기능이 더 강하지만, Data Prepper에는 OpenTelemetry 및 이상 징후 탐색 프로세서(anomaly detection processors) 사용 가능. 이벤트가 사용해야 하는 싱크를 결정하는 조건을 정의하는 데 사용할 수 있는 "routes" 프로세서도 존재.
SInk (4개)
Data Prepper가 데이터를 쓰는 위치를 정의
file sink |
OpenSearch sink
|
pipeline sink |
stdout sink |
Dead Letter Queue (DLQ)
실패한 문서를 특수 형식의 JSON 배열로 s3 버킷에 저장 가능
dlq-v${version}-${pipelineName}-${pluginId}-${timestampIso8601}-${uniqueId}
현재 s3 소스에서만 사용 가능
Usage
아래 로그 파일을 읽을 때 Logstash와 Data Prepper usage 비교
[2023-05-15 08:22:35][INFO][192.168.1.10] – User ‘gustavo llermaly’ successfully logged in.
[2023-05-15 08:23:05][INFO][192.168.1.10] – User ‘gustavo llermaly’ visited ‘/my-account’.
[2023-05-15 08:24:30][ERROR][192.168.1.10] – System crashed while user ‘gustavo llermaly’ was active.
Logstash
일반적으로 호스트에 FileBeat 설치해 로그 파일을 읽은 다음 Logstash로 전송 (file input 플러그인 사용해 직접 읽기 가능)
Data Prepper
Logstash Flow와 유사하지만 데이터 수집기로 Filebeat를 사용하는 대신, HTTP 소스를 사용해 로그를 Data Prepper로 전송하는 FluentBit 사용
Conclusion
- Logstash가 더 많은 플러그인과 다중 필터 입출력을 수행할 수 있는 기능으로 더 많은 유연성 제공
- Logstash는 더 강력한 dead letter queue와 persistent queue 시스템 갖춤
- Data Prepper는 로그와 트레이싱을 위한 도구를 제공에 초점을 맞춤
- Data Prepper는 이상 징후 탐색 프로세서(anomaly detection processor)와 OpenTelemetry 통합을 위한 APM 지원
- Data Prepper는 부분적으로 Logstash 파일 사용 지원
- OpenSearch 사용 시 Data Prepper는 Apache 2.0 오픈 소스 라이선스에 따라 계속 개발되고 있어 OpenSearch와의 호환 보장되지만 Logstash의 경우 7.16.2 이상의 버전 사용 불가
이미 Logstash 사용중인 사용자들은 전환 전 Data Prepper에 더 많은 Logstash기능이 나타날 때 까지 기다리는게 좋으나, 새로 시작하는 사용자는 Data Prepper가 OpenSearch와 장기적으로 호환이 가능하니 고려 필요
출처: https://opster.com/guides/elasticsearch/data-architecture/data-prepper-vs-logstash/
'OpenSearch' 카테고리의 다른 글
K8S OpenSearch 클러스터 구축 (0) | 2023.11.03 |
---|