Come controllare la rete dalla shell Linux

Monitoring dal Terminale

Monitoring dal Terminale

PREMESSA

Purtroppo rispetto a molte altre nazioni nel mondo e, nella stessa Europa, ci troviamo ad avere ancora delle connessioni ad Internet che, nella maggior parte del paese, sono a dir poco scandalose.

In precedenti articoli abbiamo provato a mettere un po’ di pepe al nostro pc lavorando sulla gestione della RAM oppure sulla modifica dei parametri del kernel tramite Sysctl, oppure accellerando la risoluzione degli indirizzi DNS tramite la creazione di un meccanismo di Cache usando, ad esempio, PDNSD.

Oggi vedremo come colmare quella parte di “monitoring” sulla velocita’ della nostra rete, presentando questo elenco di utilissimi tool, da riga di comando, che vi permetteranno di avere il polso della situazione in tempo reale. Troverete sicuramente quello che fa al caso vostro.

P.S. : I seguenti programmi sono tutti disponibili nei repository principali di Ubuntu, quindi per installarli bastera’ scrivere :

apt-get install nome del programma

NETWORK TOOL

IPTState : un’interfaccia simile a Top collegata alla vostra tabella connection-tracking di netfilter.
Utilizzando iptstate si può verificare in modo interattivo il traffico che attraversa il tuo firewall netfilter/iptables , ordinato per vari criteri, è possibile limitare la visualizzazione con vari criteri, ed e’ possibile cancellare gli stati dalla tabella.

Pktstat : visualizza un elenco in tempo reale delle connessioni attive viste su una interfaccia di rete, e quanta banda viene utilizzata. Parzialmente decodifica i protocolli HTTP e FTP per mostrare il nome del file che viene trasferito. Anche i nomi delle applicazioni X11 sono mostrate.

NetHogs : diversamente da altri, invece che “spacchettare” il traffico verso il “basso” per protocollo o per sottorete, come la maggior parte degli strumenti fanno, mostra la banda utilizzata dai vari programmi. NetHogs non si basa su un modulo del kernel speciale da caricare. Se c’è ad un tratto molto traffico di rete, si può lanciare subito NetHogs e vedere immediatamente quale PID è la causa. Questo rende facile individuare i programmi che sono impazziti e stanno improvvisamente prendendo tutta la vostra banda di rete.

IPTraf : un programma (storico) che raccoglie statistiche di rete per Linux. Anch’esso raccoglie una serie di dati come i pacchetti delle connessioni TCP e conteggio dei byte, le statistiche sulle interfaccie e gli indicatori di attività, dati TCP/UDP sul traffico, e traffico per LAN.

Bmon : bmon è un monitor di banda, destinato per il debug ed il monitoraggio real-time, in grado di recuperare le statistiche da vari tipi d’ingresso. Fornisce metodi di uscita vari tra cui un’interfaccia basata su librerie curses. L’insieme dei moduli per l’input sono specifici per ogni tipologia di architettura e prevedono un nucleo comune con l’elenco delle interfacce e dei loro contatori.

Il nucleo memorizza questi contatori e fornisce una stima della velocità ed una storia degli ultimi 60 secondi, minuti, ore e giorni ai moduli di uscita che li mostrano in base alla configurazione, durante l’esecuzione, è possibile selezionare l’interfaccia da controllare e premere il tasto “g” per vedere un grafico attivo come questo:

Speedometer : si tratta di un interessante progetto che permette di visualizzare e misurare la velocità dei dati attraverso una rete o dei dati che vengono memorizzati in un file,

Come potrete vedere, anche se si tratta di un tool basato sulla riga di comando, ha dei bei colori vivaci e altre cose che lo rendono uno strumento piuttosto user-friendly, ha la capacità di monitorare la velocità in tempo reale di download/upload delle connessioni di rete e può essere utilizzato anche per misurare la velocità di scrittura in un file system.

Nload : nload è un’applicazione da console che controlla il traffico di rete e l’utilizzo della larghezza di banda in tempo reale. Esso visualizza il traffico in entrata ed in uscita utilizzando due grafici e fornisce informazioni aggiuntive come quantità totale di dati trasferiti e min/max di utilizzo della rete.

 

La cosa migliore e’ sicuramente quella di testarli tutti, magari su macchine virtuali, per poter meglio decidere quali fanno esattamente al caso vostro.

 

#ControllalaRetedallaShell

Docker – costruire i contenitori

Docker costruire i contenitori

Docker costruire i contenitori

Recentemente abbiamo parlato della virtualizzazione tramite Docker (vedi articolo Docker – cosi cambia la virtualizzazione) e, prima di proseguire sara’ meglio rifare una piccola introduzione.

