Logstash는 로그 데이터 수집, 변환 및 전송을 할 수 있는 강력한 도구이지만, Filebeat가 제공하는 가벼움과 효율성 측면에서는 미치지 못합니다. 이 두 도구를 비교할 때 주요 차이점을 다시 간략하게 살펴보겠습니다.
이러한 차이점 때문에 대부분의 경우, 간단한 로그 수집과 전송을 처리하기 위해 Filebeat를 사용하고 로그 처리를 위해 Logstash와 연동하는 것이 좋습니다. 이렇게 사용하는 이유는 로그 파이프라인에 대한 가벼운 및 확장성 있는 아키텍처를 제공하고, 전체 ELK(Elasticsearch, Logstash, Kibana) 스택을 사용하는 것보다 리소스를 더욱 효과적으로 관리할 수 있기 때문입니다.
결론적으로, Logstash를 사용하여 간단한 로그 수집 및 전송을 처리할 수는 있지만, 성능과 효율성이 중요한 고려 사항인 경우 Filebeat를 사용하는 것이 더 좋습니다. 따라서 두 도구를 결합하여 최상의 결과를 얻는 것이 좋습니다.
실제로 여러 서비스 로그를 수집하고 처리해야 하는 상황을 가정하고, Logstash를 사용하는 예제를 살펴보겠습니다.
예를 들어, 웹 어플리케이션 서버(Apache), 데이터베이스 서버(MySQL 및 Redis), 그리고 캐싱 서버(Varnish)로 구성된 환경에서 로그를 수집하고 분석하려고 합니다.
이러한 경우 Logstash를 사용하여 각 서비스의 로그를 수집하고 정제하여 Elasticsearch에 저장할 수 있습니다.
input {
file {
path => "/var/log/apache2/access.log"
type => "apache"
}
file {
path => "/var/log/mysql/mysql.log"
type => "mysql"
}
file {
path => "/var/log/redis/redis.log"
type => "redis"
}
file {
path => "/var/log/varnish/varnish.log"
type => "varnish"
}
}
filter {
if [type] == "apache" {
grok {
match => { "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|-)\" %{NONNEGINT:response} (?:%{NONNEGINT:bytes}|-) %{QS:referrer} %{QS:agent}" }
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
target => "@timestamp"
}
mutate {
remove_field => [ "timestamp" ]
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
}
이 예제를 통해 Logstash를 사용하여 여러 서비스 로그를 수집, 정제 및 구조화한 후 Elasticsearch에 전송하는 방법을 확인할 수 있습니다. 이를 통해 각 로그의 정보를 효과적으로 추출하여 시스템 전반에 걸친 로깅 분석이 가능합니다.