Logotipo do Container Logs

Docker e Portainer Novo

Conectar Registros do contêiner para Excel, Planilhas e IA

O Docker grava um log para cada contêiner — consulte todos eles de uma vez. O arquivo JSON registra o que o daemon grava, o logs do docker Exporta arquivos salvos manualmente e também o próprio log do servidor do Portainer. Aponte o Query Streams para a pasta e cada linha se tornará uma linha — contendo o nome real do contêiner, sua imagem e seu serviço Compose, em vez de um diretório cheio de IDs de 64 caracteres.

1conexão
0portas de entrada
somente leituraimposto
3 formatos de log de contêiner Docker · Portainer Nomeado por contêiner, imagem e serviço Somente leitura · nada instalado no contêiner
A grande ideia

Uma pasta de registros de contêineres se transforma em uma tabela.

O Query Streams lê os arquivos que o daemon já grava, fixa o formato e fornece colunas tipadas com o nome do contêiner ao lado de cada linha. Sem sidecar, sem pipeline de distribuição, sem índice para manter — e uma linha que o analisador não consegue ler é mantida como uma linha com uma justificativa, em vez de ser descartada silenciosamente.

Pasta de registrono host
a3f9c1…-json.logDocker
Dockershopfront-stack_api.logexportar
portainer.logPortainer

Rotações, arquivos compactados e arquivos relidos — tratados

noise-containers.sqlSQL
SELECIONAR aplicativo, compose_service,
       contar(*) AS linhas
DE   conjunto de arquivos.eventos
ONDE  fluxo = 'stderr'
GRUPO POR aplicativo, serviço de composição
ORDER BY linhas DESC
Resultadostderr do contêiner
aplicativoserviçolinhas
API de vitrineAPI1,284
funcionário de lojatrabalhador417
vitrine-webweb62
cache da vitrinecache3

Integre-o ao banco de dados do seu aplicativo na mesma consulta.

Os arquivos que o daemon já grava, agora uma tabela que você pode usar para gerar relatórios.

Fontes

Duas ferramentas, três formatos, sem sidecar

Cada cartão indica exatamente quais arquivos o Query Streams lê e onde eles estão localizados. Você não precisa alterar o driver de registro para que isso funcione. arquivo json é o padrão do Docker, e o padrão é o suportado.

Registros de contêineres suportados

3 formatos · 2 ferramentas
Dockerdriver de registro de arquivo json
  • Um {"log","stream","time"} envelope por linha, escrito pelo demônio
  • O nome do contêiner vem do próprio Docker. config.v2.json ao lado do tronco
  • O projeto/serviço Image and Compose acompanha o fluxo como colunas.
  • Geralmente /var/lib/docker/containers
  • Apêndices; rotações numeradas e .gz seguido
Dockerexportar logs do docker
  • Arquivos que você salvou com docker logs --timestamps
  • Um carimbo de nanossegundos RFC 3339, seguido da linha própria do contêiner.
  • As linhas de cabeçalho do contêiner são ignoradas por declaração, não por acaso.
  • Qualquer pasta onde você guarda os arquivos exportados.
  • Um arquivo por serviço; o nome vem da raiz do arquivo.
PortainerLog do servidor, console zerolog
  • portainer.log ou a própria saída do contêiner
  • Os códigos de cores ANSI foram removidos antes da análise, portanto, um nível é um nível.
  • O chave=valor A cauda se transforma em colunas; o restante cai em dados
  • As linhas de formato diferente do servidor de túnel embutido também são lidas.
  • Carimbos com resolução de minutos, lidos como UTC
Mais informaçõesEsses são o começo, não o teto.

Novos formatos de log de contêiner são adicionados a cada versão do Agente. Como os Agentes se mantêm atualizados automaticamente, um formato adicionado posteriormente aparecerá no seu conector sem que ninguém precise acessar um servidor.

