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:
-
Uma instância do IBM Cloud Logs provisionada e configurada.
-
O Agente de criação de log implantado em um ambiente orquestrado.
-
Kubernetes Service IBM Cloud Kubernetes Service
-
Red Hat OpenShift on IBM Cloud Red Hat OpenShift on IBM Cloud
-
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.
-
Usando a visualização Registros
, verifique se as entradas de várias linhas estão agrupadas corretamente.