Docker e’ indubbiamente una valida alternativa alla virtualizzazione tradizionale nel mondo Linux. Questo tipo di virtualizzazione, detta a “container” non emula un’ intero hardware come fanno invece gli hypervisor tipo VMware, Virtualbox, Xen o KVM, ma crea invece dei “contenitori” nel sistema operativo dove possono essere messe in esecuzione applicazioni di vario genere in modo del tutto separato una dall’altra.

Dato che con il cloud il ruolo del sistema operativo diventa sempre meno importante perchè si punta più sullo strato applicativo, PaaS, rendendo il tutto più flessibile. A questo punto se dovessimo far girare 1000 clienti su un ambiente condiviso, diventerebbe interessante disporre di una tecnologia di virtualizzazione che riduca al minimo fisiologico gli overhead.

La virtualizzazione classica non è così, perchè per ogni ambiente applicativo, riservato ad un cliente, si dovrebbe  lanciare una intera macchina virtuale con dentro l’intero sistema operativo. E allora perchè non condividere lo stesso sistema operativo e invece isolare solo gli ambienti di esecuzione delle applicazioni , tipo application server, DB ecc…

I container sono dunque alla base dei moderni servizi cloud di tipo PaaS (Platform as a service) che usano questo tipo di virtualizzazione per misurare il consumo di risorse ed assegnarne i limiti.

Ad esempio, se su uno stesso server fisico, con una soluzione di virtualizzazione di tipo hypervisor si possono ospitare, supponiamo 50 virtual machines, con la virtualizzazione a container si potra’ arrivare anche a 1000 container. Questo perchè un container di per sè è solo un contenitore di processi, mentre una virtual machine completa contiene tutto un ambiente operativo emulato.

Il container può anche essere portabile, infatti ci basta copiare la directory che contiene il filesystem modificato dall’utente dopo la creazione del container, un piccolo file di configurazione, ed il container diventera’ eseguibile su qualsiasi sistema che supporti LXC.

Il concetto è talmente interessante, che qualcuno ha pensato di fare un sistema operativo Linux interamente basato sui container, in cui non c’è nemmeno un package manager perchè si assume che gli applicativi saranno solo in forma di container. Coreos è nato proprio con il principio di supportare ambienti di esecuzione a container, togliendo dal sistema tutto quello che non è strettamente necessario per farlo funzionare.

INSTALLAZIONE

Abbiamo tre possibili metodi d’installazione :

1) Centos

sudo yum -y install docker-io

2) Debian/Ubuntu

sudo apt-get update 
sudo apt-get install docker.io 
sudo sudo apt-get install lxc-docker

3) Download con Curl

sudo curl -sSL https://get.docker.io/ubuntu/ | sudo sh

* Linkiamo docker alla nostra bash

ln -sf /usr/bin/docker.io /usr/local/bin/docker
sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

* Rendiamo docker attivo all’avvio

update-rc.d docker.io defaults

P.S.: Ci sono molti contenitori già disponibili nella community docker, che possono essere trovati attraverso una ricerca. Ad esempio con questo comando cerchero’ la parola debian:

# docker search debian

NAME    DESCRIPTION      STARS     OFFICIAL   AUTOMATED
debian  Debianbaseimage  310         [OK]
google/debian            31                     [OK]

….e molte altre che potrete leggere dall’output completo.

** Installiamo e facciamo provisioning con una immagine Centos

# docker pull blalor/centos  # GitHub blalor/docker-centos-base  image

oppure per chi fosse interessato ad una immagine con gia inserito il tool Ansible (per il Configuration Management ed IT Automation) di cui ho da poco parlato, potra’ scegliere quest’altra immagine.

sudo docker pull ansible/centos7-ansible # GitHub Ansible on Centos7
Pulling repository ansible/centos7-ansible
fff2afd18a57: Download complete

Avviamo un container docker

Attiveremo ora un contenitore centos-base con una shell bash, utilizzando il comando run. Docker eseguira’ questo comando in un nuovo contenitore, -i attribuisce stdin e stdout, -t assegna un terminale.

docker run -i -t centos /bin/bash

Questo è tutto! Adesso stai usando una shell bash all’interno di un contenitore centos.
Per scollegarsi dalla shell la sequenza di escape e’ : Ctrl-p + Ctrl-q.

Diamo un’occhiata ai processi attivi tramite :

# docker ps -a
CONTAINER   ID IMAGE          COMMAND     CREATED
fff2afd18a57     blalor/centos     /bin/bash         About an hour ago

Il Dockerfile
Per automatizzare la procedura di creazione e modifica di un container docker, possiamo utilizzare il Dockerfile, che è una delle parti principali di Docker, infatti attraverso il Dockerfile è possibile non solo fare il deploy istantaneo automatizzato di più istanze e più container, ma è anche possibile eseguire il provisioning di queste istanze, automatizzando task di gestione del sistema, installazione del software e molto altro.

