GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Guida completa per principianti alla registrazione Docker

La conoscenza della registrazione con Docker può essere molto utile per le attività quotidiane di amministrazione del sistema, che si tratti di risoluzione dei problemi o monitoraggio di base. Senza tenere traccia dei log su Docker, l'attenuazione dei problemi sarebbe molto più difficile durante l'analisi delle anomalie.

Questo articolo esplora alcune informazioni importanti su quell'area per semplificare la comprensione di come gestire i file di registro associati a Docker sul tuo sistema Linux.

Vorrei iniziare esplorando le parti più basilari e approfondire gradualmente alcune specifiche.

Come visualizzare i registri Docker

Puoi utilizzare i docker logs comando per recuperare qualsiasi cosa stia succedendo con il servizio all'interno di un contenitore in esecuzione.

La sintassi è semplice:

docker logs container_name_or_ID

Probabilmente sai già che puoi usare la docker ps comando per visualizzare il nome e l'ID dei contenitori in esecuzione.

Facciamo un esempio del mondo reale. Ho distribuito Nextcloud con Docker. Il contenitore si chiama nextcloud, non sorprende.

Ora, per visualizzare i log del contenitore denominato nextcloud , usa:

docker logs nextcloud

Ecco una versione troncata dell'output del comando precedente:

172.18.0.2 - - [23/Jul/2021:19:36:09 +0000] "HEAD /.env HTTP/1.1" 302 1571 "-" "python-requests/2.26.0"
172.18.0.2 - - [23/Jul/2021:19:49:52 +0000] "HEAD /c99.php HTTP/1.1" 302 1565 "-" "python-requests/2.26.0"
172.18.0.2 - - [24/Jul/2021:16:25:23 +0000] "HEAD /backup.tar HTTP/1.1" 302 1571 "-" "python-requests/2.26.0"
172.18.0.2 - - [24/Jul/2021:16:25:24 +0000] "HEAD /backup.zip HTTP/1.1" 302 1569 "-" "python-requests/2.26.0"
172.18.0.2 - - [25/Jul/2021:20:36:01 +0000] "GET / HTTP/1.1" 302 1590 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BW/1.1; bit.ly/2W6Px8S) Chrome/84.0.4147.105 Safari/537.36"
172.18.0.2 - - [25/Jul/2021:20:36:07 +0000] "GET /custom_apps/richdocumentscode/proxy.php?req=/hosting/capabilities HTTP/1.1" 200 721 "-" "Nextcloud Server Crawler"
172.18.0.2 - - [25/Jul/2021:20:36:04 +0000] "GET /login HTTP/1.1" 200 7501 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BW/1.1; bit.ly/2W6Px8S) Chrome/84.0.4147.105 Safari/537.36"

Troppi log? La cosa buona è che ci sono varie opzioni che rendono la visualizzazione dei log della finestra mobile molto più semplice, proprio come i log in Linux.

Registri Tail Docker per visualizzare solo un certo numero di righe

Il comando dei registri Docker ha --tail attributo che può essere utilizzato in modo simile al comando tail.

Ciò significa che puoi usarlo per visualizzare solo un certo numero di righe di registri Docker dalla fine.

Ad esempio, per visualizzare le ultime 50 righe di un contenitore, puoi utilizzare:

docker logs --tail 50 container_name_or_ID

Puoi usare il comando precedente anche in questo modo

docker logs -n=50 container_name_or_ID

Visualizzazione dei registri Docker in tempo reale su un container live

Puoi visualizzare totalmente i log del contenitore in tempo reale. Per “seguire” i log, usa il --follow o il -f attributo.

docker logs -f container_name_or_ID

Quando esegui i registri docker con l'opzione Segui, noterai che le nuove righe di registro verranno segnalate dal contenitore con il passare del tempo.

Per uscire, puoi semplicemente utilizzare Ctrl+C combinazione di tasti e tornare al prompt del terminale.

La maggior parte delle opzioni nei docker logs il sottocomando può essere combinato per produrre il risultato desiderato.

