Logstash 解析 json

Logstash parsing json

我正在尝试使用 log-stash 以 JSON 格式读取输入文件 1.log 并在 elasticsearch 上写入。这是我的日志文件:

{"key":"value00"}
{"key":"value01"}
{"key1":[{"key2":"value02"},{"key3":"value03"},{"key4":[{"key5":"value 04"}]}]}

这是我的配置文件:

input {
  file {
    type => "json"
    path => "/logstash/1.log"
  }
}
filter{
  json {
    source => "message"
    remove_field => ["message"]
  }
}
output {
    elasticsearch {
        hosts => ["192.168.1.6:9200"]
        user => "elastic"
        password => "something"
    }
}

日志存储行为是完全随机的。有时它可以正常工作,但有时它 returns 对于相同的输入结构会出现以下错误:

Error parsing json {:source=>"message", :raw=>"4\"}]}]}", :exception=>#<LogStash::Json::ParserError: Unexpected character ('"' (code 34)): Expected space separating root-level values

我的建议:

不要在调试过程中从头删除消息,因为您不知道出现问题的源头是什么。 根据 json 过滤器结果有条件地执行此操作,如果失败,则将其写入文件以确定何时失败。

根据我的经验,大部分输入都是错误的或者不希望以该格式输入。

基于您的配置的示例:

input {
  file {
    type => "json"
    path => "/logstash/1.log"
  }
}
filter{
  json {
    source => "message"
  }
  if "_jsonparsefailure" not in [tags] {
    mutate {
      remove_field => ["message"]
    }
  }
}
output {
  if "_jsonparsefailure" not in [tags] {
    elasticsearch {
        hosts => ["192.168.1.6:9200"]
        user => "elastic"
        password => "something"
    }
  }
  if "_jsonparsefailure" in [tags] {
    file {
        path => "/write/to/this/file.txt"
    }
  }
}