Quando riscontri problemi di prestazioni con il tuo server, la prima cosa da fare è controllare i log di Linux . Nel log di sistema puoi trovare utili messaggi diagnostici provenienti da diversi componenti del sistema operativo, come il kernel o vari servizi, quindi molto probabilmente troverai lì la causa del problema.
Ogni messaggio nel registro viene generato in seguito a determinati eventi nel sistema operativo: dall'utente, dall'autorizzazione allo spegnimento del servizio o dal fallimento dell'applicazione. Questi eventi hanno priorità diverse a seconda di quanto siano critici. Ci sono i seguenti tipi di eventi in Linux:
emerg- fallimento, massima priorità;alert- avviso urgente;crit- evento critico;err- errore ordinario;warn- avviso ordinario;notice- notifica;info- messaggio informativo;debug- informazioni di debug;
Al momento, i principali servizi di raccolta dei log in Linux sono rsyslog e systemd-journald . Sono inclusi nella maggior parte dei pacchetti delle distribuzioni moderne e funzionano in modo indipendente.
rsyslog
I log di questo servizio si trovano nella cartella " /var/log/ " sotto forma di normali file di testo. I messaggi di log vengono inseriti in file diversi a seconda del tipo di evento. Ad esempio, " /var/log/auth.log " contiene informazioni sull'autorizzazione degli utenti nel sistema, mentre " /var/log/kern.log " contiene messaggi del kernel. I nomi dei file possono variare a seconda della distribuzione, quindi diamo un'occhiata al file di configurazione " /etc/rsyslog.d/50-default.conf " per capire dove si trovano .
Queste regole mostrano in quale file è memorizzato ciascun tipo di messaggio di log. La parte sinistra visualizza il tipo di messaggio nel formato " [Origine].[Priorità] ", mentre la parte destra visualizza il nome del file di log. Durante la scrittura del tipo di messaggio, è possibile aggiungere il carattere " * ". Questo indica un valore vuoto o " none ", che lo rimuove dall'elenco. Analizziamo più da vicino le prime due regole.
“auth,authpriv.* /var/log/auth.log”
“*.*;auth,authpriv.none -/var/log/syslog”
La prima regola stabilisce che tutti i messaggi ricevuti dal meccanismo di autorizzazione verranno registrati nel file " /var/log/auth.log ". Tutti i tentativi di autorizzazione (sia riusciti che non riusciti) saranno registrati in questo file. La seconda regola indica che tutti i messaggi, ad eccezione di quelli relativi all'autorizzazione, verranno registrati nel file " /var/log/syslog ". Questi due file sono generalmente i più utilizzati. Le seguenti regole definiscono il percorso in cui memorizzare i log del kernel " kern.* " e i log del servizio di posta " mail.* ".
I file di log possono essere aperti con qualsiasi editor di testo, come less , cat o tail . Apriamo il file " /var/log/auth.log ".
less /var/log/auth.log
Ogni riga del file è un messaggio separato ricevuto dall'applicazione o dal servizio. Tutti i messaggi, indipendentemente dalla loro origine, hanno un formato e sono composti da 5 parti. Prendiamo come esempio il messaggio evidenziato nello screenshot.
- Timestamp del messaggio - “12 feb 06:18:33”
- Nome del computer che ha inviato il messaggio - “vds”
- Nome dell'applicazione o del servizio che ha inviato il messaggio - "sshd"
- ID processo - [653]
- Testo del messaggio - "Password accettata per mihail da 188.19.42.165 porta 2849 ssh2"
Questo è un esempio di connessione riuscita a SSH.
Ed ecco come appare un tentativo di accesso non riuscito:
Questo file registra anche i comandi con permessi avanzati
Apriamo il file /var/log/syslog
Il messaggio evidenziato nello screenshot è il messaggio relativo all'arresto dell'interfaccia di rete.
Per cercare informazioni all'interno di file di testo lunghi, usa l'utility grep . Puoi trovare tutti i messaggi ricevuti dal servizio pptpd nel file " /var/log/syslog ".
grep 'pptpd' /var/log/syslog
Durante la diagnostica è possibile utilizzare l'utilità tail , che permette di visualizzare le ultime righe di diversi file. Il comando " tail -f /var/log/syslog " consente di visualizzare la registrazione dei log in tempo reale.
Il servizio rsyslog è molto flessibile e potente. Può essere utilizzato per la raccolta di log sia su sistemi locali che a livello aziendale. La documentazione completa è disponibile sul sito web ufficiale https://www.rsyslog.com/
Rotazione dei log in Linux
La registrazione dei log avviene in modo continuo, pertanto la dimensione dei file aumenta costantemente. Il meccanismo di rotazione garantisce l'archiviazione automatica dei log più vecchi e la creazione di nuovi file. A seconda delle regole, la rotazione può avvenire giornalmente, settimanalmente, mensilmente o in base a un limite di dimensione. Man mano che vengono creati nuovi log, quelli più vecchi possono essere semplicemente eliminati o inviati via e-mail. La rotazione dei log viene eseguita dall'utility logrotate . La configurazione principale si trova nel file " /etc/logrotate.conf ". Il contenuto dei file viene elaborato anche nella cartella " /etc/logrotate.d/ ".
È possibile registrare nuove regole nel file di configurazione principale. Tuttavia, è preferibile creare un file separato in " /etc/logrotate.d/ ". Di default, in questa directory sono presenti alcuni file.
Diamo un'occhiata al file " /etc/logrotate.d/rsyslog " che contiene le regole di rotazione per i log del servizio rsyslog.
Innanzitutto, la regola dovrebbe contenere il percorso al file di registro e poi tutte le linee guida tra parentesi curve.
- ruotare 7 - numero di file da conservare - 7
- alle lezioni - creare un nuovo file ogni giorno
- comprimere - comprimere e archiviare i vecchi file
Come si può vedere nello screenshot, nella cartella " /var/log/ " sono presenti il file di log principale " syslog " e 7 archivi, il che corrisponde alle regole presenti nel file di configurazione.
È possibile trovare una descrizione più dettagliata di logrotate nel manuale, eseguendo il comando " man logrotate ".
Raccolta dei log di Linux - journald
Il servizio di raccolta dei log systemd-journald fa parte del sistema di inizializzazione systemd . I file di log di Linux vengono memorizzati in " /var/log/journal/ " in un formato speciale e possono essere aperti tramite l' utilità journalctl . Il formato dei record è esattamente lo stesso di rsyslog.
Il comando journalctl senza attributi mostra tutti i record, ma non è adatto a file di log di grandi dimensioni. Analizziamo alcune opzioni di questa utility.
journalctl -b- mostra tutti i record dall'ultimo avviojournalctl -S "2020-02-17 12:00" -U "2020-02-17 12:10"- mostra il record entro un certo periodo di tempojournalctl -u pptpd- mostra i record di un determinato serviziojournalctl -k- mostra i messaggi del kerneljournalctl -p err- mostra i messaggi di una certa priorità, in questo caso messaggi di priorità più alta (crit, alert, emerg)journalctl -f- mostra i messaggi in tempo reale
Per una maggiore flessibilità è possibile combinare queste opzioni. Mostriamo tutti gli errori del servizio pptpd
journalctl -u pptpd -p err
Se si specifica il percorso del file eseguibile come attributo, l'utility mostrerà tutti i messaggi inviati da tale file. Ad esempio, visualizziamo tutti i messaggi inviati dal file " /usr/bin/sudo " dalle 04:15 del 18 febbraio 2020. In realtà, verranno visualizzati tutti i comandi eseguiti con privilegi elevati.
journalctl -S "2020-02-18 04:15" /usr/bin/sudo
Per scoprire quanto spazio su disco occupano i file di registro, eseguire il seguente comando
journalctl --disk-usage
Per limitare il file di registro a 1 GB eseguire il seguente comando
journalctl --vacuum-size=1G
Apertura di file binari
Ora diamo un'occhiata ad alcuni file speciali nella cartella " /var/log/ " dove vengono memorizzati tutti i tentativi di accesso. Questi file sono binari e possono essere aperti solo con programmi specifici.
Il file /var/log/wtmp contiene informazioni sui tentativi di accesso andati a buon fine. Utilizzare last utility per aprirlo.
/var/log/btmp - contiene tutti i tentativi di accesso falliti. Può essere aperto con lastb con permessi avanzati. L'attributo -n definisce il numero di righe visualizzate dalla fine del file.
/var/log/lastlog - contiene l'ora dell'ultima azione di accesso per ogni record dell'account. Può essere aperto con lastlog