GNU/Linux >> Linux Esercitazione >  >> Linux

Procedura:gestire i log di sistema con Journalctl

Introduzione

In alcune delle più recenti distribuzioni Linux, "init.d" o "rsyslogd" è stato sostituito da un programma chiamato JournalCTL. In precedenza, i registri si trovavano in genere in una posizione particolare per ogni file di registro separato, anziché essere facili da individuare, gestire e manipolare. Systemd ha reso più facile l'accesso a questi file di registro centralizzandoli, registrando tutti i processi del kernel e degli utenti in un "journal". Journalctl è la versione più recente di questo, il che rende ancora più semplice la gestione di questi file.

In questa guida, spiegheremo le basi di journalctl e una breve panoramica degli usi suggeriti per il programma.

Prerequisiti

Deve avere una distribuzione Linux con journalctl come programma di gestione dei log di sistema, ad esempio CentOS 7.  Se non disponi di un server, considera un server privato virtuale SSD super veloce di Atlantic.Net.

Come gestire i registri di sistema con Journalctl

Impostazione dell'ora del sistema

Prima di iniziare con qualsiasi altra cosa, si consiglia vivamente di impostare l'ora del sistema. Dal momento che systemd registra come diario binario, puoi registrare i tuoi record in ora UTC o locale (server). Per impostazione predefinita, systemd visualizzerà i risultati nell'ora locale. Per evitare confusione in seguito, verificheremo che l'ora sia impostata correttamente. Systemd ha un programma integrato chiamato "timedatectl" che serve a questo scopo.

Innanzitutto, verifica che il tuo fuso orario sia disponibile nelle opzioni del fuso orario:

timedatectl list-timezones

Questo mostra tutti i fusi orari disponibili sul tuo server. Dopo aver individuato quello che corrisponde alla tua posizione (o alla posizione del tuo server), impostalo:

sudo timedatectl set-timezone (zone)

Quindi verificheremo per assicurarci che ciò abbia avuto effetto correttamente:

timedatectl status

La prima riga visualizzerà l'ora corretta.

Controllo accessi

usermod -a -G adm username

Sostituire "nome utente" con il nome dell'utente. Questo utente riceverà lo stesso accesso journalctl dell'utente root. Tuttavia, questo controllo funziona solo quando l'archiviazione persistente è abilitata.

Visualizzazione di base del registro

Ci sono alcuni comandi che possono essere emessi a questo punto. Il comando di base visualizzerà un output di tutte le voci generali, visualizzando prima le voci più vecchie:

journalctl

Anche se questo ti darà tutti i file di registro, questo ti darà, beh, tutti i file di registro. Ciò significa che avrai centinaia o migliaia, o più, di righe di registro visualizzate se ne hai la possibilità. È simile a quello che vedresti se cercassi in "/var/log/messages/" nelle versioni precedenti.

Sessione di avvio corrente

Abbiamo anche un comando che visualizzerà i log che si sono verificati solo nell'avvio corrente.

journalctl -b

Ciò significa che le informazioni delle sessioni di avvio precedenti non verranno visualizzate.

Sessioni di avvio precedenti

Se hai bisogno di rivedere i registri per le sessioni di avvio precedenti, c'è anche un'opzione per quello. Alcune versioni abilitano la registrazione delle sessioni di avvio precedenti per impostazione predefinita. Per assicurarti che il tuo sia impostato per registrarli, ti suggeriamo di abilitare questa funzione. Questo può essere fatto creando la directory

sudo mkdir -p /var/log/journal

oppure modificando direttamente il file di configurazione del journal

sudo nano /etc/systemd/journald.conf

Nel file, in [Journal], imposta l'opzione "Storage=" su "persistent" in modo che la registrazione persistente sia abilitata. Salva ed esci da questo file e le impostazioni avranno effetto in futuro.
Una volta salvato, per visualizzare le opzioni disponibili per la revisione dei file di avvio,

journalctl --list-boots

Vedrai una riga per ogni sessione di avvio disponibile. L'ID offset è la prima colonna mentre l'ID di avvio è la seconda colonna. È possibile utilizzare l'ID offset o l'ID di avvio per eseguire il comando:

journalctl -b (offset/boot ID)

Lasso di tempo specifico

