Docker et Portainer Nouveau
Connecter Journaux de conteneurs vers Excel, Sheets et l'IA
Docker génère un journal pour chaque conteneur ; interrogez-les tous simultanément. Le fichier JSON contient les journaux écrits par le démon. journaux Docker Les exportations que vous enregistrez manuellement et le journal du serveur de Portainer sont concernés. Indiquez le dossier dans Query Streams et chaque ligne devient une ligne contenant le nom réel du conteneur, son image et son service Compose, au lieu d'un répertoire rempli d'identifiants de 64 caractères.
Un dossier de journaux de conteneurs devient une table.
Query Streams lit les fichiers déjà écrits par le démon, en conserve le format et vous fournit des colonnes typées, le conteneur étant indiqué à côté de chaque ligne. Aucun processus secondaire, aucun pipeline de distribution, aucun index à maintenir : une ligne que l’analyseur ne peut pas lire est conservée avec une explication au lieu d’être ignorée.
a3f9c1…-json.logDocker
shopfront-stack_api.logexporter
portainer.logPortainerRotations, archives compressées et fichiers relus — gérés
SELECTIONNER application, service_composer,
compter(*) AS lignes
DE ensembles de fichiers.événements
OÙ flux = 'stderr'
GROUPE PAR application, service de composition
ORDER BY lignes DESCIntégrez-la à la base de données de votre application dans la même requête.
Fichiers que le démon écrit déjà, désormais un tableau sur lequel vous pouvez générer des rapports.
Deux outils, trois formats, pas de side-car
Chaque fiche indique précisément les fichiers lus par Query Streams et leur emplacement. Vous n'avez pas besoin de modifier votre pilote de journalisation pour que cela fonctionne. fichier json est la valeur par défaut de Docker, et c'est la valeur par défaut qui est prise en charge.
Journaux de conteneurs pris en charge
3 formats · 2 outils
Dockerpilote de journalisation de fichiers JSON
- Un
{"log","stream","time"}une enveloppe par ligne, écrite par le démon - Le nom du conteneur provient de Docker lui-même
config.v2.jsonà côté de la bûche - Projet/service Image et Compose s'accompagnent comme des colonnes
- Généralement
/var/lib/docker/containers - Ajoute ; rotations numérotées et
.gzsuivi
Dockerexport des journaux Docker
- Fichiers que vous avez enregistrés avec
docker logs --timestamps - Un tampon nanoseconde RFC 3339, puis la ligne propre au conteneur
- Les lignes de bannières de conteneur sont ignorées par déclaration, et non par hasard.
- N'importe quel dossier dans lequel vous conservez les exportations
- Un fichier par service ; le nom provient de la racine du fichier
PortainerJournal du serveur, console zerolog
portainer.logou la sortie propre du conteneur- Les codes de couleur ANSI sont supprimés avant l'analyse, donc un niveau est un niveau
- Le
clé=valeurLa queue se transforme en colonnes ; le reste atterrit dansdonnées - Les lignes de forme différente du serveur de tunnel intégré sont également lues
- Horodatage à la minute près, lu en UTC
De nouveaux formats de journaux de conteneurs sont ajoutés à chaque nouvelle version de l'Agent. Grâce à la mise à jour automatique des Agents, un format ajouté ultérieurement sera disponible dans votre connecteur sans intervention sur le serveur.
journaux Docker Exportez les journaux d'un hôte Swarm et du serveur Portainer CE 2.39.1. À noter : sur Docker Desktop pour Windows et Mac, les journaux au format JSON résident dans la machine virtuelle, où un agent exécuté en tant que service ne peut pas y accéder. Exportez-les avec docker logs --timestamps et utilisez le deuxième profil.
Des conteneurs dans chaque région, les journaux sont lus où ils s'assoient
Les conteneurs sont rarement tous exécutés au même endroit. Un hôte au bureau, un cluster Swarm dans une région cloud, un serveur unique dans un autre pays. Chaque emplacement exécute un agent réseau qui lit les fichiers journaux sur place et se connecte aux flux de requêtes. Pour votre pare-feu, il s'agit d'une connexion sortante ordinaire : aucun port à ouvrir ni VPN à établir.
journaux Docker exporter par service
composez le numéro.
Trois connexions sortantes, un seul point de contrôle : aucun port entrant, aucun VPN, aucune modification du pare-feu.
Un agent par emplacement
Un agent couvre un site entier plutôt qu'un seul dossier : chaque format de journal souhaité devient son propre connecteur de jeu de fichiers sur ce même agent. La configuration standard est d'un agent par emplacement. L'offre gratuite utilise un seul agent, tandis que les offres supérieures en utilisent plusieurs.
1 site = 1 agent = plusieurs connecteurs
Rien à ouvrir
L'agent établit une seule connexion sortante chiffrée, utilisée aussi bien pour la requête sortante que pour les données reçues. Aucun port entrant, VPN ou modification du pare-feu n'est requis ; vos identifiants restent au sein de votre réseau.
une seule connexion, dans les deux sens
Une requête sur plusieurs sites
Chaque source dans un requête fédérée Il désigne son propre agent, de sorte qu'une seule instruction peut lire un journal dans un pays et un journal dans un autre et renvoyer un seul résultat, ou joindre l'un ou l'autre à une base de données. Inclus dans les versions Business et Enterprise.
2 pays → 1 ensemble de résultats
Ils se tiennent au courant
Les agents se mettent à jour automatiquement ; ainsi, un format de journal de conteneur ajouté dans une version ultérieure est déployé sur tous les sites sans qu'aucune connexion serveur ne soit nécessaire pour l'installer. C'est pourquoi la liste ci-dessus représente un point de départ plutôt qu'une liste figée.
De nouveaux formats arrivent avec l'Agent
Noms, horloges et codes couleur
Un journal de conteneur n'est pas un fichier texte daté. Trois problèmes surviennent fréquemment lorsqu'on tente de le traiter comme des données ; ici, chacun est géré par déclaration plutôt que par conjecture.
Des noms, pas des identifiants hexadécimaux.
Docker nomme chaque dossier de journalisation d'après l'identifiant du conteneur, ce qui rend une requête groupée illisible. Query Streams lit l'enregistrement que Docker écrit à côté du journal et en extrait le nom réel, en conservant l'identifiant dans une colonne distincte.
a3f9c1…-json.log → app = shopfront-api
L'horloge du démon
Un conteneur qui affiche son propre horodatage en secondes Unix (ou temps d'époque) arrive en 1970, si l'on en croit les informations disponibles. L'heure de l'événement correspond à l'heure de capture du démon ; l'horodatage du conteneur est conservé dans une colonne plutôt que d'être considéré comme fiable.
heure de l'enveloppe → heure de l'événement
Codes de couleur dans le fichier
Les enregistreurs de console écrivent directement les séquences d'échappement du terminal dans le journal. Celles-ci sont supprimées avant l'analyse, de sorte qu'un niveau est lu comme un niveau et non comme un niveau entouré de caractères d'échappement ; les octets d'origine restent intacts.
Codes d'échappement supprimés → niveau = INF
Rien ne compte deux fois
Chaque fichier est identifié par ses 4 premiers kilo-octets, ce qui permet de reconnaître un fichier pivoté comme identique plutôt que de le relire depuis le début. Une fenêtre de duplication glissante détecte le chevauchement lorsqu'un processus d'écriture relit sa fin.
Préfixe de hachage de 4 Ko · Fenêtre de 20 000 enregistrements
Les colonnes que vous obtenez réellement
Il ne s'agit pas d'un simple bloc de texte avec un horodatage. Chaque format est analysé et converti en colonnes typées que vous pouvez filtrer, regrouper et agréger directement. De plus, lorsqu'un conteneur enregistre du JSON structuré, ses propres champs sont également décomposés en colonnes.
Chaque rangée contient également heure_événement, le timbre brut à partir duquel il a été lu, et le fichier dont il provient. Chaque format ajoute sa colonne d'identification — application pour les fichiers JSON et Portainer, récipient pour une exportation — et les lignes du fichier JSON contiennent en outre image, composer_project, composer_service et id_conteneurLe célibataire message La présence d'une colonne sur une exportation est intentionnelle : la ligne propre au conteneur est conservée intégralement plutôt que d'être devinée.
Où vos données de journalisation de conteneur peuvent être stockées
Les fichiers journaux ne sont pas une impasse. Connectez le dossier une seule fois et cette même connexion en lecture seule alimentera toutes les interfaces prises en charge par Query Streams : aucune deuxième configuration, aucune deuxième copie des données et aucun traitement différent de celui d’un connecteur de base de données.
Journal des conteneurs vers Excel
Microsoft Excel · Complément Excel
Importez directement les résultats des journaux de conteneurs en direct dans une feuille de calcul et actualisez-les à la demande — Excel de bureau, Excel Online, Microsoft 365.
Comment fonctionne ExcelJournalisation des conteneurs vers Google Sheets
Module complémentaire Sheets
Exécutez une requête de journal de conteneur enregistrée depuis la barre latérale et glissez-déposez les lignes dans la feuille. Les collaborateurs peuvent ensuite l'actualiser eux-mêmes.
Comment fonctionne Google SheetsServeur MCP des journaux de conteneur
Clients Claude, Cursor et MCP · Serveur MCP
Donnez à un assistant IA un accès en lecture seule au journal du conteneur avec le schéma dont il a besoin pour écrire du SQL correct — aucune information d'identification dans la conversation.
Comment fonctionne MCPAPI REST des journaux de conteneurs
point de terminaison HTTP
Publiez une requête de journalisation de conteneur sous forme de point de terminaison JSON authentifié, accessible à toute application, avec une spécification OpenAPI 3.1 et des collections Postman, Insomnia et Hoppscotch prêtes à l'emploi. Aucun port de base de données n'est ouvert.
Comment fonctionne une API REST ?Journal des conteneurs vers Airtable
Plateforme d'automatisation
Synchronisez les lignes de journal du conteneur avec une base Airtable selon une planification, ou récupérez-les dans un script d'automatisation Airtable.
Comment fonctionne AirtableJournaux de conteneur vers Baserow
Plateforme d'automatisation
Alimentez une table Baserow à partir du journal du conteneur via le point de terminaison REST — auto-hébergé ou cloud Baserow.
Comment fonctionne BaserowJournal de conteneurs vers SeaTable
Plateforme d'automatisation
Maintenez une base SeaTable à jour avec les données de journalisation des conteneurs sans exporter de fichier ni exposer la base de données.
Comment fonctionne SeaTableJournal des conteneurs vers Smartsheet
Plateforme d'automatisation
Intégrez les résultats du journal des conteneurs dans une grille Smartsheet afin que les plans et les rapports soient lus à partir du système source et non de l'exportation de la semaine précédente.
Comment fonctionne SmartsheetJournalisation des conteneurs vers Anvil
Anvil Works · Plateforme d'applications
Utilisez une application Python Anvil avec journalisation du conteneur via le point de terminaison REST au lieu d'intégrer les identifiants de base de données dans l'application.
Comment fonctionne AnvilJournalisation des conteneurs dans Power BI
Power Query M
Collez le code Power Query M généré dans l'éditeur avancé de Power BI et le rapport lira les résultats du journal du conteneur en direct via HTTPS — aucun pilote ODBC, aucun port de base de données ouvert.
Comment fonctionne Power BIAlertes et rapports des journaux de conteneurs
Slack · Discord · Courriel · Webhook
Programmez une requête de journalisation de conteneur et faites en sorte que les lignes soient envoyées à Slack, Discord, par e-mail ou via un webhook signé — ou conservez le message jusqu'à ce qu'un nombre de lignes, un seuil ou un pourcentage de variation dépasse la limite que vous avez définie.
Fonctionnement des alertes et des rapportsCe que cela ne fait pas délibérément
Il ne s'agit pas d'un flux en temps réel. Query Streams lit les fichiers tels qu'ils se trouvent sur le disque lors de l'exécution de la requête ; une boucle de redémarrage apparaît donc sous forme de lignes et non comme un flux continu. Si vous avez besoin d'alertes en moins d'une seconde sur une ligne dès son affichage, un pipeline de journalisation est l'outil approprié.
La sortie d'un conteneur est libre, ce qui a une conséquence importante : tout ce que votre application affiche se retrouve dans le tableau. Si elle enregistre un jeton ou l'adresse e-mail d'un client, cette chaîne de caractères est déjà présente dans le fichier journal et figurera également dans la colonne correspondante. Il n'existe pas de fonction d'exclusion d'en-tête comme pour un journal de serveur web ; traitez donc le tableau résultant avec la même précaution que vous le feriez pour le fichier journal.
Deux limites plus petites, nommées plutôt que cachées. Sur un journaux Docker La ligne d'exportation du conteneur est conservée intacte dans une seule message La colonne ; la réanalyse de cette ligne interne selon son propre format n'est pas encore implémentée. De plus, les attributs optionnels que Docker peut associer à une balise de journalisation ne sont reconnus que par leur forme ; aucun conteneur du corpus capturé ne les a utilisés, donc ce chemin est déclaré, mais non prouvé.
Le reste suit la conception habituelle. L'agent se connecte en sortie et lit les fichiers ; rien n'est installé dans le conteneur, aucune donnée n'est écrite en arrière-plan, le socket Docker et l'API ne sont jamais utilisés, et l'accès est en lecture seule. La durée de rétention est de 30 jours par défaut et vous pouvez la modifier.
Comment ça marche
Trois étapes, et rien n'est installé dans un conteneur.
Indiquez le dossier des journaux
Accordez à un agent Query Streams un accès en lecture à l'emplacement où les journaux sont déjà enregistrés. /var/lib/docker/containers sur un hôte Docker, dans un dossier d'exportations enregistrées, ou sur un partage où vous les avez rassemblées.
Il reconnaît le format
Query Streams identifie le format à partir du contenu des lignes, et non du nom de fichier ; ainsi, une copie renommée reste lisible, et un fichier qui ne correspond pas au format défini est mis en attente avec une explication au lieu de corrompre la table.
Interrogez-le ou joignez-le
Exécutez des requêtes SQL depuis le portail, intégrez-les dans Microsoft Excel ou Google Sheets, ou utilisez une requête fédérée pour joindre les journaux de conteneurs aux utilisateurs et aux commandes de votre base de données d'application, le tout en une seule instruction.
FAQ sur les journaux de conteneurs
Dois-je changer mon pilote de journalisation Docker ?
Non. fichier json Il s'agit du pilote par défaut de Docker, et c'est celui qui est pris en charge. Si vous n'avez jamais configuré la journalisation, les fichiers sont déjà présents et correctement structurés.
Si vous avez changé de conducteur, le docker logs --timestamps L'exportation est la voie d'entrée : elle fonctionne quel que soit le pilote, car l'interface de ligne de commande lit à travers le démon.
Comment connaît-il le nom du conteneur et pas seulement son identifiant ?
Docker enregistre le nom du conteneur dans le même dossier que le journal. Query Streams lit ce nom et l'utilise comme colonne d'identité, tandis que l'image, le projet Compose et le service sont conservés dans des colonnes adjacentes. L'identifiant du dossier (64 caractères) est conservé. id_conteneur, donc rien n'est perdu.
Si cet enregistrement est manquant, illisible ou ne comporte pas de nom, le nom du dossier est utilisé à la place et le balayage comptabilise la fréquence à laquelle cela s'est produit ; ainsi, une solution de repli apparaît sous la forme d'un nombre que vous pouvez consulter, et non comme une substitution silencieuse.
J'utilise Docker Desktop pour Windows ou Mac. Est-ce que cela fonctionne ?
Je ne m'attaque pas directement aux journaux au format JSON. Docker Desktop les conserve dans sa propre machine virtuelle, et un agent exécuté en tant que service sur l'hôte ne peut pas y accéder.
La solution consiste à utiliser le profil d'exportation : docker logs --timestamps <conteneur> Les données sont redirigées vers un fichier, dans n'importe quel dossier accessible par l'agent. Il s'agit d'un format pris en charge à part entière, et non d'une solution de contournement : c'est la méthode déjà utilisée pour conserver une copie des journaux après la suppression d'un conteneur.
Est-ce en temps réel ?
Il s'agit d'une lecture à la demande plutôt que d'un traitement en continu. Les fichiers sont lus au fur et à mesure de l'exécution de la requête ; les nouvelles lignes apparaissent donc au fur et à mesure que vos conteneurs les écrivent et que le fichier est pris en compte — non pas selon une planification nocturne fixe, mais sans suivi en temps réel non plus.
Pour poser une question portant sur les dernières semaines et couvrant chaque conteneur, et obtenir la réponse dans un tableur, cette forme est utile et nécessite considérablement moins de machines qu'une pile de bûches.
Et Kubernetes ou Podman ?
Aucun des deux ne possède aujourd'hui de profil propre, et nous préférons le dire plutôt que de sous-entendre une couverture. Ce qui s'applique, c'est le format d'exportation : le profil est lié à la forme exacte. docker logs --timestamps L'écriture se fait comme suit : un tampon nanoseconde RFC 3339, un espace, puis la ligne propre au conteneur, un fichier par service. Les outils qui écrivent selon la même structure lisent également selon cette structure.
La méthode la plus fiable pour vérifier vos propres fichiers est d'effectuer un test de connexion, qui vous indique ce qu'il a reconnu avant toute action de votre part.
Mes conteneurs enregistrent du JSON. Est-ce que je récupère leurs champs sous forme de colonnes ?
Oui, pour les journaux au format JSON. L'enveloppe du démon est déballée et le JSON propre au conteneur est aplati en colonnes : niveau, journaliseur, message, hôte et service, le cas échéant. Tout ce qui ne correspond à aucune colonne nommée est conservé dans un espace vide. données La colonne n'est pas supprimée, ce qui permet d'interroger un champ inhabituel.
Le seul élément qui n'est pas extrait du JSON du conteneur est l'horodatage. Celui-ci provient du démon, car l'horodatage propre à une application peut être dans n'importe quel format et une erreur de formatage entraîne un décalage temporel silencieux de la ligne.
Que se passe-t-il si l'analyseur syntaxique ne peut pas lire une ligne ?
Elle est conservée, non supprimée. Une ligne ne respectant pas le format défini est conservée comme une ligne brute avec une explication, de sorte qu'une entrée malformée ou un changement de format inattendu apparaisse comme une information visible et exploitable, et non comme une lacune silencieuse dans vos données.
Vos conteneurs communiquent déjà.
Connectez un dossier de logs et exécutez votre première requête en quelques minutes. Offre gratuite, sans carte de crédit, sans installation dans le conteneur.
Lecture seule · Connexion sortante uniquement · Vos journaux restent sur votre hôte












