News Ticker

ctop: monitoriamo i nostri container

Spesso sulle pagine di MMUL vi abbiamo parlato di container e di come questi stiano diventando la norma nella gestione di infrastrutture più o meno complesse.

Nella nostra serie di articoli riguardanti il logging di container Docker, abbiamo colto l’occasione per fare pratica con i comandi base.

I container, anche se non utilizzati in produzione, risultano molto comodi nel day-by-day, rendendo più rapide alcune operazioni per cui, storicamente, si utilizzavano le macchine virtuali. Ecco alcuni esempi:

Dovete ad esempio creare un pacchetto RPM da caricare su alcune macchine CentOS7, ma sul vostro computer avete un altro OS? Invece di una VM, o di utilizzare alien, basterà lanciare:

$ uname -v
Darwin Kernel Version 17.0.0: Thu Aug 24 21:48:19 PDT 2017; root:xnu-4570.1.46~2/RELEASE_X86_64
$ docker run -it --rm centos:7
[root@9c74ed51f232 /]# uname -a
Linux 9c74ed51f232 4.9.49-moby #1 SMP Wed Sep 27 23:17:17 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@9c74ed51f232 /]# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core) 
[root@9c74ed51f232 /]#

Ed avrete un sistema temporaneo per le vostre necessità in pochi secondi, ad eccezione del primo lancio che risulterà più lungo per via dello scaricamento dell’immagine (ma queste tempistiche riguarderanno solo il primo container avviato).

Volete verificare se il vostro sito viene erogato correttamente dall’ultima versione di Apache e PHP? Nulla di più facile che sull’hub ufficiale siano presenti già immagini con le versioni da voi richieste, senza dover sporcare il vostro sistema o, ancora, installare una macchina virtuale.

Insomma, i container sono spesso utili, e può capitare che ci si trovi con parecchi container avviati che fanno diverse cose:

$ docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                NAMES
67083350e918        ansible/awx_task:latest   "/tini -- /bin/sh ..."   2 months ago        Up 14 minutes       8052/tcp                             awx_task
2089fb82ccc6        ansible/awx_web:latest    "/tini -- /bin/sh ..."   2 months ago        Up 14 minutes       0.0.0.0:80->8052/tcp                 awx_web
689da5e16f6d        memcached:alpine          "docker-entrypoint..."   2 months ago        Up 14 minutes       11211/tcp                            memcached
23a464ac0525        rabbitmq:3                "docker-entrypoint..."   2 months ago        Up 14 minutes       4369/tcp, 5671-5672/tcp, 25672/tcp   rabbitmq
6aee4b150423        postgres:9.6              "docker-entrypoint..."   2 months ago        Up 14 minutes       5432/tcp                             postgres

Ma come capire esattamente cosa sta avvenendo in quei container, chi usa le risorse e come? Oltre ad analizzare i processi nel sistema, viene comodo il tool ctop scritto da Quay (un azienda che fornisce un software di gestione delle immagini di container).

ctop si comporta esattamente come il comando top, ma lavora nello specifico con i container; può essere installato come container o in locale dalla macchina, ma ovviamente prima di installarlo definitivamente vorrete provarlo: si scarica rapidamente con un pull:

$ docker image pull quay.io/vektorlab/ctop
Using default tag: latest
latest: Pulling from vektorlab/ctop
a3ed1479d3b5: Pull complete 
Digest: sha256:b39cb4f9cb1695ec13efc87775951f9304c940c5fa3bc54bc0865b77cd1b6250
Status: Downloaded newer image for quay.io/vektorlab/ctop:latest

sono meno di 4MB, ed avrete tutto il necessario per provarlo. Basterà lanciare un container mappando al suo interno il socket generato dal demone Docker, che gli permetterà di avere visibilità sullo stato generale del sistema:

$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock quay.io/vektorlab/ctop:latest

La schermata è decisamente familiare:

Ecco la lista dei vostri container, con indicazione in verde/rosso su quali sono in esecuzione e quali no, e delle informazioni iniziali sull’uso di CPU, RAM, rete ed I/O su disco. Selezionando uno dei vostri container e premendo invio potrete andare nel dettaglio:

Le opzioni disponibili non sono tantissime, ma sicuramente è un buon punto di inizio per avere una visione d’insieme:

Una volta usciti il container verrà distrutto (abbiamo dato l’opzione –rm) e tutto sarà ripulito.

Se vi interessa il comando potete anche installarlo in maniera definitiva sul vostro sistema, nulla di più semplice:

$ wget https://github.com/bcicen/ctop/releases/download/v0.4.1/ctop-0.4.1-linux-amd64 -O ctop
$ sudo mv ctop /usr/local/bin/
$ sudo chmod +x /usr/local/bin/ctop

Pronti a monitorare?