logstash - Logstash 解析 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"
}
}
日志存储行为是完全随机的。有时它可以正常工作,但有时它会为相同的输入结构返回以下错误:
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"
}
}
}
推荐阅读
- c++ - 这些变量在这个斐波那契算法中是如何工作的?
- xml - 如何通过 XSLT 将字符串插入 Oracle 中的日期字段?
- php - 如何选择按日期(时间戳)PHP/MYSQL 分组的所有时间戳
- spring-mvc - 无法在 Spring MVC 中重定向(使用“:redirect/”)
- unity3d - FFMPEG 从 .mov 转换为 .webm -“无法找到适合 vp8 的输出”
- php - PDO 中的多个创建触发器查询
- java - @Required 默认情况下不按名称自动连接
- django - 对象模型数组
- php - php ON DUPLICATE UPDATE 不起作用
- c# - 为什么 IdentityServer4 代码会破坏我的身份项目?