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 o Winston em ambientes não 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 não orquestrados, por exemplo, Linux e Windows, e modifica o arquivo de configuração. 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.2 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:

  • Uma instância IBM Cloud Logs provisionada e configurada.

  • O Agente de criação de log foi implantado em um ambiente não orquestrado.

Os arquivos de configuração deste tutorial podem ser encontrados onde os arquivos do pacote foram baixados quando você instalou o Agente de criação de log.

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 manual da análise de várias linhas usando um arquivo de configuração

Para agrupar adequadamente os registros, defina um analisador de várias linhas que reconheça o carimbo de data/hora no início de novas entradas de registro e trate as linhas subsequentes como continuações das entradas anteriores.

Definir o analisador de múltiplas linhas

Adicione o seguinte ao arquivo parsers.conf:

[MULTILINE_PARSER]
    Name            multiline-nodejs-winston
    Type            regex
    Flush_timeout   500
    Rule            "start_state"     "/^\\[[A-Z][a-z]{2} [A-Z][a-z]{2} \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\] .*$/"
    Rule            "cont"            "/^(?!\\[[A-Z][a-z]{2} [A-Z][a-z]{2} \\d{2} \\d{4} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}\\] ).*$/"

Esse analisador pressupõe que os registros começam com um registro de data e hora, como [Wed Jul 24 2025 14:52:31.456] .... Os rastreamentos de pilha são recuados nas linhas seguintes e não correspondem ao regex de registro de data e hora, portanto, são agrupados com a linha de registro anterior.

Aplicar o analisador com um filtro de várias linhas

Adicione um bloco de filtro ao arquivo filters.conf para usar o analisador:

[FILTER]
    Name                  multiline
    Match                 kube.*
    Multiline.key_content log
    Multiline.parser      multiline-nodejs-winston

Reinicie o agente

Após atualizar o mapa de configuração, reinicie o agente.

  • Linux Para ambientes Linux, execute:

    systemctl daemon-reload && systemctl restart fluent-bit
    
  • Windows Para ambientes Windows, execute:

    sc.exe stop fluent-bit && sc.exe start fluent-bit
    

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.

    Os dados de registro agrupados são incluídos no campo log.