Os três analisadores foram construídos e testados com logs de contêineres reais — logs em formato JSON, logs grandes. logs do docker exporta de um host Swarm e do log do servidor Portainer CE 2.39.1. Um detalhe importante: no Docker Desktop para Windows e Mac, os logs em formato JSON ficam armazenados dentro da máquina virtual, onde um Agente em execução como serviço não consegue acessá-los. Exporte-os com docker logs --timestamps e utilize o segundo perfil.
Em qualquer lugar que funcione

Contêineres em todas as regiões, registros lidos onde eles se sentam

Raramente todos os contêineres são executados em um único local. Um host no escritório, um cluster Swarm em uma região da nuvem, um único servidor em outro país. Cada local executa um Agente de Rede que lê os arquivos de log onde eles já estão armazenados e se conecta ao Query Streams. Para o seu firewall, essa é uma conexão de saída comum — não há nada para abrir nem uma VPN para configurar.

Sede Um host Docker no disco local, com logs em formato JSON na pasta do daemon. disca
eu-oeste Um cluster Swarm, um logs do docker exportação por serviço disca
leste dos EUA O Portainer gerencia alguns hosts, com seu próprio registro de servidor em paralelo. disca

Três conexões de saída, um único local para consultá-las — sem porta de entrada, sem VPN, sem alteração de firewall.

Um agente por local

Um Agente abrange um site inteiro, em vez de uma única pasta: cada formato de log desejado se torna seu próprio conector de Conjunto de Arquivos nesse mesmo Agente. O padrão é um Agente por local. O plano gratuito executa um único Agente, enquanto os planos superiores executam mais.

1 site = 1 agente = vários conectores

Nada para abrir

O agente estabelece uma única conexão de saída criptografada, e tanto a solicitação de saída quanto as linhas de retorno trafegam por essa conexão. Sem necessidade de porta de entrada, VPN ou alteração de firewall — e as credenciais permanecem dentro da sua rede.

uma conexão, em ambas as direções

Uma única consulta em vários sites.

Cada fonte em um consulta federada Possui um agente próprio, permitindo que uma única instrução leia um registro em um país e um registro em outro, retornando um único resultado — ou combinando qualquer um deles em um banco de dados. Incluído nas versões Business e Enterprise.

2 países → 1 conjunto de resultados

Eles se mantêm atualizados

Os agentes se atualizam automaticamente, portanto, um formato de log de contêiner adicionado em uma versão posterior chega a todos os sites sem que ninguém precise acessar um servidor para instalá-lo. É isso que faz com que a lista acima seja um ponto de partida, e não uma lista fixa.

Novos formatos chegam com o Agente.

A parte difícil

Nomes, relógios e códigos de cores

Um log de contêiner não é um arquivo de texto com uma data. Três problemas comuns ocorrem quando se tenta tratá-lo como dados, e cada um deles é tratado aqui por meio de declaração, em vez de tentativa e erro.

Nomes, não identificadores hexadecimais.

O Docker nomeia cada pasta de logs com o ID do contêiner, o que torna uma consulta agrupada ilegível. O Query Streams lê o registro que o Docker grava ao lado do log e extrai o nome real, mantendo o ID como uma coluna separada.

a3f9c1…-json.log → app = shopfront-api

O relógio do demônio

Um contêiner que imprime seu próprio carimbo de data/hora em segundos da época aterrissa em 1970, se você acreditar. O horário do evento é o horário de captura do daemon; o carimbo do próprio contêiner é mantido como uma coluna em vez de ser considerado confiável.

tempo do envelope → tempo_do_evento

Códigos de cores no arquivo

Os registradores de console gravam sequências de escape do terminal diretamente no log. Elas são removidas antes da análise, de modo que um nível é lido como um nível, em vez de um nível envolto em caracteres de escape — e os bytes originais permanecem intactos.

Códigos de escape removidos → nível = INF

Nada contava duas vezes.

Cada arquivo é identificado pelos seus primeiros 4 KB, de forma que um arquivo rotacionado seja reconhecido como o mesmo arquivo, em vez de ser lido novamente desde o início. Uma janela duplicada rolante captura a sobreposição quando um gravador reproduz a sua cauda.

