用于从日志消息中复制一些文本的 Logstash 过滤器
Logstash filter to copy some text from the log message
我目前正在登录一些这样的短信:
"Some text: some variable text"
"Some other text: some other variable text"
而且我需要将消息的可变部分复制到一个新字段,以便有两个像这样的新字段
"field1" : " some variable text"
"field2" : "some other variable text"
到目前为止,只能使用 filebeat 处理器将整个文本消息复制到一个新字段,使用 logstash 也是如此。我做了一些研究,我发现我可以使用条件语句,并使用 mutate 过滤器:
filter {
if "Some text" in [message] {
mutate { add_field =>{ "field1" => }}}
但我发现了如何将“一些可变文本”复制到新字段中。有人知道怎么做吗?
一种解决方案是直接使用 grok 过滤器,如下所示:
filter{
grok {
match => {
"message" => "^Some text: %{GREEDYDATA:field1}"
}
}
grok {
match => {
"message" => "^Some other text: %{GREEDYDATA:field2}"
}
}
}
优点是这比 if 条件更具可读性和更易于维护。
您可以更改 grok 以在一行中处理所有情况:
filter{
grok {
match => {
"message" => "^(Some text: %{GREEDYDATA:field1}|Some other text: %{GREEDYDATA:field2})"
}
}
}
我目前正在登录一些这样的短信:
"Some text: some variable text"
"Some other text: some other variable text"
而且我需要将消息的可变部分复制到一个新字段,以便有两个像这样的新字段
"field1" : " some variable text"
"field2" : "some other variable text"
到目前为止,只能使用 filebeat 处理器将整个文本消息复制到一个新字段,使用 logstash 也是如此。我做了一些研究,我发现我可以使用条件语句,并使用 mutate 过滤器:
filter {
if "Some text" in [message] {
mutate { add_field =>{ "field1" => }}}
但我发现了如何将“一些可变文本”复制到新字段中。有人知道怎么做吗?
一种解决方案是直接使用 grok 过滤器,如下所示:
filter{
grok {
match => {
"message" => "^Some text: %{GREEDYDATA:field1}"
}
}
grok {
match => {
"message" => "^Some other text: %{GREEDYDATA:field2}"
}
}
}
优点是这比 if 条件更具可读性和更易于维护。
您可以更改 grok 以在一行中处理所有情况:
filter{
grok {
match => {
"message" => "^(Some text: %{GREEDYDATA:field1}|Some other text: %{GREEDYDATA:field2})"
}
}
}