As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Registro em log
Os aplicativos em contêineres normalmente direcionam os registros do aplicativo para o STDOUT. O tempo de execução do contêiner captura esses registros e faz algo com eles, normalmente grava em um arquivo. O local onde esses arquivos são armazenados depende do tempo de execução e da configuração do contêiner.
Uma diferença fundamental com os pods do Windows é que eles não geram STDOUT. Você pode executar LogMonitor
O mecanismo de coleta de STDOUT/STDERR registros recupera registros dos pods do Kubernetes. A DaemonSet
Informações mais detalhadas sobre o streaming de logs das cargas de trabalho do Windows para CloudWatch são explicadas aqui
Recomendações de registro
As melhores práticas gerais de registro não são diferentes ao operar cargas de trabalho do Windows no Kubernetes.
-
Sempre registre entradas de registro estruturadas (JSON/SYSLOG), o que facilita o manuseio de entradas de registro, pois há muitos analisadores pré-escritos para esses formatos estruturados.
-
Centralize registros - contêineres de registro dedicados podem ser usados especificamente para coletar e encaminhar mensagens de registro de todos os contêineres para um destino
-
Mantenha a verbosidade do log baixa, exceto durante a depuração. A verbosidade coloca muito estresse na infraestrutura madeireira e eventos significativos podem ser perdidos no ruído.
-
Sempre registre as informações do aplicativo junto com o transaction/request id para rastreabilidade. Os objetos do Kubernetes não carregam o nome do aplicativo, então, por exemplo, o nome de um pod
windows-twryrqywpode não ter nenhum significado ao depurar registros. Isso ajuda na rastreabilidade e na solução de problemas de aplicativos com seus registros agregados.A forma como você gera esses transaction/correlation IDs depende da construção da programação. Mas um padrão muito comum é usar um registro Aspect/Interceptor, que pode usar o MDC
(contexto de diagnóstico mapeado) para injetar um transaction/correlation ID exclusivo em cada solicitação recebida, da seguinte forma:
import org.slf4j.MDC; import java.util.UUID; Class LoggingAspect { //interceptor @Before(value = "execution(* *.*(..))") func before(...) { transactionId = generateTransactionId(); MDC.put(CORRELATION_ID, transactionId); } func generateTransactionId() { return UUID.randomUUID().toString(); } }