Hash de prefixo de 4 KB · Janela de 20.000 registros

O esquema

As colunas que você realmente obtém

Não se trata de um bloco de texto com um carimbo de data/hora ao lado. Cada formato é analisado e dividido em colunas tipadas que você pode filtrar, agrupar e agregar diretamente — e, quando um contêiner registra JSON estruturado, seus próprios campos também são desmembrados em colunas.

Logotipo do Docker
log do contêiner de arquivo jsonDaemon do Docker
fluxonívellenhadormensagemhospedarserviçodados
Logotipo do Docker
exportar logs do dockerLinha de comando do Docker
mensagem
Logotipo Portainer
registro do console zerologPortainer
nívelchamadormensagemerrodados

Cada linha também carrega hora do evento, o carimbo bruto do qual foi lido e o arquivo de onde veio. Cada formato adiciona sua coluna de identidade — aplicativo para arquivo JSON e Portainer, recipiente para exportação — e as linhas do arquivo JSON também carregam imagem, compor_projeto, compor_serviço e id_do_containerO único mensagem A coluna em uma exportação é intencional: a linha do próprio contêiner é mantida inteira em vez de ser estimada.

Uma conexão, todas as superfícies

Para onde podem ser enviados os dados de log do seu contêiner.

Os arquivos de log não são um beco sem saída. Conecte a pasta uma única vez e essa mesma conexão somente leitura alimentará todas as superfícies compatíveis com o Query Streams — sem necessidade de uma segunda configuração, uma segunda cópia dos dados ou qualquer diferença no tratamento em comparação com um conector de banco de dados.

Compatível

Registros do contêiner para Excel

Microsoft Excel · Suplemento do Excel

Extraia resultados de logs de contêineres em tempo real diretamente para uma planilha e atualize-os sob demanda — Excel para desktop, Excel Online, Microsoft 365.

Como funciona o Excel
Compatível

Registros de contêineres no Google Sheets

Suplemento de planilhas

Execute uma consulta de log de contêiner salva na barra lateral e arraste as linhas para a planilha. Os colaboradores que compartilharam a planilha podem atualizá-la por conta própria.

Como funciona o Google Sheets
Compatível

Servidor MCP de logs de contêiner

Clientes Claude, Cursor e MCP · Servidor MCP

Conceda a um assistente de IA acesso somente leitura ao log do contêiner com o esquema necessário para escrever SQL corretamente — sem credenciais no chat.

Como funciona o MCP
Compatível

API REST de logs de contêiner

endpoint HTTP

Publique uma consulta de log de contêiner como um endpoint JSON autenticado que qualquer aplicativo pode chamar, com uma especificação OpenAPI 3.1 e coleções prontas para uso no Postman, Insomnia e Hoppscotch. Nenhuma porta de banco de dados é aberta.

Como funciona a API REST
Compatível

Os registros do contêiner são enviados para o Airtable.

Plataforma de automação

Sincronize as linhas de log do contêiner com uma base do Airtable de acordo com uma programação ou busque-as dentro de um script de automação do Airtable.

Como funciona o Airtable
Compatível

O contêiner registra logs no Baserow.

Plataforma de automação

Forneça uma tabela Baserow a partir do log do contêiner por meio do endpoint REST — hospedado localmente ou na nuvem Baserow.

Como funciona o Baserow
Compatível

Registros de contêineres para o SeaTable

Plataforma de automação

Mantenha uma base SeaTable atualizada com dados de registro de contêineres sem exportar um arquivo ou expor o banco de dados.

Como funciona o SeaTable
Compatível

Registros do contêiner no Smartsheet

Plataforma de automação

Inserir os resultados dos logs do contêiner em uma grade do Smartsheet para que os planos e relatórios sejam lidos do sistema de origem, e não da exportação da semana passada.

Como funciona o Smartsheet
Compatível

O contêiner registra informações no Anvil.

