Personalização do 1.6.x Agente de criação de log para suportar a análise personalizada de várias linhas para aplicativos Node.js que usam a Winston em ambientes orquestrados

Este tutorial demonstra como configurar o manuseio de registros de várias linhas do IBM® Cloud Logs Agente de criação de log para um aplicativo Node.js usando a biblioteca de registros personalizada da Winston. Essa configuração é para ambientes orquestrados, por exemplo, IBM Cloud Kubernetes Service e Red Hat OpenShift on IBM Cloud, e usa Helm. Essa configuração garante que os rastreamentos de pilha e os registros de várias linhas sejam agrupados corretamente em IBM Cloud Logs.

Este tutorial requer a versão IBM Cloud Logs Agente de criação de log 1.6.0 ou posterior.

Antes de Iniciar

Antes de começar a usar este tutorial, revise as informações a seguir para entender os conceitos de Agente de criação de log e multilinha.

Este tutorial também pressupõe que você tenha:

Exemplo de configuração do Winston

Vamos supor que o seu aplicativo Node.js use o Winston e registre no console no seguinte formato:

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp({
      format: 'ddd MMM DD YYYY HH:mm:ss.SSS'
    }),
    winston.format.errors({ stack: true }),
    winston.format.printf(({ timestamp, level, message, stack }) => {
      const levelUpper = level.toUpperCase();
      const baseLog = `[${timestamp}] ${levelUpper} [Main] - ${message}`;
      if (stack) {
        return `${baseLog}\n${stack}`;
      }
      return baseLog;
    })
  ),
  transports: [
    new winston.transports.Console()
  ]
});

Esse formato produz entradas de registro que começam com um carimbo de data/hora e um nível, e os registros de várias linhas, como rastreamentos de pilha de erros, seguem nas linhas subsequentes sem carimbos de data/hora.

O Winston normalmente registra toda a saída, inclusive os rastreamentos de pilha de erros, como uma única cadeia de caracteres, portanto, um analisador de várias linhas geralmente não é necessário. No entanto, este exemplo demonstra o que fazer se o seu formatador imprimir logs de várias linhas e ajuda a ilustrar como abordar a análise de várias linhas para qualquer formato personalizado.

Essa configuração é fornecida como um exemplo para mostrar como lidar com registros de várias linhas ao usar a formatação de registro personalizada. Se o seu aplicativo usar uma estrutura ou biblioteca de registro diferente, use isso como referência para criar seu próprio analisador multilinha de acordo.

Configuração da análise de várias linhas com Helm

Se estiver implantando o Agente de criação de log usando o Helm, você poderá configurar a análise de várias linhas no arquivo Helm values.yaml.

Ativar a análise de várias linhas

Defina enableMultiline como true em seu arquivo values.yaml para ativar o processamento de várias linhas:

enableMultiline: true

Definir o analisador de múltiplas linhas

Adicione um analisador multilinha personalizado na seção additionalMultilineParsers do seu arquivo values.yaml.

É importante que o padrão definido no arquivo log4j.xml esteja alinhado com o regex no analisador multilinear para garantir o agrupamento adequado dos registros.

additionalMultilineParsers:
  - name: multiline-nodejs-winston
    type: regex
    flush_timeout: 500
    rules:
      - state: start_state
        regex: '/^\[[A-Z][a-z]{2} [A-Z][a-z]{2} \d{2} \d{4} \d{2}:\d{2}:\d{2}\.\d{3}\] .*$/'
        next_state: cont
      - state: cont
        regex: '/^(?!\[[A-Z][a-z]{2} [A-Z][a-z]{2} \d{2} \d{4} \d{2}:\d{2}:\d{2}\.\d{3}\] ).*$/'
        next_state: cont

A regex pressupõe que cada nova linha de registro começa com um registro de data e hora no formato ddd MMM DD YYYY HH:mm:ss.SSS. A primeira regra captura as linhas iniciais com registros de data e hora e passa para um estado de continuação. A segunda regra corresponde a qualquer linha que não comece com um carimbo de data/hora.

Essa abordagem é apenas um exemplo para mostrar como garantir que as linhas de registro de várias linhas sejam agrupadas como uma única entrada de registro antes de encaminhá-las para IBM Cloud Logs. Há diferentes maneiras de alcançar o mesmo objetivo.

Aplicar o analisador em um pré-processador

Configure um pré-processador na seção multilinePreprocessor para aplicar o analisador aos seus logs.

Por exemplo:

multilinePreprocessor:
  - name: multiline
    multiline.parser: multiline-nodejs-winston
    multiline.key_content: log

Aplique as alterações:

Se você tiver instalado uma versão anterior do Agente de criação de log e tiver atualizado a configuração do agente modificando o mapa de configuração diretamente no cluster, faça uma cópia do mapa de configuração do cluster antes de executar o comando helm upgrade. Quando o site Agente de criação de log for atualizado, todas as alterações feitas no mapa de configuração serão substituídas.

Depois de atualizar o arquivo values.yaml, aplique as alterações executando o seguinte em sua implementação. Isso gerará novamente as configurações necessárias.

helm upgrade

Verifique seus registros de várias linhas

Acesse sua instância IBM Cloud Logs e confirme se as entradas de várias linhas (por exemplo, rastreamentos de pilha) estão agrupadas corretamente.

  1. Acesse sua instância IBM Cloud Logs.

  2. Usando a visualização Registros Ícone do Explore logs, verifique se as entradas de várias linhas estão agrupadas corretamente.