Nel prossimo articolo vedremo un esempio utile, utilizzando ad esempio un’applicazione leggera, che puo’ lavorare molto bene in un contenitore, come NGINX, il noto server web/cached per la gestione di siti web/proxy ad alto carico.

#DockerContainerAvviato

Velocizzare Linux creando un RAM Disk

Veloci con le RAM Disk

Veloci con le RAM Disk

Ram Disk o Ram Drive è una funzionalità disponibile in qualsiasi distribuzione Linux dedicata a poter utilizzare la RAM come un hard disk o memoria di massa.
Grazie a Ram Disk potremo emulare un’hard disk utilizzando la nostra RAM rendendo cosi’ più veloce l’avvio di applicazioni oppure dello stesso sistema operativo.

La RAM difatti è molto più veloce di un qualsiasi hard disk, quindi utilizzando questa funzionalità le applicazioni potranno utilizzare la nostra ram per caricare dati, o altro, rendendo più veloce l’avvio e più reattivo il loro utilizzo.

*N.B.: Logicamente i dati salvati nella ram Disk andranno persi ad ogni riavvio, inoltre l’uso di questa funzionalità è consigliato solo se abbiamo più di 2 Gb di Ram altrimenti rischiamo di rimanere senza RAM da poter utilizzare per la gestione del nostro sistema operativo.

In questo esempio vedremo come creare e attivare una Ram Disk su Ubuntu (Debian e derivate).
N.B.: Prima di creare la cartella sul filesystem destinata alla Ram disk, lanciamo da terminale il comando:

free

in modo da liberare la memoria RAM non utilizzata sulla nostra distribuzione.

1. Creare una RamDisk

Per creare una RAMDISK dovremo creare una cartella che fungerà da alias per poter navigare e utilizzare lo spazio della RAM per farlo basta digitare da terminale:

sudo mkdir -p /opt/ramdisk
sudo chmod -R 777 /opt/ramdisk

la cartella sarà denominata ramdisk e la troveremo all’interno della cartella opt del nostro sistema.

2. Montare una RamDisk

A questo punto dovremo montare la cartella per un’area di archiviazione temporanea tmpfs che utilizza RAM invece di spazio sul disco rigido per farlo digitiamo da terminale:

sudo mount -t tmpfs -o size=2048M tmpfs /opt/ramdisk

come possiamo vedere abbiamo dato 2GB (2048M) possiamo variare il size conforme lo spazio disponibile nella nostra RAM.

Fatto questo provate ad avviare alcune applicazioni e dovreste notare un leggero miglioramento nel loro utilizzo.

3. Smontare la RamDisk

Per smontare la RamDisk basta digitare:

sudo umount /opt/ramdisk

oppure basta riavviare.

E’ possibile velocizzare questa procedura creando un’alias o script da avviare all’avvio del sistema.

Per effettuare il montaggio automatico ogni volta che avviamo la nostra distribuzione, dobbiamo aggiungere una riga nel file /etc/fstab. Apriamo quindi il file:

# sudo gedit /etc/fstab

e aggiungiamo la seguente stringa:

tmpfs /opt/ramdisk tmpfs nodev,nosuid,noexec,nodiratime,size=2048M 0  0

Una volta terminata la configurazione possiamo montare la partizione con il comando :

sudo mount -t tmpfs -o size=2048M tmpfs /opt/ramdisk

Facciamo ora un esempio pratico per vedere se e come funziona la nostra modifica.

Premessa: Se la nostra attività ci costringe a lavorare tutto il giorno con un browser, non bisogna sottovalutare l’idea di ottimizzare l’utilizzo di questo strumento.

Vediamo quindi come utilizzare la RAM Disk appena creata per ospitare ad esempio la cache del browser Firefox.

La procedura è molto semplice, dobbiamo immettere nella barra degli indirizzi il comando about:config , fare tasto destro sulla lista e selezionare Nuovo -> Stringa.
Nel nome dobbiamo scrivere browser.cache.disk.parent_directory e nel campo valore il percorso della cartella dove si desidera memorizzare la cache, che per noi e’ /opt/ramdisk. Infine dobbiamo assicurarsi che la voce browser.cache.disk.enable sia True, altrimenti possiamo attivarla con un doppio click.

Una volta terminato il tutto riavviamo il browser e facciamo qualche test ….

pwd   = /opt/ramdisk#
du -sh * = 85M cache2

Funziona…!

Twemproxy il proxy per Memcached

twemproxy2

Twemproxy (repository GitHub) è un proxy server che consente di ridurre il numero di connessioni aperte verso un server Memcached o Redis. Per cosa può essere utile questo strumento?

 

 

Le caratteristiche principali sono :

– ridurre il numero di connessioni al cache server agendo come un proxy;

