Temos um aplicativo que grava três tipos de logs em três arquivos separados: logs de acesso, logs genéricos de aplicativos e logs do sistema. O formato (e a finalidade) desses logs são muito diferentes. E temos encaminhadores de logs separados que os enviam separadamente para o nosso sistema de registro centralizado.
Com base nos registros de tratamento como princípio do fluxo de eventos , estamos pensando em passar do uso de arquivos para o stdout. Embora conheçamos alguns dos benefícios dessa abordagem, isso também significaria que obteríamos um fluxo mesclado de logs com formatos diferentes, que precisaríamos dividir novamente antes de poder enviá-los ao nosso sistema central (Kibana / Splunk / etc.) ou lá dentro.
Estamos nos perguntando se existem ferramentas ou recomendações sobre como devemos abordar essa situação.
Respostas:
Ainda estou procurando uma abordagem de mesclagem / divisão, mas, enquanto isso, a abordagem recomendada pela documentação do Kubernetes parece uma solução sólida: use um contêiner lateral para cada um dos logs separados .
Um "side-car" é qualquer contêiner de docker que você usa ao lado de outro contêiner de docker para trabalhar com ele de alguma maneira. Nesse caso, para cada um dos seus três logs, você teria um contêiner separado que varre ou segue os logs e as saídas para o stdout.
Dessa maneira, cada um de seus contêineres de log-sidecar possui seu próprio docker-log a partir de seu próprio stdout. Sendo separado assim, você pode usar práticas padrão do docker (e kubernetes, etc) para separar ou agregar. Aqui está o que a página do Kubernetes tem a dizer:
Os "fluxos de log separados" decorrem da marcação interna que o docker aplica aos logs de diferentes contêineres, descritos na documentação do docker aqui:
fonte
A idéia de mesclá-los em um fluxo apenas para dividi-los mais tarde parece dolorosa. Eu não tive um motivo para fazer isso sozinho, mas é aqui que eu começaria:
Parece um pouco menos do que elegante ter que fazer algumas configurações no host também, mas se você usar algo como ansible, poderá executar um manual e configurá-lo durante a implantação na caixa, não deve ser muito ruim.
fonte