Anvil Works · Plataforma de aplicativos

Faça backup de um aplicativo Python do Anvil com log de contêiner por meio do endpoint REST, em vez de incorporar as credenciais do banco de dados no aplicativo.

Como funciona o Anvil
Compatível

O contêiner registra informações no Power BI.

Power Query M

Cole o arquivo M do Power Query gerado no Editor Avançado do Power BI e o relatório lerá os resultados do log do contêiner em tempo real via HTTPS — sem driver ODBC, sem porta de banco de dados aberta.

Como funciona o Power BI
Compatível

Alertas e relatórios de logs de contêineres

Slack · Discord · E-mail · Webhook

Programe uma consulta de logs de contêineres para que as linhas sejam entregues no Slack, Discord, por e-mail ou por um webhook assinado — ou retenha a mensagem até que a contagem de linhas, um limite ou uma variação percentual ultrapasse o valor definido.

Como funcionam os alertas e relatórios
O cartão de alertas é o que merece atenção especial para contêineres: uma consulta agendada à sua contagem de erros não exige que ninguém esteja monitorando o terminal, portanto, um loop de reinicialização chega ao Slack automaticamente. Guias passo a passo específicos para cada tipo de log ainda não foram escritos — as páginas vinculadas explicam como cada interface funciona.

O que isso deliberadamente não faz

Não se trata de um rastreamento em tempo real. O Query Streams lê os arquivos tal como estão no disco no momento da execução da consulta, portanto, um loop de reinicialização aparece como linhas em vez de um fluxo que você monitora. Se você precisar de alertas com precisão inferior a um segundo para uma linha específica, assim que ela for impressa, um pipeline de logs é a ferramenta adequada.

A saída de um contêiner é de formato livre, e isso tem uma consequência que vale a pena mencionar claramente: tudo o que seu aplicativo imprime é o que vai parar na tabela. Se ele registrar um token ou um e-mail de cliente, essa string já estará no arquivo de log e também estará na coluna. Não há um mapa de cabeçalho para excluir, como existe em um log de servidor web — trate a tabela resultante com o mesmo cuidado que você trataria o arquivo.

Dois limites menores, nomeados em vez de ocultos. Em um logs do docker A linha de exportação do próprio contêiner é mantida inteira em um mensagem coluna; a análise sintática dessa linha interna, utilizando seu próprio formato, ainda não foi implementada. Além disso, os atributos opcionais que o Docker pode anexar a uma tag de log são reconhecidos apenas pelo formato — nenhum contêiner no conjunto de dados capturado os utilizou, portanto, esse caminho é declarado, não comprovado.

O restante segue o padrão usual. O Agente se conecta à rede externa e lê arquivos; nada é instalado no contêiner, nada é gravado de volta, o socket do Docker e a API nunca são acessados, e o acesso é somente leitura. O período de retenção começa em 30 dias para esta configuração predefinida e você pode alterá-lo.

Como funciona

Três etapas, e nada é instalado no contêiner.

01

Aponte para a pasta de registro.

Conceda ao Agente de Fluxos de Consulta acesso de leitura ao local onde os logs já são armazenados — /var/lib/docker/containers Em um host Docker, em uma pasta de exportações salvas ou em um compartilhamento onde você as armazena.

02

Ele reconhece o formato.

O Query Streams identifica o formato a partir do conteúdo das linhas, não do nome do arquivo — portanto, uma cópia renomeada ainda é lida, e um arquivo que não corresponde ao formato fixado é armazenado com uma justificativa, em vez de corromper a tabela.

03

Consulte-o ou junte-se a ele.

Execute consultas SQL a partir do portal, insira-as diretamente no Microsoft Excel ou no Google Sheets, ou utilize uma consulta federada para combinar os logs do contêiner com os usuários e pedidos no banco de dados do seu aplicativo — tudo em uma única instrução.

Perguntas frequentes sobre o registro de contêineres

Preciso alterar o driver de log do Docker?