Ad esempio, docker logs -f inonderà lo schermo con tutti i registri dall'inizio. Non lo vorresti. Quello che puoi fare è combinare entrambi tail e follow opzioni come questa:

docker logs -f --tail 20 container_name_or_ID

Il comando precedente mostrerà le ultime 20 righe dei registri e quindi seguirà i registri in tempo reale.

Quando aggiorni i contenitori dell'app con il ridimensionamento, il comando precedente può essere molto utile prima di rimuovere un contenitore precedente.

Visualizza timestamp nei registri Docker

Se vuoi vedere anche il timestamp delle voci di log, puoi usare il -t opzione.

docker logs -t container_name_or_ID

Questo può essere facilmente combinato con altre opzioni come --follow e --tail .

Il comando seguente mostrerà le ultime 10 righe del file di registro di un determinato contenitore con timestamp allegati a ciascuno di essi

docker logs -n=10 -t container_name_or_ID

Visualizzazione dei registri Docker in un periodo di tempo specificato

Quando stai indagando su un problema, il tempo può essere un fattore critico, nel qual caso il --since e --until i flag potrebbero rivelarsi molto utili.

Ad esempio, se stai indagando su un problema che si è verificato nelle ultime 24 ore, il seguente comando mostrerà i contenuti registrati di qualsiasi cosa sia accaduta solo durante quel periodo:

docker logs --since 1440m -t container_name_or_ID

1440m nel comando sopra denota 24×60 minuti. Aggiungendo il -t o il --timestamps flag assicura che le righe segnalate vengano etichettate con un timestamp per consentirti di comprendere incidenti o errori ancora più facilmente. Suggerirei di aggiungerlo quando chiedi informazioni su qualsiasi contenitore.

Allo stesso modo, se hai bisogno dei dettagli del registro dopo le prime 24 ore dall'avvio della distribuzione, il comando equivalente sarebbe:

docker logs --until 1440m -t nextcloud

Oltre a specificare il tempo in minuti, i due flag precedenti possono essere utilizzati anche con un timestamp specifico che -t genera. Il formato è come 2021-07-28T06:20:00 .

docker logs --since 2021-07-28 -t container_name_or_ID

Il comando precedente mostrerà i registri dal 28 luglio 2021.

Per una panoramica completa dei registri docker, puoi anche controllare la sua pagina man con man docker-logs.

Accesso ai log Docker dall'interno del container

In alcuni casi d'uso interessanti, potresti optare per un approccio ibrido, in cui accedi ai log specifici dell'applicazione dall'interno dei contenitori.

Per farlo, accedi al contenitore Docker:

docker exec -it container_name_or_ID sh

E poi puoi usare i normali strumenti Linux per ottenere i log relativi alle applicazioni. Un approccio potrebbe essere quello di ottenere l'ID di processo del servizio desiderato utilizzando il comando ps:

ps aux

Ottieni i dettagli su questo processo:

cat /proc/PID_of_process/fd/1

Registri del servizio di sistema Docker

Se desideri vedere i log del servizio Docker stesso sull'host, puoi utilizzare journalctl se sei su Ubuntu 16.04 o successivo:

sudo journalctl -u docker
Come utilizzare il comando journalctl per analizzare i registri in LinuxGuida per principianti all'utilizzo dei comandi journalctl per visualizzare, filtrare e analizzare i registri del journal in Linux. Manuale LinuxAbhishek Prakash

Dove sono archiviati i registri Docker?

Dovresti trovare i log della finestra mobile in /var/lib/docker/containers directory sul sistema host. Questa directory contiene i file di registro relativi a tutti i contenitori nelle rispettive directory. Puoi identificare le directory con l'ID contenitore.

Ho usato il docker ps per trovare quel 70f19fde9076 è l'ID contenitore del contenitore Nextcloud.

Se guardo nella directory in cui sono archiviati i registri della finestra mobile:

[email protected]:~$ sudo ls -lh /var/lib/docker/containers

