I am parsing data from the pm2 manager for node and it works fine, however some of my data ends in a text field instead of an structure. This is my logstash configuration:
if [fields][type] == "pm2" {
json {
source => "message"
target => "pm2"
}
json_encode {
source => "pm2.message"
target => "pm2.dataString"
}
json {
source => "pm2.dataString"
target => "pm2.data"
}
date {
match => [ "timestamp", "yyyy-MM-dd HH:mm:ssZ" ]
tag_on_failure => ["_dateparsefailure"]
}
}
Part of my template:
"pm2" : {
"properties" : {
"data" : {
"type" : "object"
},
"dataString" : {
"type" : "text"
},
"message" : {
"type" : "text"
},
Then some example data:
Original message: {"message":"{\n "className": "AppointmentBot",\n "dialog": "query",\n "step": 1,\n "millis": 0,\n "extra": "",\n "type": "logger",\n "level": "info",\n "message": "Query",\n "timestamp": "09-01-2018 15:13:05 +00:00"\n}\n","timestamp":"2018-01-09T15:13:05.310Z","type":"out","process_id":9,"app_name":"Chatbot-App-Dev"}
pm2.message ends up being this. which I don't want, I want every field separate: {
"className": "AppointmentBot",
"dialog": "query",
"step": 1,
"millis": 0,
"extra": "",
"type": "logger",
"level": "info",
"message": "Query",
"timestamp": "09-01-2018 15:13:05 +00:00"
}
So that is why I am trying to encode the JSON back to string and parse it to the data field which I made an object, but I am getting this that dataString is null.
Any idea? Thanks