Il colore in terminale non è soltanto decorazione. Quando analizziamo centinaia di righe di log, evidenziare uno status, un IP o la parola ERROR riduce il tempo necessario a trovare ciò che interessa. Il trucco è farlo senza trasformare l’output in una foresta di escape ANSI che rompe file, pipe e script.
Colore automatico soltanto sul terminale
Molti comandi supportano una modalità auto: inseriscono colore quando stdout è un terminale interattivo e lo disattivano quando l’output viene rediretto.
grep --color=auto ERROR /var/log/app.log
grep --color=auto -nE 'ERROR|WARNING' /var/log/app.log
GNU grep usa GREP_COLORS per personalizzare l’evidenziazione:
export GREP_COLORS='ms=01;31:mc=01;31:fn=35:ln=32:se=36'
grep --color=auto -n 'denied' auth.log
Evitiamo --color=always nelle pipeline salvo quando sappiamo che il consumer comprende le escape sequence.
less e codici colore
grep --color=always -nE 'ERROR|WARNING' app.log |
less -R
-R è preferibile al più permissivo -r quando vogliamo visualizzare principalmente sequenze colore senza consentire indiscriminatamente qualunque carattere di controllo.
tail -F + grep
tail -F /var/log/app.log |
grep --line-buffered --color=always -E 'ERROR|WARNING|CRITICAL'
journalctl
journalctl -u ssh -f
journalctl -p warning --since "-30 min"
journalctl -u apache2 -o short-iso-precise
Prima di colorare tutto scegliamo un formato che mostri timestamp e contesto utili. Il colore non può compensare un log povero.
GRC: Generic Colouriser
GRC, già protagonista dell’articolo originale del 2016, esiste ancora ed è tuttora utile. grc esegue un comando e passa l’output a grcat, che applica regole basate su regular expression.
apt install grc
grc ping 1.1.1.1
grc ps aux
grc tail /var/log/syslog
Possiamo usare direttamente grcat:
tail -F /var/log/syslog |
grcat conf.log |
less -R
Configurazione GRC personalizzata
# ~/.grc/conf.myapp
regexp=\b(ERROR|CRITICAL|FATAL)\b
colours=bold red
count=more
=======
regexp=\b(WARN|WARNING)\b
colours=yellow
count=more
=======
regexp=\b(INFO)\b
colours=green
count=more
tail -F /var/log/myapp.log |
grcat ~/.grc/conf.myapp
Alias: non cambiare silenziosamente i comandi base
Il vecchio articolo suggeriva alias tail='grc tail'. In una shell interattiva può funzionare, ma preferisco alias distinti:
alias ctail='grc tail'
alias cps='grc ps'
alias cping='grc ping'
alias grep='grep --color=auto'
Negli script è meglio invocare esplicitamente i comandi invece di dipendere dagli alias della shell dell’utente.
Non salvare escape ANSI nei log
I colori dovrebbero essere applicati in visualizzazione, non incorporati nel log persistente. Sequenze ANSI nei file complicano parsing, ricerca, ingestione SIEM e confronti con strumenti non terminali.
Colore e incident response
Durante un incidente il colore è utile per leggere rapidamente, ma non deve diventare parte della logica. Le query devono funzionare anche senza colore e i parser devono basarsi sui dati, non sulla resa visiva.
Per organizzare logging locale e remoto vedi Logging su Linux: journald, rsyslog e log remoto.

