你如何解析 grok 中的文本
how do you parse text in grok
我需要使用 grok 从此路径捕获两个变量:
/opt/data/app_log/server101.log
server=needs to be anything after the last forward slash before the dot (in this case server101)
index=needs to be the text between the last two forward slashes (in this case app_log)
知道如何在 grok 中做到这一点吗?
grok {
patterns_dir => ["/pattern"]
match =>{path =>"%{WORD:dir1}\/%{WORD:dir2}\/%{WORD:index_name}\/%{WORD:server}\.%{WORD:file_type}"}
match => {"message" => "%{TIMESTAMP_ISO8601:timestamp},%{NUMBER:Num_field} %{WORD:error_level} %{GREEDYDATA:origin}, %{WORD:logger} - %{GREEDYDATA:message}"}
}
最简单的解决方案是
/%{DATA:col1}/%{DATA:col2}/%{DATA:index}/%{DATA:server}\.%{GREEDYDATA:end}
您可以删除名称 col1
、col2
和 end
以删除这些捕获。
此模式依赖于您的 URI 中始终存在相同数量的部分。如果有一个可变数字,你可以使用这样的东西。
(?:/%{USER})*/%{DATA:index}/%{DATA:server}\.%{GREEDYDATA:end}
制作并测试了这些
使用此模式:
filter {
grok {
match => {
"message" => <message-pattern>
}
}
grok {
match => {
"log_path" => "(?:/%{USER})*/%{DATA:index}/%{DATA:server}\.%{GREEDYDATA}"
}
}
}
其中 "log_path"
是包含您进行正常邮件解析后的日志路径的字段名称。
我需要使用 grok 从此路径捕获两个变量:
/opt/data/app_log/server101.log
server=needs to be anything after the last forward slash before the dot (in this case server101)
index=needs to be the text between the last two forward slashes (in this case app_log)
知道如何在 grok 中做到这一点吗?
grok {
patterns_dir => ["/pattern"]
match =>{path =>"%{WORD:dir1}\/%{WORD:dir2}\/%{WORD:index_name}\/%{WORD:server}\.%{WORD:file_type}"}
match => {"message" => "%{TIMESTAMP_ISO8601:timestamp},%{NUMBER:Num_field} %{WORD:error_level} %{GREEDYDATA:origin}, %{WORD:logger} - %{GREEDYDATA:message}"}
}
最简单的解决方案是
/%{DATA:col1}/%{DATA:col2}/%{DATA:index}/%{DATA:server}\.%{GREEDYDATA:end}
您可以删除名称 col1
、col2
和 end
以删除这些捕获。
此模式依赖于您的 URI 中始终存在相同数量的部分。如果有一个可变数字,你可以使用这样的东西。
(?:/%{USER})*/%{DATA:index}/%{DATA:server}\.%{GREEDYDATA:end}
制作并测试了这些
使用此模式:
filter {
grok {
match => {
"message" => <message-pattern>
}
}
grok {
match => {
"log_path" => "(?:/%{USER})*/%{DATA:index}/%{DATA:server}\.%{GREEDYDATA}"
}
}
}
其中 "log_path"
是包含您进行正常邮件解析后的日志路径的字段名称。