Fazer Parsing de Registros de Log com Vários Timestamps

Alguns registros de log podem ter vários timestamps, como a hora de entrada do log, a hora de início e a hora de término de um processo ou transação que talvez você queira capturar em seus próprios campos. Depois de capturar os horários inicial e final em seus próprios campos, você pode usar o comando eval para executar a manipulação de data nesses campos, por exemplo, para obter a duração entre os dois horários. Consulte eval.

O Oracle Log Analytics tem vários campos definidos pela Oracle que permitem armazenar informações de data e hora que não são o horário real de entrada de log:

  • Horário Final do Evento

  • Horário Inicial do Evento

  • Horário da Geração do Evento

  • Horário do Primeiro Evento

  • Horário Final do Contato

  • Horário Inicial do Contrato

  • Tempo de Emissão do Alerta

  • Horário da Coleta

  • Horário da Detecção

Os dados armazenados nesses campos devem estar no formato ISO-8601:

2018-07-04T23:43:34.000Z

Ao criar o parser, você só pode usar a macro {TIMEDATE} uma vez para expressar o horário de entrada do log. Para obter campos adicionais de horário, extraia os dados usando um dos métodos a seguir, dependendo do seu caso de uso.

Caso 1: Seu log já tem as informações de hora e data no formato ISO-8601

Se seu log já tiver informações adicionais de data e hora no formato ISO-8601, você poderá extraí-las como strings no parser base da Definição de Campo Estendido.

Considere o seguinte log de exemplo:

July 4, 2018 23:43:12 Server1 ModuleA Transaction completed. Start=2018-07-04T23:45:34.000Z, End=2018-07-04T23:46:39.000Z

O log contém informações de data e hora para entrada de log, horário inicial e horário final.

  1. Para obter o horário de entrada de log, crie o parser base. Consulte Criar um Parser.

    {TIMEDATE}\s(\S+)\s(\S+)\s(.*)
  2. Abra a caixa de diálogo Criar Origem. Consulte Criar uma Origem.

  3. Selecione o parser base criado na etapa 1.

  4. Forneça o caminho do arquivo para o log de exemplo.

  5. Na guia Campos Estendidos, adicione as definições de campo estendido à origem de log para extrair os campos de data e hora:

    • No campo Mensagem: Start={Event Start Time:\S+}

    • No campo Mensagem: End={Event End Time:\S+}

  6. Salve a nova origem que você criou.



Agora você observará que os dois campos Event Start Time e Event End Time são preenchidos com os valores do log. No Log Explorer, você pode ver os horários como milissegundos desde a época.

Caso 2: Seu log não tem as informações de data e hora no formato ISO-8601

Se os campos de horário adicionais que você deseja extrair não estiverem no formato ISO-8601, siga estas etapas para fazer parsing:

Considere o arquivo de log de exemplo em que todo o arquivo é uma única entrada de log:

