How to parse logstash's data to a json array?
Using filebeat sending a file to logstash.
The file includes 2 line of records:
{"request_id": "m2ee22d045f6c5ce07fe43dbdaea1de0","method": "GET","status": "304","forwarded_for": "","host": "localhost","url": "/","referer": "","remote_ip": "10.0.2.2","server_ip": "10.0.2.15","user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36","latency": "0s","occurred_at": "2020-12-10T03:39:29+00:00"}
{"request_id": "m2ee22d045f6c5ce07fe43dbdaea1de0","method": "GET","status": "304","forwarded_for": "","host": "localhost","url": "/","referer": "","remote_ip": "10.0.2.2","server_ip": "10.0.2.15","user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36","latency": "0s","occurred_at": "2020-12-10T03:39:29+00:00"}
filebeat.yml
filebeat.inputs:
- type: log
paths:
- /var/log/nginx.log
processors:
- decode_json_fields:
fields: ["message"]
process_array: true
max_depth: 1
target: ""
overwrite_keys: true
add_error_key: false
output.logstash:
hosts: ["logstash:5044"]
logstash.conf
input {
beats {
port => 5044
}
}
filter {
mutate {
remove_field => [
"agent",
"event",
"message"
...
]
}
}
output {
stdout { codec => rubydebug }
}
Logstash got the data as
{
"latency" => "0s",
"url" => "/",
"occurred_at" => "2020-12-10T08:08:10+00:00",
"server_ip" => "10.0.2.15",
"host" => "localhost",
"request_id" => "ede6f0f02934cd18bcab1f9f531586e2",
"remote_ip" => "10.0.2.2",
"forwarded_for" => "",
"user_agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"status" => "304",
"referer" => "",
"method" => "GET"
}
{
"latency" => "0s",
"url" => "/",
"occurred_at" => "2020-12-10T08:08:10+00:00",
"server_ip" => "10.0.2.15",
"host" => "localhost",
"request_id" => "ede6f0f02934cd18bcab1f9f531586e2",
"remote_ip" => "10.0.2.2",
"forwarded_for" => "",
"user_agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"status" => "304",
"referer" => "",
"method" => "GET"
}
Want to get data as
[
{
"latency" => "0s",
"url" => "/",
"occurred_at" => "2020-12-10T08:08:10+00:00",
"server_ip" => "10.0.2.15",
"host" => "localhost",
"request_id" => "ede6f0f02934cd18bcab1f9f531586e2",
"remote_ip" => "10.0.2.2",
"forwarded_for" => "",
"user_agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"status" => "304",
"referer" => "",
"method" => "GET"
},
{
"latency" => "0s",
"url" => "/",
"occurred_at" => "2020-12-10T08:08:10+00:00",
"server_ip" => "10.0.2.15",
"host" => "localhost",
"request_id" => "ede6f0f02934cd18bcab1f9f531586e2",
"remote_ip" => "10.0.2.2",
"forwarded_for" => "",
"user_agent" => "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_0_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"status" => "304",
"referer" => "",
"method" => "GET"
}
]
I researched both filebeat and logstash's documents. But don't know if make it in filebeat or logstash's filter.
All the necessary data are in message only. Just want to rewrite this context.