Un monitoraggio efficace dei container Docker è fondamentale per garantire la stabilità e il corretto funzionamento delle applicazioni. I log di Docker svolgono un ruolo cruciale, fornendo informazioni approfondite sul funzionamento interno dei container, aiutando a monitorare le prestazioni, individuare errori e risolvere i problemi in modo più efficiente. Questa guida completa vi guiderà attraverso il processo di recupero e interpretazione dei log di Docker, fornendovi le conoscenze necessarie per risolvere le problematiche più comuni relative ai container.
Informazioni sui registri Docker
I log di Docker sono un registro dettagliato di tutte le attività che si verificano all’interno di un container Docker in esecuzione. Include sia l’output standard (stdout) sia i messaggi di errore standard (stderr), consentendo di monitorare le prestazioni del container e diagnosticare potenziali problemi.
Per impostazione predefinita, i log di Docker vengono archiviati come file JSON all’interno del sistema host nella directory “/var/lib/docker/containers”.Ogni container genera il proprio file di log nel formato “[container_id]-json.log”.È possibile accedere direttamente a questi log o utilizzare il docker logscomando nel terminale per una facile visualizzazione.
Questi log contengono messaggi applicativi essenziali, avvisi e dettagli sugli errori che facilitano la risoluzione dei problemi. Possono anche fornire informazioni relative al sistema, come eventi di avvio e metriche di utilizzo delle risorse.
Per facilitare una migliore gestione dei log, Docker utilizza driver di logging. Un driver di logging determina come e dove i log vengono archiviati o trasmessi. Il driver di logging predefinito, json-file, acquisisce i log sulla macchina locale in formato JSON, ma è possibile selezionare driver alternativi per inoltrare i log a sistemi esterni per una migliore gestione e analisi.
Accesso ai registri Docker
Per visualizzare i log di un contenitore in esecuzione che utilizza il driver di registrazione “json-file” o journald, è possibile eseguire il seguente comando:
docker logs [OPTIONS] CONTAINER_NAME_OR_ID
Sostituisci CONTAINER_NAME_OR_IDcon il nome o l’ID del contenitore di destinazione. Per ottenere un elenco di tutti i contenitori in esecuzione, utilizza il comando:
docker ps
Questo comando rivela i contenitori attivi insieme ai rispettivi ID, nomi, stati e altre informazioni rilevanti.

Ad esempio, se Docker esegue due container, denominati openwebui e ollama, per accedere ai log del container openwebui, dovresti eseguire quanto segue:
docker logs openwebui

È anche possibile utilizzare l’ID del contenitore al posto del nome per visualizzare i registri, come mostrato di seguito:
docker logs 1f351684ae30

Opzioni e flag dei registri Docker
Il docker logscomando supporta diverse opzioni per personalizzare la visualizzazione del registro. Ecco alcuni parametri utili:
| Opzione | Descrizione | Comando di esempio |
|---|---|---|
| -dettagli | Visualizza ulteriori dettagli nei registri. | docker logs –details container_name |
| –seguire, -f | Visualizza continuamente le nuove voci di registro in tempo reale. | docker logs -f container_name |
| -Da | Mostra i registri generati dopo un tempo o una durata impostati (ad esempio, 2024-07-08T13:42:13Z o 10m). | docker logs –since 10m container_name |
| –coda, -n | Visualizza un numero specificato di righe dalla fine dei registri. | docker logs –tail 50 container_name |
| –timestamp, -t | Aggiunge timestamp a ogni voce di registro. | docker logs -t container_name |
| -Fino a | Visualizza i registri generati prima di un orario specificato. | docker logs –until 2024-07-08T14:00:00Z container_name |
Ad esempio, per visualizzare le ultime 50 voci di registro di un contenitore specifico, è necessario eseguire:
docker logs --tail 50 openwebui

Allo stesso modo, è possibile utilizzare altre opzioni, ad esempio --followper gli aggiornamenti in tempo reale dei registri o --sinceper le voci di registro filtrate in base al tempo.
Salvataggio dei registri Docker in un file
Per salvare i log di Docker in un file di testo, utilizzare l’operatore di reindirizzamento o le opzioni di comando disponibili. Ad esempio, il comando seguente salverà i log di un container specificato in “container_logs.txt”:
docker logs container_name > container_logs.txt

Successivamente potrai accedere a questo file con qualsiasi editor di testo (ad esempio, Blocco note, Visual Studio Code o nano) per rivedere i log salvati.

Visualizzazione dei registri in Docker Compose
Per accedere ai log dei container gestiti da Docker Compose, utilizzare il docker compose logscomando. Per visualizzare i log di tutti i container nel progetto Compose, eseguire:
docker compose logs
Se sei interessato ai log di un servizio specifico, aggiungi il nome del servizio al comando:
docker compose logs service_name
Suggerimenti per la gestione dei log Docker
Docker utilizza driver di logging per acquisire e archiviare l’output dai container. Il driver json-file predefinito salva i log in formato JSON sull’host.È possibile passare a driver alternativi per inviare i log a servizi esterni, ottenendo un maggiore controllo sulla gestione dei log.
Docker offre due modalità per la distribuzione dei log. La modalità bloccante trasmette immediatamente i log, ma potrebbe avere un leggero impatto sulle prestazioni. Al contrario, la modalità non bloccante conserva temporaneamente i log in memoria prima di inoltrarli, il che può ridurre al minimo i ritardi, ma rischia di causare la perdita dei log se la memoria si riempie.
Per una maggiore flessibilità, si consiglia di gestire la registrazione all’interno dell’applicazione. Tuttavia, dato che i dati dei container sono effimeri, è consigliabile archiviare i log in un archivio persistente o inoltrarli a un servizio di gestione dei log esterno.
L’utilizzo di volumi Docker è un metodo affidabile per proteggere i log. I volumi salvano i dati direttamente sull’host e ne garantiscono la disponibilità anche durante gli arresti o i riavvii dei container, rendendoli preferibili per l’archiviazione a lungo termine rispetto ai mount bind.
Un’altra strategia efficace è quella di utilizzare un contenitore di logging dedicato. Questo contenitore specializzato raccoglie e gestisce i log provenienti da diversi contenitori, indirizzandoli a un sistema centralizzato, mantenendo così i contenitori dell’applicazione principale leggeri e gestibili.
Conclusione
In conclusione, i log di Docker sono fondamentali per monitorare le prestazioni dei container e facilitare la rapida risoluzione dei problemi. Utilizzando comandi come docker logse rispettando le best practice, tra cui storage persistente e driver di logging efficaci, è possibile mantenere una gestione affidabile dei log. Un framework di logging ben organizzato contribuirà a mantenere stabili i container e a garantire l’efficienza delle applicazioni. Per un monitoraggio e un’analisi dei log ottimizzati, si consiglia di integrare strumenti come ELK Stack, Fluentd, Prometheus e Grafana.
Lascia un commento