通常情况,Logstash收集到的数据都会转成json格式,但是默认logstash只是对收集到的格式化数据转成json,如果收到的数据仅仅是一个字符串是不会转换成Json.
例如:
{
"id":20,
"domain": "https://www.tizi365.com",
"data": "{\"type\":1, \"msg\":\"message ok\"}"
}
data字段的内容是一个json字符串,不是格式化的Json格式,如果数据导入到Elasticsearch,data字段也是一个字符串,不是一个Json对象;json filter插件可以解决这种问题。
例子:
filter {
# 定义json插件
json {
# 指定需要转换成json格式的字段
source => "data"
# 指定转换成json的数据,保存到那个字段,如果字段存在会覆盖
target => "data"
# 如果遇到错误的json,是否跳过json filter过滤器
skip_on_invalid_json => true
}
}
json filter格式化数据后,输出如下:
{
"id":20,
"domain": "https://www.tizi365.com",
"data": {
"type":1,
"msg":"message ok"
}
}