– sharding di dati automatico tra più cache server;

– supporto per l’hash con diverse strategie e funzioni di hashing;

– configurabile per disabilitare i nodi caduti;

– esecuzione di istanze multiple, consentendo al client di connettersi al primo proxy server disponibile;

– pipelining e batching di richieste con risparmio di round-trip;

– configurabile per disabilitare i nodi non più funzionanti, e richiamarli successivamente, dopo un po’ di tempo;

Twemproxy è stato reso open source da Twitter (che lo ha sviluppato per le proprie esigenze) all’inizio del 2012, con il supporto a memcached, e recentemente ha aggiunto anche il supporto a Redis. Twitter fa uso estensivo dei cache server ed il sistema sul quale gira Twemproxy, per Twitter, è di dimensioni impressionanti; immaginate che i sistemisti devono gestire centinaia di cache server, che a loro volta amministrano svariati TB di dati ciascuno per oltre trenta servizi diversi, in-memory, inclusa la memorizzazione dei tweet. Parliamo di almeno due milioni di miliardi di query al giorno, ossia più di ventitré milioni di query al secondo, per un’infrastruttura che, peraltro, continua a crescere in maniera esponenziale.

Leggi anche articolo (“Ottimizzazre grazie a Memcached“)

 

Naviga piu’ veloce

dnsVelocizzare la navigazione in Internet con un Proxy DNS

Avvertite l’esigenza di provare una navigazione sempre piu’ veolce ? I DNS del vostro provider fanno i capricci e voi siete stufi di dover navigare a singhiozzo ? Avete due alternative: usare i DNS messi a disposizione dal progetto OpenDNS ( anche se comunque, di “aperto” non ha proprio nulla ) oppure installare sul vostro PC o sul vostro gateway pdnsd.

pdnsd è un proxy DNS che, grazie alla sua cache su disco, consente di memorizzare le coppie indirizzo IP / nome host, evitando di dover effettuare ogni volta la risoluzione DNS e migliorando leggermente la velocità di navigazione. L’installazione risulta agevole su tutte le distribuzioni, essendo limitata alla modifica del file /etc/resolv.conf ed all’editing del file di configurazione di pdnsd: per le distro Ubuntu & Debian il tutto si risolve con un classico : sudo apt-get istall pdnsd 

Prima di modificare qualunque file di sistema il consiglio e’ sempre quello : ” fate una copia di BACKUP “.

  • sudo cp /etc/pdnsd.conf /etc/pdnsd.conf.orig
  • sudo cp /etc/resolv.conf /etc/resolv.conf.orig

 

Editando il file /etc/resolv.conf , questo dovra’ avere come unica voce nameserver il solo valore 127.0.0.1 

Prima di attivare il servizio facciamo un test di risoluzione DNS, che ripeteremo una volta ultimate le modifiche ed attivato il nuovo servizio cosi’ da poter capire se e di quanto sia variata la risoluzione, quindi eseguiamo questo comando :

# dig http://www.distrowatch.org | grep "Query time"
;; Query time: 322 msec

Attivare il servizio

Modificare il file /etc/default/pdnsd attivando il daemon e disattivando i restanti due parametri:

# do we start pdnsd ?
START_DAEMON=yes
# auto-mode, overrides /etc/pdsnd.conf if set [see /usr/share/pdnsd/]
#AUTO_MODE=
# optional CLI options to pass to pdnsd(8)
#START_OPTIONS=

E’ importante soprattutto commentare AUTO_MODE in quando, come descritto nella riga di commento che lo precede, il file di configurazione “principale” verrebbe altrimenti ignorato.

Configurare PDNSD

Il file di configurazione è /etc/pdnsd.conf. Qui ci si può sbizzarrire con i vari parametri di configurazione. Questa è la mia configurazione:

global {
perm_cache=2048;
cache_dir="/var/cache/pdnsd";
run_as="pdnsd";
server_ip = any;
paranoid=on;
min_ttl=15m;
max_ttl=1w;
timeout=10;
}

server {
label=”OpenDNS”;
ip=208.67.222.222,208.67.220.220;
timeout=30;
interval=30;
uptest=ping;
ping_timeout=30;
purge_cache=off;
}

source {
owner=localhost;
file=”/etc/hosts”;
}

rr {
name=localhost;
reverse=on;
a=127.0.0.1;
owner=localhost;
soa=localhost,root.localhost,42,86400,900,86400,86400;
}

Pronti a partire

Non resta che avviare il daemon:

/etc/init.d/pdnsd start

 

La differenza

La stessa query di cui sopra eseguita in cache:

# dig http://www.distrowatch.org | grep "Query time"
;; Query time: 2 msec

Inutile dire che i tempi di risoluzione degli hosts sono più che rapidi, e la navigazione su internet è decisamente più veloce.