total 16K
drwx------ 4 root root 4.0K Jul 27 18:48 0efe12b28562c42619e533ad5f524d56740a7a3739d9e082c758bac95ae2a46f
drwx------ 4 root root 4.0K Jul 27 18:57 12c55f365f93ecb7f91e40bc130ddc2409216a61bbb244cd045a22b4513416d3
drwx------ 4 root root 4.0K Jul 27 18:58 70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e
drwx------ 4 root root 4.0K Jul 27 18:57 a436399ef16a3efc0a909b9c3f725938e595e0b8fd34644b13f28b2c9bcb4ed7

Attualmente ci sono quattro container in esecuzione e puoi vedere che il terzo corrisponde a quello che dobbiamo esaminare (inizia con 70f19fde9076 ).

Se controlli il contenuto di questa directory, puoi vedere che il nostro file di registro si trova proprio lì!

[email protected]:~$ sudo ls -lh /var/lib/docker/containers/70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e

total 192K
-rw-r----- 1 root root 150K Jul 27 18:58 70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e-json.log
drwx------ 2 root root 4.0K Jul 19 17:10 checkpoints
-rw------- 1 root root 5.5K Jul 27 18:58 config.v2.json
-rw-r--r-- 1 root root 1.5K Jul 27 18:58 hostconfig.json
-rw-r--r-- 1 root root   13 Jul 27 18:58 hostname
-rw-r--r-- 1 root root  198 Jul 27 18:58 hosts
drwx------ 3 root root 4.0K Jul 19 17:10 mounts
-rw-r--r-- 1 root root   79 Jul 27 18:58 resolv.conf
-rw-r--r-- 1 root root   71 Jul 27 18:58 resolv.conf.hash

Pertanto, il file di registro corrispondente è 70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e-json.log che è lo stesso file che stavi leggendo quando ho eseguito i docker logs comando all'inizio.

Consentitemi di verificare rapidamente che:

[email protected]:~$ sudo cat /var/lib/docker/containers/70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e/70f19fde907672b9a6e5ff3b7db0c9ecbcb68d419712cb04d03d77694cd2ca4e-json.log

{"log":"172.18.0.2 - - [23/Jul/2021:19:36:09 +0000] \"HEAD /.env HTTP/1.1\" 302 1571 \"-\" \"python-requests/2.26.0\"\n","stream":"stdout","time":"2021-07-23T19:36:09.837857567Z"}
{"log":"172.18.0.2 - - [23/Jul/2021:19:49:52 +0000] \"HEAD /c99.php HTTP/1.1\" 302 1565 \"-\" \"python-requests/2.26.0\"\n","stream":"stdout","time":"2021-07-23T19:49:52.996108799Z"}
{"log":"172.18.0.2 - - [24/Jul/2021:16:25:23 +0000] \"HEAD /backup.tar HTTP/1.1\" 302 1571 \"-\" \"python-requests/2.26.0\"\n","stream":"stdout","time":"2021-07-24T16:25:23.445225166Z"}
{"log":"172.18.0.2 - - [24/Jul/2021:16:25:24 +0000] \"HEAD /backup.zip HTTP/1.1\" 302 1569 \"-\" \"python-requests/2.26.0\"\n","stream":"stdout","time":"2021-07-24T16:25:24.772881041Z"}
{"log":"172.18.0.2 - - [25/Jul/2021:20:36:01 +0000] \"GET / HTTP/1.1\" 302 1590 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BW/1.1; bit.ly/2W6Px8S) Chrome/84.0.4147.105 Safari/537.36\"\n","stream":"stdout","time":"2021-07-25T20:36:03.678967877Z"}
{"log":"172.18.0.2 - - [25/Jul/2021:20:36:07 +0000] \"GET /custom_apps/richdocumentscode/proxy.php?req=/hosting/capabilities HTTP/1.1\" 200 721 \"-\" \"Nextcloud Server Crawler\"\n","stream":"stdout","time":"2021-07-25T20:36:07.404618408Z"}
{"log":"172.18.0.2 - - [25/Jul/2021:20:36:04 +0000] \"GET /login HTTP/1.1\" 200 7501 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko; compatible; BW/1.1; bit.ly/2W6Px8S) Chrome/84.0.4147.105 Safari/537.36\"\n","stream":"stdout","time":"2021-07-25T20:36:07.619020402Z"}

