我已将Filebeat配置为在单个主机上观看多个不同的日志,例如Nginx和我的应用服务器。但是,据我了解,任何一个Beat中都不能有多个输出-因此我的filebeat.yml具有一个指向我的Logstash服务器的单个output.logstash指令。
Logstash是否具有管道路由的概念?我在Logstash服务器上配置了多个管道,但尚不清楚如何从Filebeat中利用它,例如我想将Nginx日志发送到Logstash管道以获取Nginx等。
或者,是否可以将Nginx的拍子路由到logstash:5044,将我的应用服务器的拍子路由到logstash:5045。
答案 0 :(得分:0)
对于每个文件拍探矿者,您可以使用fields选项添加一个字段,logstash可以检查该字段以识别探矿者正在收集的数据类型。然后,在logstash中,您可以将流水线与流水线通信与distributor pattern一起使用,以将不同类型的数据发送到不同的流水线。
答案 1 :(得分:0)
您可以在文件信号输入中使用标签,并使用这些标签在logstash管道中进行过滤。
例如,将标签nginx
添加到filebeat的nginx输入中,并将标签app-server
添加到appbeat的应用服务器输入中,然后在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}"
}
}
}