gpt4 book ai didi

date - Logstash:跨事件保持值(value)

转载 作者:行者123 更新时间:2023-12-04 20:39:31 25 4
gpt4 key购买 nike

我有一个日期在每个日志文件中只出现一次,我试图在匹配一次后将此日期添加到所有后续事件中,使其在某些方面就像一个全局变量。 (日期在文档顶部,我无法使用 multiline 或更改文件名或内容)

为此,我的方法是使用 grep过滤器 drop => false .

grok {
patterns_dir => "[...]"
match => [ "message", "%{DATELINE}" ]
tag_on_failure => [ ]
}
grep {
add_field => { "grepdate" => "%{mydate}" }
drop => false
}
date {
locale => "en"
timezone => "Europe/Paris"
match => [ "grepdate", "yyyyMMdd" ]
target => "grepdate"
}

正则表达式:
DATELINE (= Date: (?<mydate>[0-9]{8}))

我注意到的是 grepdate字段被正确添加到所有事件中 - 这就是我想要的 - 但该字段的值不是日期本身( %{mydate} 的值),而是实际的字符串 "%{mydate}" , 除非第一次实际匹配时(解析日志文件中的实际日期时, grepdate 字段包含正确的值)

我能做些什么来解决这个问题?

任何帮助是极大的赞赏。

编辑:

我现在正在尝试一种解决方案,其中包括使用 memorize插入。但是,我收到以下错误:

Cannot use more than 1 filter worker because the following plugins don't work with more than one worker: memorize



有没有办法使这个过滤器线程安全?

最佳答案

也许你应该使用官方 aggregate filter为此,因为 memorize不是官方的和 will not work with Logstash >2.0 .

它会是这样的:

# same as what you have now
grok {
patterns_dir => "[...]"
match => [ "message", "%{DATELINE}" ]
tag_on_failure => [ "not_date_line" ]

}
# add a fictional taskId field to correlate all lines
mutate {
add_field => { "taskId" => "all" }
}

# if we're processing the first line, remember the date
if "not_date_line" not in [tags] {
aggregate {
task_id => "%{taskId}"
code => "map['mydate'] = event['mydate']"
}
}
# if we're processing the next lines, add the date
else {
aggregate {
task_id => "%{taskId}"
code => "event['mydate'] = map['mydate']"
map_action => "update"
timeout => 0
}
}

您的所有事件都将有一个 mydate日期在第一条日志行上的字段。

关于date - Logstash:跨事件保持值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29258164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com