I log e l’output dei programmi sono parte integrante dell’intera struttura del sistema Linux. Nel territorio di Linux, i log sono una fonte vitale di informazioni sugli incidenti di sicurezza, sulle attività delle applicazioni e sugli eventi di sistema. La gestione efficace dei log di Linux è fondamentale per la risoluzione dei problemi e per garantire la conformità. Questo articolo esplora l’importanza della registrazione e i principali tipi di log di Linux prima di trattare alcuni utili strumenti da riga di comando e altri suggerimenti per aiutarti a gestire i log di Linux.
L’importanza dei log di Linux
I log forniscono una panoramica di alto livello delle applicazioni e dei processi che il sistema esegue automaticamente in background. Questi log forniscono una traccia di verifica per scoprire ciò che un sistema sta facendo o no, e i successi e gli errori generati durante tali attività. Molte applicazioni dell’ecosistema Linux producono output il quale è leggibile dall’uomo e, se tale output viene reindirizzato ad un file di log, è analizzato automaticamente dagli strumenti inclusi in un sistema Linux. Il recupero delle informazioni storiche senza che esse siano presenti in un log sarebbe difficile, se non impossibile, anche se non è necessario entrare nel log per farlo.
È importante evidenziare uno dei vantaggi notevoli che ne ricava l’ambiente di lavoro. Integrando perfettamente l’interfaccia utente con l’architettura del sistema sottostante, il ciclo di feedback si riduce durante la fase di sviluppo e oltre. Genera quindi un output prezioso che può essere trasformato in informazioni utili per l’intero ciclo di vita dell’applicazione.
Tipi di log di Linux
- Log di Linux di sistema: catturano informazioni sul sistema operativo, come messaggi di avvio, eventi hardware e attività del kernel.
- Log di Linux delle applicazioni: registrano eventi specifici relativi al software, come messaggi di manutenzione, errori, avvisi e attività dell’utente.
- Log di Linux di sicurezza: tengono traccia degli eventi relativi alla sicurezza, compresi gli accessi non autorizzati, gli accessi regolari e le attività del firewall.
Ognuno di questi può quindi servire come inserimento o attivazione per applicazioni o script, compresa l’integrazione con la maggior parte dei software di monitoraggio aziendali.
Formati Syslog e journald log
I file di log di Linux possono essere archiviati in diversi formati, tra cui i più comuni sono i log di sistema centralizzati con il journaling e i log di testo normale.
In generale, il formato syslog è memorizzato in log in testo normale, facilmente leggibili e analizzabili. Tale formato ha vantaggi e svantaggi, così come journald, che memorizza i log in un formato binario leggibile dal comando journalctl.
La maggior parte delle moderne distribuzioni Linux tende a utilizzare i log journald di systemd almeno per le applicazioni di sistema principali. I log journal di systemd offrono vantaggi quali le strutture di registrazione centralizzate, il monitoraggio in tempo reale dei dati di log strutturati e indicizzati e la crittografia automatica dei log. In confronto, la natura meno restrittiva dei tradizionali log di testo normale di Linux potrebbe sembrare più rischiosa a prima vista. Non lasciarti ingannare però: i log di testo normale hanno ancora molti usi.
La maggior parte o tutte le funzioni integrate in systemd, come i sistemi di log remoti, il monitoraggio centralizzato, la rotazione dei log e i backup, sono offerte anche da altri pacchetti Linux standard. Uno svantaggio di journald è la sua natura monolitica relativamente “pesante” rispetto agli strumenti a riga di comando Linux più versatili, utilizzati per interagire con i file syslog, come grep, awk o tail. In confronto, quando si usa journald, tutte le sue caratteristiche sono installate e funzionanti: archiviazione, crittografia, registrazione centralizzata, rotazione dei log e altro ancora, indipendentemente dal fatto che tu ne abbia bisogno o meno.
Confronto di funzionalità: registrazione syslog vs journald
Funzionalità | syslog | journald |
Formato di archiviazione | File di testo normale | Formato binario con dati strutturati |
Compatibilità | Ampiamente supportato da diversi strumenti di gestione dei log | Richiede l’integrazione di systemd per la piena funzionalità |
Rotazione dei log | Configurazione manuale della rotazione dei log | Rotazione e compressione automatica dei file di log |
Gestione centralizzata | Si affida a server e strumenti di log esterni | Supporto integrato per la registrazione centralizzata |
Filtraggio e analisi | Funzionalità avanzate di filtraggio e analisi del testo dalla catena di strumenti standard di Linux | Filtraggio e interrogazione avanzati con journalctl |
Efficienza di archiviazione | Può consumare più spazio su disco a causa del formato testo normale | Archiviazione più efficiente grazie al formato binario e indicizzato |
Monitoraggio in tempo reale | Richiede strumenti esterni o file di log di tailing | Monitoraggio integrato dei log in tempo reale con journalctl |
Affidabilità | Vulnerabile alla corruzione o alla perdita dei file di log in caso di malfunzionamenti | Scritture atomiche e struttura resiliente del file journal |
Crittografia | Potrebbero essere necessari meccanismi di crittografia esterni | Supporta la crittografia dei dati di log |
Filtrare e analizzare i dati dei log di Linux: esempi utili
Esempi di journald:
Esempio: journalctl -p err
Spiegazione: Filtra i log journal per visualizzare solo le voci con livello di gravità “err” , che rappresentano errori. In questo modo è possibile concentrarsi sui messaggi di errore e identificare rapidamente eventuali problemi critici nei log di sistema.
Esempio: journalctl _SYSTEMD_UNIT=nginx.service
Spiegazione: Filtra i log journal per visualizzare le voci relative a nginx.service. Aiuta a isolare i log specifici, ad esempio del server web Nginx, facilitando la risoluzione dei problemi o il monitoraggio delle sue attività.
Esempio: journalctl –since “2023-07-21” –until “2023-07-22”
Spiegazione: Filtra i log journal per visualizzare le voci tra le date specificate, in questo caso dal 21 luglio 2023 al 22 luglio 2023. Permette di concentrarsi sulle voci di registro in un intervallo di tempo specifico, aiutando a eseguire il debug o a indagare sugli eventi che si sono verificati in quel periodo.
Esempi di syslog:
Esempio: grep -i “warning” syslog.log | grep -v “deprecato”
Spiegazione: Esegue un processo di filtraggio in due fasi. Per prima cosa utilizza grep con l’opzione -i per cercare le righe che corrispondono alla stringa “warning” in syslog.log, quindi invia l’output a un altro comando grep con l’opzione -v, escludendo le righe che corrispondono alla stringa “deprecated”. Consente di filtrare i messaggi di avviso specificamente contrassegnati come deprecati.
Esempio: grep ‘string1|string2[|string3]’ logfile.log
Spiegazione: Effettivamente una ricerca OR utilizzando grep. L’uso di virgolette singole e del simbolo di pipe tra di esse consente di cercare più stringhe con un singolo comando grep.
Altri suggerimenti sugli strumenti di logging
Sebbene gli strumenti standard di Linux siano utilizzati a beneficio del sistema, è utile impiegarli anche altrove:
- logrotate: Utile nella fase di sviluppo dell’applicazione per gestire i log di output di debug
- tail -f: il comando “tail” stampa le ultime 10 righe di un file prima di uscire. L’opzione “-f” “segue” il file di log, osserva le nuove voci del file di log e si aggiorna quando vengono aggiunte nuove righe.
- multitail: Visualizza più file di log in riquadri affiancati in tempo reale, in modo da poterli monitorare contemporaneamente.
In questo articolo abbiamo discusso vari aspetti dell’importanza del logging, confrontato diversi tipi di log di Linux e toccato casi d’uso meno consueti per accedere al tuo lavoro. Abbiamo anche esplorato una serie di esempi di comandi e altri strumenti che contribuiscono a un’efficace gestione dei log di Linux. Utilizza i log di Linux per tenere traccia delle informazioni su sistemi operativi, applicazioni e sistemi Linux e per gestire meglio i tuoi endpoint Linux. Scopri qualcosa in più sul software di monitoraggio remoto ed endpoint management di NinjaOne e su come può aiutarti a gestire più facilmente i tuoi dispositivi Linux distribuiti.