我正在尝试设置 filebeat,以便我有两个日志源,最终位于目标 Logstash 的不同索引中。所有涉及的服务(filebeat、logstash、elastic)版本均为 8.12.0。
我在麋鹿论坛上找到了这个问题,其解决方案是“您可以设置每个输入的索引”(如此处记录)。
但是,像这样设置我的输入部分似乎不起作用;数据似乎完全丢失了。这是我完整的 filebeat 配置:
filebeat.inputs:
- type: filestream
id: "filestream-id"
enabled: true
index: "index-id"
paths:
- /usr/share/filebeat/logs/*.log
fields_under_root: true
processors:
- dissect:
tokenizer: "/usr/share/filebeat/logs/%{service_name}.log"
field: "log.file.path"
target_prefix: ""
output.logstash:
hosts: [ "loghost:5044" ]
但是设置的
index-id
并没有出现在elk主机上。这是目标logstash的配置:
input {
beats {
port => 5044
codec => "json"
}
}
filter {
mutate {
remove_field => ["[event][original]"]
}
}
output {
elasticsearch {
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
hosts=> "${ELASTIC_HOSTS}"
user=> "${ELASTIC_USER}"
password=> "${ELASTIC_PASSWORD}"
cacert=> "certs/ca/ca.crt"
}
stdout {
codec => rubydebug
}
}
如果我将
index: ...
条目从 filebeat.inputs
部分移至 output.logstash
,一切都会正常;但我想最终在该主机上添加更多输入,这些输入最终应该出现在另一个索引中。
出了什么问题?
当您在 filebeat 中的 filesteam 输入上设置索引选项时,结果取决于输出类型。对于elasticsearch 输出,它设置写入的索引。对于其他输出类型,它在事件元数据中设置 raw_index 字段。如果您的文件流输入配置为
- type: filestream
id: my-filestream-id
enabled: true
paths:
- /tmp/foo*.txt
index: "someRandomName"
那么logstash输出接收到的事件将会有:
"@metadata" => {
"raw_index" => "someRandomName",
...
然后您可以在 Logstash 输出部分中将其与 sprintf 引用一起使用。