+---------------------------------------------------------------------------+
Application Object Library: Version : 12.2
Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
FNDWFBG: Workflow Background Process
+---------------------------------------------------------------------------+
Current system time is 04-JUL-2018 17:25:23
+---------------------------------------------------------------------------+
**Starts**04-JUL-2018 17:25:23
**Ends**04-JUL-2018 18:25:23
+---------------------------------------------------------------------------+
Start of log messages from FND_FILE
+---------------------------------------------------------------------------+
+---------------------------------------------------------------------------+
End of log messages from FND_FILE
+---------------------------------------------------------------------------+
Successfully resubmitted concurrent program FNDWFBG with request ID 239834523 to start at 04-JUL-2018 18:30:23 (ROUTINE=IERKWEP)
+---------------------------------------------------------------------------+
No completion options were requested.
Output file size: 
0
Output is not being printed because:
The print option has been disabled for this report.
+---------------------------------------------------------------------------+
Concurrent request completed successfully
Current system time is 04-JUL-2018 18:30:23
+---------------------------------------------------------------------------+
  1. Crie o parser base. Consulte Criar um Parser.

    .*?Current system time is {TIMEDATE}.*\*\*Starts\*\*([\S\ ]+).*?\*\*Ends\*\*([\S\ ]+).*

    Os campos que você deve selecionar para parsing são:

    • Versão

    • Horário Inicial do Evento

    • Horário Final do Evento

    Para o log de exemplo anterior, marque a caixa de seleção Tratar arquivo inteiro como uma única entrada de log. Nenhum regex de cabeçalho é necessário.

  2. Abra a caixa de diálogo Criar Origem de Log. Consulte Criar uma Origem.

  3. Selecione o parser base criado na etapa 1.

  4. Forneça o caminho do arquivo para o log de exemplo.

  5. Navegue até a guia Filtros de Dados.

  6. Converter Nome Abreviado do Mês para Número:

    Se seu log já tiver um número de mês numérico, em vez de um nome de mês, você poderá ignorar esta etapa e ir para a etapa 7.

    Se seu log tiver o nome abreviado do mês, em vez do número do mês, para converter o nome abreviado do mês para o número do mês, adicione doze filtros de dados do tipo MASK.

    Para cada mês do calendário, o filtro de dados terá detalhes semelhantes como para o seguinte mês de janeiro:

    • Nome: Jan to 01

    • Tipo: Mask

    • Expressão de Localização: (\*\*\w+\*\*\d{2}-)(JAN)(-\d{4})

    • Expressão de Substituição: $101$3



    A máscara de dados localiza ocorrências do padrão de tempo no log:

    **Starts**04-JAN-2018 17:25:23

    Ela captura os dados antes de JAN, o valor JAN e os dados após JAN em três grupos de captura. Os grupos de captura são indicados com os três pares de parênteses ( ).

    Em seguida, na expressão de substituição, o valor do primeiro grupo de captura é substituído usando $1, o valor JAN é substituído por 01 e o terceiro grupo de captura é substituído usando $3.

    Depois que o filtro de dados for implementado, as informações de data e hora serão exibidas da seguinte forma:

    **Starts**04-01-2018 17:25:23
  7. Reescreva as informações de data e hora no formato ISO-8601:

    Agora que as informações de hora e data estão disponíveis no tipo de dados correto, reescreva os dados de data e hora para que fiquem no formato ISO-8601 usando dois filtros de dados para o log de exemplo:

    Esses dois filtros de dados devem ser posicionados após os doze filtros de dados que você criou para converter o nome abreviado do mês para o número do mês. Isso garantirá que o formato dos dados de data e hora seja avaliado depois que o nome abreviado do mês for convertido em número do mês. Use as setas para cima e para baixo para alterar a ordem dos filtros de dados.

    Crie os dois seguintes filtros de dados a seguir para converter os dados de horário inicial e horário final no formato ISO-8601:

      • Nome: Change shape of Starts

      • Tipo: Mask

      • Expressão de Localização: \*\*Starts\*\*(\d+)-(\d+)-(\d{4})\s(\d{2}:\d{2}:\d{2})

      • Expressão de Substituição: \*\*Starts\*\*$3-$2-$1T$4.000Z

      • Nome: Change shape of Ends

      • Tipo: Mask

      • Expressão de Localização: \*\*Ends\*\*(\d+)-(\d+)-(\d{4})\s(\d{2}:\d{2}:\d{2})

      • Expressão de Substituição: \*\*Ends\*\*$3-$2-$1T$4.000Z



    Na expressão de localização, cada elemento de hora e data é capturado. Na expressão de substituição, a ordem dos elementos de data e hora é alterada. Os valores $1, $2, $3 e $4 correspondem aos grupos de captura na expressão de localização. Os grupos de captura são indicados com os pares de parênteses ( ).

    O .000Z estático é adicionado na expressão de substituição para armazenar o valor de data e hora no campo. Isso marca efetivamente a hora e a data no fuso horário UTC (Horário Universal Coordenado). Se em vez disso a entrada de log estava no fuso horário PST (Pacific Standard Time), o fuso horário será alterado artificialmente para UTC, mas sem a mudança real na hora.

    Observação

    Atualmente, não é possível mudar o valor de data e hora para outro fuso horário no momento da ingestão. Mas você pode fazer isso no Log Explorer usando o comando eval:
    • Depois de armazenar os horários inicial e final do evento, subtraia o horário final do horário inicial para obter a duração do evento.

    • Adicione ou subtraia a duração da diferença de tempo entre os fusos horários calculados em milissegundos.

    • Converta a saída do número de milissegundos para o formato de data e hora.

    Consulte eval.
  8. Na guia Campos Estendidos, adicione as definições de campo estendido à origem de log para extrair os campos de data e hora:

    • No campo Mensagem: \*\*Starts\*\*{Event Start Time:\S+}

    • No campo Mensagem: \*\*Ends\*\*{Event Start Time:\S+}

  9. Salve a nova origem de log que você criou.



Agora você pode observar que os dois campos Event Start Time e Event End Time são preenchidos com os valores de data e hora do log. No Log Explorer, você pode ver os horários como milissegundos desde a época.