Analisando JSON com CloudWatch Insight Logs

Aug 25 2020

Estou tendo dificuldade em analisar meu JSON para mostrar apenas o ingestId de minhas mensagens. Meu arquivo JSON que é carregado no CloudWatch é assim:

{
    "message": "changeStatus ingestId=2343d8sf-etc, 
             status=UPLOADING",
    "level": "info"
}

Meu código do CloudWatch Log Insight é assim:

filter level = "error"
| filter @message like /([-\w]{25,})/
| filter strcontains(@logStream, 'ingest-')
| fields @timestamp, @message, @logStream, level
| sort @logStream, @timestamp asc

O Insight produz uma nova coluna sem informações do ID que eu gostaria. O que estou fazendo de errado para poder pelo menos o ID do ingest?

Agradeceria qualquer ajuda.

EDIT (v2): consegui encontrar a regex necessária para obter o ID de ingestão com este código de regex:

/([-\w]{25,})/

Aqui está o código. Ele é executado com sucesso com uma nova coluna de ingestId, mas ainda sem o ID de ingestão que estou procurando:

filter level = "error"
| filter strcontains(@logStream, 'ingest-')
| filter @message like /(ingestId)/
| parse @message "\"ingestId\": \"/([-\w]{25,})/\"" as ingestId
| fields @timestamp, @message, @logStream, level
| sort @logStream, @timestamp asc

O que pode ser feito para exibir o ID de ingestão de cada mensagem recebida? Obrigado a todos.

Respostas

Roma Aug 27 2020 at 04:18

Consegui corrigir o problema para exibir o Id de ingestão na coluna. Espero que isso ajude qualquer pessoa que esteja tendo problemas com isso a conseguir obter informações de sua mensagem:

filter level = "error"
| filter strcontains(@logStream, 'ingest-')
| parse message /ingestId=(?<ingestId>[-\w]+)/
| display ingestId
| fields @timestamp, message, level, @logStream
| sort @logStream, @timestamp asc