일반적으로 아래 구성처럼 Logstash는 beats한테서 로그를 전달받아 필터링 및 가공 과정을 거쳐 엘라스틱 서치로 전송한다.
Logstash는 beats한테서 로그를 수신하기 위해서는 beats 플러그인 설정을 해야하는데, beats 플러그인은 안전한 데이터 전송 방식을 제공하며, Beats가 보낸 데이터를 제대로 수신했는지 확인하는 응답방식도 사용한다고 한다.
- Beats → Logstash 전송
- Beats(Filebeat, Metricbeat 등)가 로그 데이터를 수집하여 Logstash의 beats 입력 플러그인으로 전송
- Logstash는 port 5044에서 수신 대기
- Logstash → Beats 응답 (ACK)
- Logstash가 데이터를 정상적으로 받으면 ACK (Acknowledgement, 확인 응답) 메시지를 Beats에게 보냄
- Beats는 ACK를 받으면 해당 로그를 전송 완료 처리하고 다음 데이터를 보냄
- 만약 ACK를 ?
- 네트워크 장애, Logstash 다운 등의 이유로 ACK를 못 받으면 Beats는 데이터를 다시 보내려고 시도
이로 인해 데이터 유실을 방지할 수 있음
- 네트워크 장애, 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와 같은 환경도 고려해볼만 할 것 같다.
'Kubernetes' 카테고리의 다른 글
Kubernetes환경에서 Filebeat + ELK를 활용한 Log Pipeline 구축 #4 Kibana편 (0) | 2025.03.24 |
---|---|
Kubernetes환경에서 Filebeat + ELK를 활용한 Log Pipeline 구축 #2 Filebeat편 (0) | 2025.03.19 |
Kubernetes환경에서 Filebeat + ELK를 활용한 Log Pipeline 구축 #1 Elasticsearch편 (0) | 2025.03.10 |
[NKS] ConfigMap을 활용한 사용자별 액세스 컨트롤 (0) | 2024.08.07 |
[NKS] IAM을 활용한 사용자별 액세스 컨트롤 (0) | 2024.08.07 |