Yes. bạn cần phải thêm một bộ lọc vào cấu hình của bạn, một cái gì đó như thế này.
filter{
json{
source => "message"
}
}
Nó được mô tả khá tốt trong các tài liệu here
EDIT Các codec json dường như không giống như có một mảng thông qua trong một yếu tố duy nhất làm việc với cấu hình này:.
Đầu vào:
{"uid":"441d1d1dd296fe60","name":"test_buylinks","title":"Testbuylinks","time":{"start":1419621623182, "stop":1419621640491,"duration":17309 }, "severity":"NORMAL", "status":"FAILED" }
quả Logstash:
{
"message" => "{\"uid\":\"441d1d1dd296fe60\",\"name\":\"test_buylinks\",\"title\":\"Testbuylinks\",\"time\":{\"start\":1419621623182, \"stop\":1419621640491,\"duration\":17309 }, \"severity\":\"NORMAL\", \"status\":\"FAILED\" }",
"@version" => "1",
"@timestamp" => "2015-02-26T23:25:12.011Z",
"host" => "emmet.local",
"uid" => "441d1d1dd296fe60",
"name" => "test_buylinks",
"title" => "Testbuylinks",
"time" => {
"start" => 1419621623182,
"stop" => 1419621640491,
"duration" => 17309
},
"severity" => "NORMAL",
"status" => "FAILED"
}
Bây giờ với một mảng:
Input
[{"uid":"441d1d1dd296fe60","name":"test_buylinks","title":"Testbuylinks","time":{"start":1419621623182, "stop":1419621640491,"duration":17309 }, "severity":"NORMAL", "status":"FAILED" }, {"uid":"441d1d1dd296fe60","name":"test_buylinks","title":"Testbuylinks","time":{"start":1419621623182, "stop":1419621640491,"duration":17309 }, "severity":"NORMAL", "status":"FAILED" }]
Kết quả:
Trouble parsing json {:source=>"message", :raw=>"[{\"uid\":\"441d1d1dd296fe60\",\"name\":\"test_buylinks\",\"title\":\"Testbuylinks\",\"time\":{\"start\":1419621623182, \"stop\":1419621640491,\"duration\":17309 }, \"severity\":\"NORMAL\", \"status\":\"FAILED\" }, {\"uid\":\"441d1d1dd296fe60\",\"name\":\"test_buylinks\",\"title\":\"Testbuylinks\",\"time\":{\"start\":1419621623182, \"stop\":1419621640491,\"duration\":17309 }, \"severity\":\"NORMAL\", \"status\":\"FAILED\" }]", :exception=>#<TypeError: can't convert Array into Hash>, :level=>:warn}
{
"message" => "[{\"uid\":\"441d1d1dd296fe60\",\"name\":\"test_buylinks\",\"title\":\"Testbuylinks\",\"time\":{\"start\":1419621623182, \"stop\":1419621640491,\"duration\":17309 }, \"severity\":\"NORMAL\", \"status\":\"FAILED\" }, {\"uid\":\"441d1d1dd296fe60\",\"name\":\"test_buylinks\",\"title\":\"Testbuylinks\",\"time\":{\"start\":1419621623182, \"stop\":1419621640491,\"duration\":17309 }, \"severity\":\"NORMAL\", \"status\":\"FAILED\" }]",
"@version" => "1",
"@timestamp" => "2015-02-26T23:28:21.195Z",
"host" => "emmet.local",
"tags" => [
[0] "_jsonparsefailure"
]
}
Điều này giống như một lỗi trong codec, bạn có thể thay đổi thư của mình thành đối tượng thay vì mảng không?
Tôi đã đọc tài liệu này, nhưng bộ lọc không giúp đỡ. Kết quả là như nhau. Theo tôi hiểu, định nghĩa này cho biết: thông báo chứa đối tượng JSON hợp lệ bạn có thể sử dụng làm băm. Thật tuyệt.Nhưng dù sao, tôi vẫn không thấy JSON hợp lệ trong tin nhắn. Chỉ có các bộ phận. – avasin
Tôi nghĩ rằng vấn đề có thể là tin nhắn của bạn là một mảng và các codec json đang mong đợi một đối tượng tại gốc – stringy05
wow, có lẽ chúng tôi có thể báo cáo lỗi này ... Dù sao, bạn đã đúng - bộ lọc là một giải pháp. https://github.com/elasticsearch/logstash/issues/2702 – avasin