[부록]logstash vs filebeat

Han Hanju·2023년 7월 30일
0

Elasticsearch

목록 보기
10/10
post-thumbnail

Logstash는 로그 데이터 수집, 변환 및 전송을 할 수 있는 강력한 도구이지만, Filebeat가 제공하는 가벼움과 효율성 측면에서는 미치지 못합니다. 이 두 도구를 비교할 때 주요 차이점을 다시 간략하게 살펴보겠습니다.

  1. 자원 사용량: Logstash는 더 많은 메모리와 CPU를 소모하는데 반해, Filebeat는 최소한의 처리 엔진을 사용하여 성능에 더 민감한 환경에서 효율적으로 작동할 수 있습니다.
  2. 대체 가능 여부: Logstash는 로그 수집 및 전송 기능도 제공하지만, 로그 처리와 변환에 초점을 맞추기 때문에 간단한 로그 전송 작업에서는 Filebeat보다 성능이 떨어지거나 과도한 시스템 자원을 요구할 수 있습니다.

이러한 차이점 때문에 대부분의 경우, 간단한 로그 수집과 전송을 처리하기 위해 Filebeat를 사용하고 로그 처리를 위해 Logstash와 연동하는 것이 좋습니다. 이렇게 사용하는 이유는 로그 파이프라인에 대한 가벼운 및 확장성 있는 아키텍처를 제공하고, 전체 ELK(Elasticsearch, Logstash, Kibana) 스택을 사용하는 것보다 리소스를 더욱 효과적으로 관리할 수 있기 때문입니다.

결론적으로, Logstash를 사용하여 간단한 로그 수집 및 전송을 처리할 수는 있지만, 성능과 효율성이 중요한 고려 사항인 경우 Filebeat를 사용하는 것이 더 좋습니다. 따라서 두 도구를 결합하여 최상의 결과를 얻는 것이 좋습니다.

Logstash 실제 예제

실제로 여러 서비스 로그를 수집하고 처리해야 하는 상황을 가정하고, Logstash를 사용하는 예제를 살펴보겠습니다.

예를 들어, 웹 어플리케이션 서버(Apache), 데이터베이스 서버(MySQL 및 Redis), 그리고 캐싱 서버(Varnish)로 구성된 환경에서 로그를 수집하고 분석하려고 합니다.

이러한 경우 Logstash를 사용하여 각 서비스의 로그를 수집하고 정제하여 Elasticsearch에 저장할 수 있습니다.

  1. 로그 수집: Logstash는 여러 소스에서 로그를 수집할 수 있습니다. Apache, MySQL, Redis와 Varnish 로그를 가져올 수 있는 File input 플러그인을 사용할 것입니다.
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"
  }
}
  1. 로그 정제 및 구조화: 각 서비스 로그를 정제하고 필요한 정보만을 추출하여 구조화하기 위해 Logstash의 필터를 사용합니다. 여기서는 grok, date 및 mutate 필터를 사용해 Apache 로그의 User-Agent, 요청 URL 및 응답 시간 등의 데이터를 추출합니다.
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" ]
    }
  }
}
  1. 로그 전송: 마지막으로, 모든 로그를 구조화된 형식으로 Elasticsearch에 저장합니다.
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
  }
}

이 예제를 통해 Logstash를 사용하여 여러 서비스 로그를 수집, 정제 및 구조화한 후 Elasticsearch에 전송하는 방법을 확인할 수 있습니다. 이를 통해 각 로그의 정보를 효과적으로 추출하여 시스템 전반에 걸친 로깅 분석이 가능합니다.

profile
Data Analytics Engineer

0개의 댓글