Il contenuto del registro è lo stesso, ma dal momento che sto leggendo il file di registro direttamente dall'host, questo ha molto gergo rispetto ai docker logs comando utilizzato in precedenza.

Abilitazione della rotazione del registro per Docker (JSON)

Per impostazione predefinita, per la registrazione basata su file JSON, la rotazione del registro su Docker è disabilitata.

Ciò potrebbe rappresentare un problema con lo spazio su disco se le dimensioni dei file di registro aumentano. La nostra istanza Ghost basata su Docker ha visto i suoi file di registro raggiungere dimensioni fino a 20 GB. Vorresti evitare tale situazione abilitando la rotazione dei log.

Per abilitare la rotazione dei log per Docker, modifica il /etc/docker/daemon.json file:

sudo nano /etc/docker/daemon.json

Aggiungi le seguenti righe e salva il file:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3" 
  }
}

Riavvia il demone Docker:

sudo systemctl restart docker

La configurazione di cui sopra è ovviamente rilevante per un'installazione Docker generica, che ha la registrazione JSON impostata come predefinita. Quindi tieni presente che ogni altro meccanismo di registrazione (elencato di seguito) ha il proprio modo di implementare la rotazione.

Una breve parola sui driver di registrazione

Hai notato "json" nel nome del file di registro di prima? Questo perché JSON File è il driver di registrazione predefinito su Docker.

Oltre a JSON, ci sono anche molti altri meccanismi di registrazione tra cui scegliere:

  • File locale
  • Loggerie
  • Formato esteso Graylog (GELF)
  • Registro di sistema
  • Registri Amazon Cloudwatch (AWS)
  • Tracciamento eventi in Windows(ETW)
  • Fluente
  • Registri di progetto Google Cloud (GCP)
  • Diario
  • Splunk
  • Stoccaio

Per implementazioni su larga scala, GELF , AWS , GCP e Fluentd sono raccomandati in quanto implementano un approccio centralizzato. Ma per la piccola scala, JSON fa bene il suo lavoro, mentre è locale , Syslog e Diario sono anche abbastanza adatti. Registro di sistema e Logstash sono particolarmente utili se l'analisi di log complessa diventa un requisito. ETW è specifico per Windows, mentre Splunk si concentra sulla registrazione remota.

A partire da Docker Engine 20.10, è stata introdotta una nuova funzionalità denominata "dual-logging" che garantisce l'esecuzione dei docker logs comando oltre a eseguire la rotazione del registro indipendentemente dal driver di registrazione in vigore.

Riepilogo

In questo articolo, ho iniziato con le nozioni di base su come visualizzare i log per qualsiasi container Docker, sia a livello di container che di sistema host. Ti ho anche mostrato come individuare la posizione fisica dei file di registro specifici del contenitore che risiedono sul tuo sistema host. Ti ho mostrato brevemente come controllare i log per il servizio Docker sull'host stesso.

Successivamente, ho discusso dei driver di registrazione concentrandomi sul meccanismo predefinito e ho anche evidenziato la nuova funzione di doppia registrazione.

Spero che questi suggerimenti ti aiutino nelle tue attività quotidiane di monitoraggio o apprendimento. Eventuali altri pensieri e suggerimenti sono più che benvenuti! Si prega di condividerli nella sezione commenti qui sotto.


Docker
  1. Come eseguire Nginx in un contenitore Docker:una guida passo passo

  2. Una guida per principianti a gawk

  3. Configura MongoDB su Docker

  4. Una guida rapida all'uso di Docker Compose

  5. La guida completa per principianti a LVM in Linux

Guida completa per la rimozione delle immagini Docker

Guida per principianti alla politica di riavvio di Docker

Guida per principianti all'analisi dei registri in Linux con il comando journalctl

Guida completa per principianti alla distribuzione del cluster Kubernetes su CentOS (e altri Linux)

Guida completa all'hosting automatico di Ghost CMS con Docker

Guida per principianti al mondo Docker