过滤 Logstash 中的 JSON/non-JSON 个条目
Filtering JSON/non-JSON entries in Logstash
我对在 Logstash 中过滤条目有疑问。我有两个不同的日志进入 Logstash。一个日志只是带有时间戳和消息的标准格式,但另一个以 JSON.
形式出现
我使用 if 语句来测试某个主机,如果该主机存在,那么我使用 JSON 过滤器来应用于消息...问题是当它遇到非-JSON stdout 消息无法解析并抛出异常。
有谁知道如何测试一个条目是否 JSON 进入应用过滤器,如果没有,就忽略它?
谢谢
if [agent][hostname] == "some host"
# if an entry is not in json format how to ignore?
{
json {
source => "message"
target => "gpfs"
}
}
您可以先尝试使用 grok 过滤器。
grok {
match => {
"message" => [
"{%{GREEDYDATA:json_message}}",
"%{GREEDYDATA:std_out}"
]
}
}
if [json_message]
{
mutate {
replace => { "json_message" => "{%{json_message}}"}
}
json {
source => "json_message"
target => "gpfs"
}
}
可能有比这个更简洁的解决方案,但它可以完成工作。
我对在 Logstash 中过滤条目有疑问。我有两个不同的日志进入 Logstash。一个日志只是带有时间戳和消息的标准格式,但另一个以 JSON.
形式出现我使用 if 语句来测试某个主机,如果该主机存在,那么我使用 JSON 过滤器来应用于消息...问题是当它遇到非-JSON stdout 消息无法解析并抛出异常。
有谁知道如何测试一个条目是否 JSON 进入应用过滤器,如果没有,就忽略它?
谢谢
if [agent][hostname] == "some host"
# if an entry is not in json format how to ignore?
{
json {
source => "message"
target => "gpfs"
}
}
您可以先尝试使用 grok 过滤器。
grok {
match => {
"message" => [
"{%{GREEDYDATA:json_message}}",
"%{GREEDYDATA:std_out}"
]
}
}
if [json_message]
{
mutate {
replace => { "json_message" => "{%{json_message}}"}
}
json {
source => "json_message"
target => "gpfs"
}
}
可能有比这个更简洁的解决方案,但它可以完成工作。