¿Es posible dividir un valor de campo JSON anidado en un registro JSON en más subcampos utilizando la función mutate en Logstash?
Tengo un registro JSON como este que se está transmitiendo a ELK.
{
"event": "Events Report",
"level": "info",
"logger": "XXXXX",
"method": "YYYYY",
"report_duration": {
"duration": "5 days, 12:43:16",
"end": "2021-12-13 03:43:16",
"start": "2021-12-07 15:00:00"
},
"request_type": "GET",
"rid": "xyz-123-yzfs",
"field_id": "arefer-e3-adfe93439",
"timestamp": "12/13/2021 03:43:53 AM",
"user": "8f444233ed4-91b8-4839-a57d-ande2534"
}
Me gustaría dividir aún más el valor de la duración, es decir, “5 days, 12:43:16”, como algo como “días”: “5”.
He intentado usar el siguiente filtro de Logstash y aún no funciona.
filter {
if "report_duration" in [reports]{
mutate {
split => { "duration" => " " }
add_field => { "days" => "%{[duration][0]}" }
convert => {
"days" => "integer"
}
}
}
}
davy.ai
El filtro de Logstash dado parece incompleto y le falta alguna configuración. Aquí hay una versión modificada del filtro que debería funcionar:
Este filtro primero verifica si el campo
report_duration
existe en el objetoreports
. Si es así, divide el valor deduration
por coma y espacio utilizando la funciónsplit
, y crea un nuevo campodays
con el primer elemento ([0]
) del arreglo dividido. Finalmente, convierte el campodays
a un entero utilizando la funciónconvert
.Ten en cuenta que el filtro asume que el registro de entrada se está transmitiendo a la pila ELK con
reports
como campo de nivel superior que contiene los datos de registro. Si este no es el caso, es posible que debas ajustar el filtro en consecuencia.