Potresti, invece, voler rivedere i file di registro entro un intervallo di tempo specificato, che può estendersi su più sessioni di avvio o limitarlo a una finestra di tempo specificata all'interno di una sessione di avvio. È possibile inserire le limitazioni –da e –fino a che mostreranno solo gli eventi successivi e precedenti al registro specifico.
Per tutti i valori temporali, è necessario utilizzare il seguente formato:

YYYY-MM-DD HH:MM:SS

Se desideri visualizzare gli eventi che sono accaduti dalle 10:00 del 5 luglio 2015, possiamo ottenere ciò tramite il seguente comando:

journalctl --since “2015-07-05 10:00:00”

Tieni presente che questi saranno basati sull'ora del server o UTC, a seconda di ciò che hai impostato nelle tue preferenze in precedenza in questo tutorial.
Se la data viene omessa, il diario assumerà la data odierna. Se l'ora viene omessa, verrà considerata la mezzanotte (00:00:00). Inoltre, non è necessario includere il campo dei secondi, nel qual caso verranno assunti "00" secondi.

Ci sono anche comandi amichevoli, come

journalctl --since yesterday

e

journalctl --since 02:00 --until “3 hours ago”

Opzioni di filtro

Per unità

La funzione più utile disponibile è il filtraggio delle unità. Il filtro -u dà l'opzione di visualizzare solo una specifica "unità" permettendoti di vedere cose che sono accadute solo in riferimento a un programma o sistemi specifici. Come sempre, puoi aggiungere filtri per intervalli di tempo con questo.

journalctl -u nginx.service

o

journalctl -u nginx.service --since yesterday

Per processo, utente o ID gruppo

Se hai già esaminato informazioni sufficienti per recuperare il PID del processo che stai cercando, puoi invece filtrare per questo. Questo viene eseguito con _PID

journalctl _PID=4345

Per posizione

È disponibile anche il filtraggio in base alle posizioni del percorso. Se stai selezionando un percorso eseguibile, journalctl mostrerà tutte le voci relative a quell'eseguibile. Se, ad esempio, stai cercando log che coinvolgono bash,

journalctl /usr/bin/bash

Questo metodo di solito include informazioni più dettagliate sui processi e sui processi figlio, se disponibili. A volte questa non è un'opzione, tuttavia.

Messaggi del kernel

I messaggi del kernel si trovano in genere nell'output di dmesg, tuttavia possiamo usare anche journalctl per recuperarli. Questo sarebbe con il filtro -k o -dmesg.

journalctl -k

Questo mostrerà i messaggi del kernel che si sono verificati durante la sessione di avvio corrente. Ancora una volta, questo può sempre essere modificato con le opzioni menzionate in precedenza. Se si desidera rivedere i messaggi del kernel dalla sessione di avvio precedente,

journalctl -k -b -1

Priorità

La priorità è spesso il metodo preferito per la revisione dei log. Journalctl può essere utilizzato per visualizzare i messaggi solo al di sopra di un certo livello di priorità. Di seguito sono riportati i livelli di priorità:

0:emerge

1:avviso

2:critico

3:ehm

4:avviso

5:avviso

6:informazioni

7:eseguire il debug

È possibile utilizzare il nome del livello di priorità o il numero corrispondente. Se desideri visualizzare solo i log con priorità di avviso o superiore, puoi emettere il comando

journalctl -p warning -b

o

journalctl -p 4 -b

Campo specificato

Per visualizzare l'elenco dei giornali che si verificano all'interno di un campo specifico, utilizzare il modificatore -F

journal -F fieldname

dove "fieldname" è sostituito dal campo che stai cercando. Hai anche la possibilità di visualizzare solo le voci di registro che soddisfano una condizione specifica

journalctl fieldname=value

Tronca o espandi l'output

Journalctl può essere modificato per ridurre o espandere la visualizzazione dei dati di output. Per impostazione predefinita, journalctl visualizzerà l'intera voce, richiedendo di scorrere verso destra con i tasti freccia. Possiamo invece troncare questo output, che mostrerà i puntini di sospensione per le informazioni rimosse con l'opzione –no-full.

journalctl --no-full

In alternativa puoi dire a journalctl di visualizzare tutte le informazioni, indipendentemente dal fatto che consideri un carattere non stampabile. Questo viene fatto con il modificatore -a.

journalctl -a

Passa a output standard

