logstash 文件输出不适用于元数据字段
logstash file output not working with metadata fileds
我有以下管道,要求是,我需要将“指标”数据写入一个文件,将事件数据写入另一个文件。这个管道有两个问题。
文件输出不是每 30 秒创建一个“带时间戳的文件”,而是创建一个具有此名称的文件 output%{[@metadata][ts]}.csv
并继续附加数据。
CSV 输出,每 30 秒创建一个带有时间戳的新文件,但不知何故它会创建一个名为 output%{[@metadata][ts]}
的额外文件并继续将元信息附加到该文件.
有人可以指导我如何解决这个问题吗?
input {
beats {
port => 5045
}
}
filter {
ruby {
code => '
event.set("[@metadata][ts]", Time.now.to_i / 30)
event.set("[@metadata][suffix]", "output" + (Time.now.to_i / 30).to_s + ".csv")
'
}
}
filter {
metrics {
meter => [ "code" ]
add_tag => "metric"
clear_interval => 30
flush_interval => 30
}
}
output {
if "metric" in [tags] {
file {
flush_interval => 30
codec => line { format => "%{[code][count]} %{[code][count]}"}
path => "C:/lgstshop/local/csv/output%{[@metadata][ts]}.csv"
}
stdout {
codec => line {
format => "rate: %{[code][count]}"
}
}
}
file {
path => "output.log"
}
csv {
fields => [ "created", "level", "code"]
path => "C:/lgstshop/local/output%{[@metadata][ts]}.evt"
}
}
指标过滤器在管道中生成新事件。这些事件只会通过其后的过滤器。因此,度量事件没有 [@metadata][ts] 字段,因此不会替换输出部分中的 sprintf 引用。移动 ruby 过滤器,使其位于指标过滤器之后。
如果您不希望将指标发送到 csv,则用 if "metric" not in [tags] {
包装该输出或将其放在现有条件的 else 中。
我有以下管道,要求是,我需要将“指标”数据写入一个文件,将事件数据写入另一个文件。这个管道有两个问题。
文件输出不是每 30 秒创建一个“带时间戳的文件”,而是创建一个具有此名称的文件
output%{[@metadata][ts]}.csv
并继续附加数据。CSV 输出,每 30 秒创建一个带有时间戳的新文件,但不知何故它会创建一个名为
output%{[@metadata][ts]}
的额外文件并继续将元信息附加到该文件.
有人可以指导我如何解决这个问题吗?
input {
beats {
port => 5045
}
}
filter {
ruby {
code => '
event.set("[@metadata][ts]", Time.now.to_i / 30)
event.set("[@metadata][suffix]", "output" + (Time.now.to_i / 30).to_s + ".csv")
'
}
}
filter {
metrics {
meter => [ "code" ]
add_tag => "metric"
clear_interval => 30
flush_interval => 30
}
}
output {
if "metric" in [tags] {
file {
flush_interval => 30
codec => line { format => "%{[code][count]} %{[code][count]}"}
path => "C:/lgstshop/local/csv/output%{[@metadata][ts]}.csv"
}
stdout {
codec => line {
format => "rate: %{[code][count]}"
}
}
}
file {
path => "output.log"
}
csv {
fields => [ "created", "level", "code"]
path => "C:/lgstshop/local/output%{[@metadata][ts]}.evt"
}
}
指标过滤器在管道中生成新事件。这些事件只会通过其后的过滤器。因此,度量事件没有 [@metadata][ts] 字段,因此不会替换输出部分中的 sprintf 引用。移动 ruby 过滤器,使其位于指标过滤器之后。
如果您不希望将指标发送到 csv,则用 if "metric" not in [tags] {
包装该输出或将其放在现有条件的 else 中。