具有多个Logstash管道的Filebeat

时间:2019-07-19 19:17:17

标签: logstash filebeat

我已将Filebeat配置为在单个主机上观看多个不同的日志,例如Nginx和我的应用服务器。但是,据我了解,任何一个Beat中都不能有多个输出-因此我的filebeat.yml具有一个指向我的Logstash服务器的单个output.logstash指令。

Logstash是否具有管道路由的概念?我在Logstash服务器上配置了多个管道,但尚不清楚如何从Filebeat中利用它,例如我想将Nginx日志发送到Logstash管道以获取Nginx等。

或者,是否可以将Nginx的拍子路由到logstash:5044,将我的应用服务器的拍子路由到logstash:5045。

3 个答案:

答案 0 :(得分:0)

对于每个文件拍探矿者,您可以使用fields选项添加一个字段,logstash可以检查该字段以识别探矿者正在收集的数据类型。然后,在logstash中,您可以将流水线与流水线通信与distributor pattern一起使用,以将不同类型的数据发送到不同的流水线。

答案 1 :(得分:0)

您可以在文件信号输入中使用标签,并使用这些标签在logstash管道中进行过滤。

例如,将标签nginx添加到filebeat的nginx输入中,并将标签app-server添加到a​​ppbeat的应用服务器输入中,然后在logstash管道中使用这些标签来使用不同的过滤器和输出,这将是相同的管道,但是它将基于标记路由事件。

如果要将不同的日志发送到不同的端口,则需要运行Filebeat的另一个实例。

答案 2 :(得分:0)

您可以将标签概念用于多个日志文件

filebeat.yml

filebeat.inputs:
- type: log
  tags: [apache]
  paths:
    - "/home/ubuntu/data/apache.log"

- type: log
  tags: [gunicorn]
  paths:
    - "/home/ubuntu/data/gunicorn.log"

queue.mem:
  events: 4096
  flush.min_events: 512
  flush.timeout: 5s

output.logstash:
  hosts: ["****************:5047"]

conf.d / logstash.conf

input {
  beats {
    port => "5047"
    host => "0.0.0.0"
  }
}

filter {
  if "gunicorn" in [tags] {
    grok {
       match => {
         "message" => "%{USERNAME:u1} %{USERNAME:u2} \[%{HTTPDATE:http_date}\] \"%{DATA:http_verb} %{URIPATHPARAM:api} %{DATA:http_version}\" %{NUMBER:status_code} %{NUMBER:byte} \"%{DATA:external_api}\" \"%{GREEDYDATA:android_client}\""
         remove_field => ["message"]
       }
    }

    date {
      match => ["http_date", "dd/MMM/yyyy:HH:mm:ss XX"]
    }

    mutate {
      remove_field => ["agent"]
    }
  }

  else if "apache" in [tags] {
     grok {
       match => {
         "message" => "%{IPORHOST:client_ip} %{DATA:u1} %{DATA:u2} \[%{HTTPDATE:http_date}\] \"%{WORD:http_method} %{URIPATHPARAM:api} %{DATA:http_version}\" %{NUMBER:status_code} %{NUMBER:byte} \"%{DATA:external_api}\" \"%{GREEDYDATA:gd}\" \"%{DATA:u3}\""
         remove_field => ["message"]
       }
     }

    date {
      match => ["http_date", "dd/MMM/yyyy:HH:mm:ss +ssss"]
    }

    mutate {
      remove_field => ["agent"]
    }
   }
}

output {
  if "gunicorn" in [tags] {
    stdout { codec => rubydebug }
    elasticsearch {
      hosts => ["0.0.0.0:9200"]
      index => "gunicorn-sample-%{+YYYY.MM.dd}"
      }
  }
  else if "apache" in [tags] {
     stdout { codec => rubydebug }
     elasticsearch {
       hosts => ["0.0.0.0:9200"]
       index => "apache-sample-%{+YYYY.MM.dd}"
       }
    }
}