journalctl --no-pager

Formati di output

Se si utilizza un editor di testo per le voci del diario, come discusso in precedenza, il diario può essere visualizzato in altri formati, se necessario. Questo può essere fatto con il modificatore -o e un identificatore di formato.

Ad esempio, puoi leggere il diario in JSON digitando

journalctl -b -u nginx -o json

Puoi utilizzare quanto segue per le opzioni di visualizzazione:

gatto — Visualizza il campo del messaggio stesso

esporta — Formato binario per il trasferimento o il backup

json — JSON standard, una voce per riga

json-piuttosto — Formato JSON ma è più facile da leggere

json-sso — Formato JSON avvolto per rendere compatibile l'aggiunta di eventi inviati dal server

breve — Output syslog predefinito

iso corto — Output predefinito che mostra i timestamp dell'orologio da parete ISO 8601

corto-monotonico — Uscita predefinita con timestamp monotono

preciso in breve — Uscita predefinita con timestamp in microsecondi

prolisso — Mostra tutti i campi del diario per quella voce, include nascosto

Monitoraggio del processo attivo

Journalctl imita quali amministratori utilizzano tail per il monitoraggio. Questo è stato integrato in journalctl consentendo l'accesso a queste funzionalità senza dover utilizzare strumenti aggiuntivi.

Visualizzazione dei registri recenti

L'opzione -n ​​può essere utilizzata per visualizzare una quantità specifica di record. La mancata inclusione di un numero di modifica visualizzerà dieci (10) risultati, per impostazione predefinita.

journalctl -n

Puoi, invece, specificare quante voci vorresti vedere

journalctl -n 20

Registri seguenti

Il modificatore -f può essere utilizzato per seguire i log mentre vengono scritti.

journalctl -f

Manutenzione del diario

Esistono alcuni comandi che possono essere utilizzati per ripulire alcuni registri meno recenti per il bene dello spazio sul disco rigido.

Innanzitutto, puoi scoprire quanto spazio è occupato dai diari utilizzando il modificatore –disk-usage.

journalctl --disk-usage

Ci sono due modi diversi per ripulirlo. Il primo è ridurre il diario in base alle dimensioni. Questo rimuove le voci dalla meno recente alla più recente fino a raggiungere lo spazio su disco desiderato.

sudo journalctl --vacuum-size-2G

Il modo alternativo per ridurre il diario è a una certa data. L'opzione –vacuum-time cancella tutte le voci fino a una certa data.

Per conservare solo le voci dell'anno scorso, puoi digitare

sudo journalctl --vacuum-time-1years

Limitazione delle dimensioni del diario

Hai la possibilità di porre limiti alla quantità di spazio che i diari possono occupare.

nano /etc/systemd/journald.conf

Queste modifiche possono essere apportate con una qualsiasi delle seguenti modifiche al campo

Utilizzo massimo sistema= Spazio su disco massimo

SystemKeepFree= Quantità di spazio da mantenere disponibile

SystemMaxFileSize= Quanto possono diventare grandi i singoli file journal prima di essere ruotati

RuntimeMaxUse= Spazio su disco massimo che può essere utilizzato all'interno dell'archiviazione volatile  (/run filesystem)

RuntimeKeepFree= La quantità di spazio che dovrebbe essere mantenuta disponibile per gli altri nella memoria volatile (/run filesystem)

RuntimeMaxFilesize= Quanto può diventare grande un singolo file journal nella memoria volatile (all'interno di /run filesystem) prima di essere ruotato

Grazie per aver seguito questo how-to. Ricontrolla qui per ulteriori aggiornamenti e per prendere in considerazione un server di hosting VPS leader di mercato di Atlantic.Net.


Linux
  1. Come utilizzare Ansible per impostare il monitoraggio del sistema con Prometheus

  2. Come cancellare Journalctl?

  3. Come utilizzare journalctl per analizzare i registri in Linux

  4. Come ottenere statistiche di sistema con node.js

  5. Come creare una partizione di sistema EFI?

Come controllare/riparare il file system Linux all'avvio

Come esportare i registri dei server con Rsyslog in Centos 8

Registri di sistema

Leggi e analizza i tuoi log di sistema Linux con Journalctl

Gestire i log con Logrotate su Ubuntu

Journalctl:come leggere e modificare i log di Systemd