Não. arquivo json é o driver padrão do Docker e é o driver suportado. Se você nunca configurou o registro de logs, os arquivos já estão lá e no formato correto.

Se você mudou para um driver diferente, o docker logs --timestamps O comando `export` é a rota de entrada: funciona independentemente do driver, porque a CLI lê através do daemon.

Como é que o programa sabe o nome do contêiner e não apenas o seu ID?

O Docker grava seu próprio registro de um contêiner na mesma pasta do log. O Query Streams lê o nome desse arquivo e o usa como coluna de identidade, com a imagem, o projeto Compose e o serviço mantidos como colunas adjacentes. O ID da pasta de 64 caracteres é mantido como id_do_containerAssim, nada se perde.

Se esse registro estiver ausente, ilegível ou não tiver um nome, o nome da pasta será usado em seu lugar e a varredura contabilizará quantas vezes isso aconteceu — portanto, uma alternativa aparecerá como um número que você pode consultar, e não como uma substituição silenciosa.

Estou usando o Docker Desktop para Windows ou Mac. Isso funciona?

Não diretamente contra os logs do arquivo JSON. O Docker Desktop os mantém dentro de sua própria máquina virtual, e um agente executado como serviço no host não pode acessá-los.

A solução é o perfil de exportação: docker logs --timestamps <container> redirecionado para um arquivo, em qualquer pasta que o Agente possa ler. Esse é um formato suportado por si só, não uma solução alternativa — é o mesmo método que as pessoas já usam para manter uma cópia de um log após a remoção de um contêiner.

Isso é em tempo real?

É sob demanda, e não por streaming. Os arquivos são lidos tal como estão no momento da execução da consulta, portanto, novas linhas aparecem à medida que seus contêineres as gravam e o arquivo é carregado — não em um cronograma fixo noturno, mas também não em um acompanhamento contínuo.

Para fazer uma pergunta sobre as últimas semanas em todos os contêineres e obter a resposta em uma planilha, essa é a forma útil e requer consideravelmente menos maquinário do que uma pilha de toras.

E quanto ao Kubernetes ou ao Podman?

Nenhuma das duas possui um perfil próprio atualmente, e preferimos afirmar isso a sugerir cobertura. O que se aplica é o formato de exportação: o perfil está vinculado ao formato exato. docker logs --timestamps Escreve — um carimbo de nanossegundos RFC 3339, um espaço e, em seguida, a própria linha do contêiner, um arquivo por serviço. As ferramentas que escrevem nesse mesmo formato leem com ele.

A maneira mais confiável de verificar isso para seus próprios arquivos é usar o Teste de conexão, que informa o que foi reconhecido antes de você confirmar qualquer coisa.

Meus contêineres registram JSON. Devo obter os campos deles como colunas?

Sim, para logs em formato JSON. O envelope do daemon é desembrulhado e o JSON do próprio contêiner dentro dele é dividido em colunas — nível, logger, mensagem, host e serviço, quando presentes. Tudo o que não corresponde a uma coluna nomeada é mantido em um espaço não especificado. dados coluna em vez de descartada, portanto, um campo incomum ainda pode ser consultado.

O único dado que não é extraído do JSON do contêiner é o carimbo de data/hora. Esse dado é fornecido pelo daemon, pois o carimbo de data/hora de um aplicativo pode estar em qualquer formato, e um formato incorreto desloca silenciosamente a linha no tempo.

E quanto a uma linha que o analisador sintático não consegue ler?

Ela é mantida, não descartada. Uma linha que não corresponde ao formato definido é retida como uma linha bruta com uma justificativa anexada, de modo que uma entrada malformada ou uma alteração inesperada no formato apareça como algo que você pode ver e consultar, em vez de como uma lacuna silenciosa em seus números.

Seus contêineres já estão se comunicando.

Conecte uma pasta de logs e execute sua primeira consulta em poucos minutos. Plano gratuito, sem necessidade de cartão de crédito, nada instalado em um contêiner.

Somente leitura · somente conexão de saída · seus registros permanecem no seu host