I log sono una parte fondamentale delle applicazioni e dell'infrastruttura del server, ma analizzarli può essere una seccatura se sono ingombranti ovunque. Perché non creare un sistema di registrazione centralizzato? Rsyslog potrebbe essere proprio quello che stai cercando!
Un sistema di registrazione centralizzato consente di raccogliere i registri da più server/applicazioni al server di registro centrale. E in questo tutorial imparerai come impostare la registrazione centralizzata utilizzando la configurazione di Rsyslog sui server Linux.
Preparati e tuffati subito!
Prerequisiti
Questo tutorial sarà una dimostrazione pratica. Se desideri continuare, assicurati di avere quanto segue:
- Due o più server Linux:questo tutorial utilizza tre server Debian 11 denominati central-rsyslog , client01 e client02 .
- Un utente con privilegi sudo/root su tutti i server.
Verifica del servizio Rsyslog su tutti i server
Rsyslog è un'elaborazione di log ad alte prestazioni per la distribuzione Linux, installata per impostazione predefinita su distribuzioni basate su Debian e RHEL.
Rsyslog è una versione affidabile ed estesa del protocollo Syslog con funzionalità moderne aggiuntive. Queste funzionalità aggiuntive sono input e output multipli, funzionalità di filtraggio modulari e avanzate.
Al momento della stesura di questo documento, l'ultima versione di Rsyslog è v8.2112.0. Quindi controllerai la versione installata di Rsyslog sul tuo sistema e lo stato del servizio Rsyslog. In questo modo avrai la certezza di ottenere le ultime funzionalità di Rsyslog e che Rsyslog funzioni senza problemi.
1. Apri il terminale, accedi a tutti i server ed esegui sudo su
comando seguente per ottenere i privilegi di root. Immettere la password per l'utente quando richiesto.
sudo su
2. Quindi, esegui rsyslogd
comando per verificare la versione di Rsyslog installata sul tuo sistema.
Assicurati di avere Rsyslog v8.xxx sul tuo sistema perché alcune configurazioni sono disponibili solo su Rsyslog v8.xxx.
# checking rsyslog version
rsyslogd -v
Come puoi vedere di seguito, il sistema Debian 11 viene fornito con Rsyslog v8.2102.0 predefinito.
3. Infine, esegui systemctl
comando seguente per verificare il servizio Rsyslog. Assicurati che il servizio Rsyslog sia active (running)
.
# verify rsyslog service status
sudo systemctl status rsyslog
Come puoi vedere di seguito, il servizio Rsyslog è attivo (in esecuzione).
Configurazione di Rsyslog per la registrazione centralizzata
Ora che hai l'ultima versione di Rsyslog in esecuzione, è il momento di configurare la registrazione centralizzata utilizzando la configurazione di Rsyslog su central-rsyslog server.
Per impostare la registrazione centralizzata, abiliterai il modulo di input Rsyslog UDP imudp
e creare il modello Rsyslog per la ricezione di messaggi di registro da altri server. Il imudp
modulo di input fornisce la capacità per central-rsyslog server per ricevere messaggi Syslog tramite il protocollo UDP.
1. Modifica il file di configurazione di Rsyslog (/etc/rsyslog.conf ) utilizzando il tuo editor preferito e abilita la configurazione mostrata nell'immagine di seguito, quindi salva le modifiche ed esci dall'editor.
Durante questo tutorial, decommenta ogni configurazione per abilitarla rimuovendo il segno # all'inizio di ogni riga.
Questa configurazione consente al modulo di input imudp di essere eseguito sulla porta UDP predefinita 514.
2. Quindi, crea un nuovo modello Rsyslog (/etc/rsyslog.d/50-remote-logs.conf ) utilizzando il tuo editor preferito e compila il modello con la configurazione seguente. Salva le modifiche ed esci dall'editor.
Questo modello Rsyslog di seguito abilita central-rsyslog server per archiviare i registri dai server remoti nella directory /var/log/remotelogs/ .
# define template for remote loggin
# remote logs will be stored at /var/log/remotelogs directory
# each host will have specific directory based on the system %HOSTNAME%
# name of the log file is %PROGRAMNAME%.log such as sshd.log, su.log
# both %HOSTNAME% and %PROGRAMNAME% is the Rsyslog message properties
template (
name="RemoteLogs"
type="string"
string="/var/log/remotelogs/%HOSTNAME%/%PROGRAMNAME%.log"
)
# gather all log messages from all facilities
# at all severity levels to the RemoteLogs template
*.* -?RemoteLogs
# stop the process once the file is written
stop
3. Esegui i comandi seguenti per creare una nuova directory di log (/var/log/remotelogs/
) di proprietà del root
utente con adm
gruppo. In questo modo, il servizio Ryslog può scrivere i log su /var/log/remotelogs
directory.
# create /var/log/remotelogs/ directory
mkdir -p /var/log/remotelogs/
# change the ownership to root:adm
sudo chown -R root:adm /var/log/remotelogs/
4. Ora esegui il rsyslogd
comandi seguenti per verificare le configurazioni di Rsyslog (/etc/rsyslog.conf
e /etc/rsyslog.d/50-remote-logs.conf
).
Assicurati di controllare e verificare sempre la configurazione di Rsyslog dopo aver modificato la configurazione di Rsyslog per assicurarti che la configurazione non abbia errori.
# verify /etc/rsyslog.conf
rsyslogd -N1 -f /etc/rsyslog.conf
# verify /etc/rsyslog.d/50-remote-logs.conf
rsyslogd -N1 -f /etc/rsyslog.d/50-remote-logs.conf
Se non ci sono errori, otterrai un output come quello qui sotto.
5. Dopo aver verificato le configurazioni, esegui il comando seguente su restart
il rsyslog
servizio e applicare nuove configurazioni.
Il servizio Rsyslog è già in esecuzione con il modulo di input imudp abilitato e la porta UDP predefinita 514 per il protocollo Syslog. Il central-rsyslog il server è ora pronto per ricevere messaggi di registro da altri host.
# restart rsyslog
sudo systemctl restart rsyslog
6. Infine, esegui ss
comando seguente per verificare le porte aperte sul tuo sistema.
# check open ports
ss -plntu
Di seguito, puoi vedere che il servizio Rsyslog con il modulo di input imudp attivo è in esecuzione sulla porta UDP 514 predefinita.
Invio dei registri al server Rsyslog centralizzato
A questo punto, hai configurato la gestione centralizzata dei log con la configurazione di Rsyslog nel central-rsyslog server. Ma come fai a conoscere il central-rsyslog il server riceve i log? Invierai i log in remoto al server Rsyslog centralizzato (central-rsyslog ) abilitando e configurando il modulo di output Rsyslog sul computer client.
In questa demo, la macchina client (con il nome host client01) utilizza il modulo di output Rsyslog omfwd
per inviare i log a central-rsyslog server.
Il omfwd
module è un modulo integrato che elabora messaggi/registri tramite i modelli Rsyslog. Il modulo trasferisce quindi i messaggi a varie destinazioni tramite UDP e TCP utilizzando l'oggetto azione Rsyslog.
1. Passa a client01 macchina per configurare e inviare i log a central-rsyslog server.
2. Crea una nuova configurazione di Rsyslog (/etc/rsyslog.d/20-forward-logs.conf ) utilizzando il tuo editor preferito e compila la configurazione seguente.
Questa configurazione formatta i messaggi di registro utilizzando il modello SendRemote e inoltra i messaggi di registro tramite il protocollo UDP al target central-rsyslog server (172.16.1.10). Assicurati di modificare l'indirizzo IP con l'indirizzo IP del tuo server Rsyslog centrale.
Un modello Rsyslog è costituito da costrutti di proprietà dei messaggi Rsyslog che specificano i formati dei messaggi di registro. Controlla la documentazione del modello Rsyslog per vedere diversi tipi di modelli.
# process all log messages before sending
# with the SendRemote template
template(
name="SendRemote"
type="string"
string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
)
# forward log messages using omfwd module
# to the target server 172.16.1.10
# via UDP porotocol on port 514
# log messages is formatted using the SendRemote template
# setup queue for remote log
action(
type="omfwd"
Target="172.16.1.10"
Port="514"
Protocol="udp"
template="SendRemote"
queue.SpoolDirectory="/var/spool/rsyslog"
queue.FileName="remote"
queue.MaxDiskSpace="1g"
queue.SaveOnShutdown="on"
queue.Type="LinkedList"
ResendLastMSGOnReconnect="on"
)
# stop process after the file is written
stop
3. Quindi, esegui il seguente rsyslogd
comando per verificare la configurazione di Rsyslog e assicurarsi che non vi siano errori.
# verify rsyslog configuration
rsyslogd -N1 -f /etc/rsyslog.d/20-remote-logs.conf
4. Esegui systemctl
comando seguente per riavviare il servizio Rsyslog e applicare una nuova configurazione.
# restart rsyslog on client01 machine
sudo systemctl restart rsyslog
5. Ora torna al central-rsyslog server per verificare i log da client01 macchina.
Esegui i comandi seguenti per accedere alla directory /var/log/remotelogs ed elenca i file e le directory all'interno di tale directory per verificare il client01 directory esiste.
# navigate to /var/log/remotelogs directory
cd /var/log/remotelogs/
# checking available directories
ls -lah
Di seguito, puoi vedere che la directory client01 esiste in /var/log/remotelogs directory.
6. Esegui ogni comando seguente per passare al client01
directory ed elenco (ls -lah
) i file di registro all'interno della directory.
# navigate to client01 directory
cd client01/
# checking files inside client01 directory
ls -lah
Un sistema di registrazione centralizzato aiuta gli amministratori ad analizzare i dati dei registri da centinaia di server in un'unica macchina.
Scegli uno dei log che desideri visualizzare e analizzare.
7. Infine, esegui cat
comando di seguito per vedere il contenuto del registro di destinazione. Sostituisci logfile
con il nome del file di registro, ma questa demo restituisce il contenuto di sshd.log file.
cat logfile
Di seguito puoi vedere i log del client01 macchina memorizzata in sshd.log file nel server Rsyslog (central-rsyslog ).
Finora, hai visto che un sistema di registrazione centralizzato rende i file di registro più sicuri perché ogni volta che le applicazioni/i server vengono chiusi, i file di registro sono ancora presenti sul server centrale.
Invio dei registri di un programma specifico al server Rsyslog
Hai appena inviato tutti i log delle applicazioni dal client01 macchina al server Rsyslog centrale (central-rsyslog ). Ma cosa succede se hai solo bisogno di log di applicazioni specifici, come ssh
o su
? Implementa la struttura di controllo Rsyslog rainerscript sull'oggetto azione Rsyslog.
Questa demo utilizza il client02 macchina per inviare i log sshd solo al server Rsyslog (central-rsyslog ).
1. Passa a client02 macchina per configurare e inviare i log a central-rsyslog server.
2. Crea una nuova configurazione Rsyslog (/etc/rsyslog.d/50-sshd.conf
) utilizzando il tuo editor preferito e compila la configurazione seguente.
Questa configurazione di seguito inoltra solo i log per l'applicazione (nome programma) denominata sshd al server Rsyslog (172.16.1.10). I messaggi di registro sono anche formattati dal modello SendRemote.
# create new Rsyslog tempate for formatted logs
template(
name="SendRemote"
type="string"
string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
)
# implementation of if conditional on rsyslog
# to send specific logs for programname sshd
# stop the process after sending logs
if $programname == "sshd" then {
action(type="omfwd" target="172.16.1.10" port="514" protocol="udp" template="SendRemote")
stop
}
3. Quindi, esegui rsyslogd
comando seguente per verificare la configurazione di Rsyslog e assicurarsi che non vi siano errori.
# verify rsyslog configuration
rsyslogd -N1 -f /etc/rsyslog.d/50-sshd.conf
4. Esegui il comando seguente per riavviare il servizio Rsyslog, applicare una nuova configurazione e disconnettersi da client02
server per generare un nuovo sshd
tronco d'albero.
A questo punto, il server central-rsyslog ha ricevuto solo il log sshd anziché tutti i log di sistema.
# restart rsyslog service
sudo systemctl restart rsyslog
5. Ora torna al central-rsyslog server per verificare i log da client02 macchina.
Esegui i comandi seguenti per elencare (ls -lah) i file di registro disponibili nella directory /var/log/remotelogs/.
# navigate to /var/log/remotelogs/
cd /var/log/remotelogs/
# verify log directory for client02
ls -lah
Come puoi vedere di seguito, c'è una nuova directory denominata client02 che memorizza i messaggi di registro dal client02 macchina.
6. Esegui i comandi seguenti per accedere a client02
directory e verifica i file di registro disponibili su quella directory.
cd client02/
ls -lah
Vedrai il file di registro sshd.log per il nome programma sshd. Inoltre, esegui il comando cat per mostrare il contenuto del file di registro sshd.log.
Di seguito, puoi vedere un solo file di registro disponibile, il file sshd.log, poiché hai utilizzato la configurazione /etc/rsyslog.d/50-sshd.conf.
7. Infine, esegui cat
comando seguente per visualizzare e analizzare il sshd.log
file.
cat sshd.log
Invio dei registri convertiti dei messaggi Syslog al server Rsyslog
Finora, hai visto come inviare registri al tuo server Rsyslog e questo è abbastanza buono. Ma forse preferisci avere i tuoi registri in formato messaggio Syslog per renderli più facili da leggere e analizzare. In tal caso, utilizzando il imfile
di Rsys il modulo di input farà il trucco.
Il imfile
il modulo di input consente di convertire qualsiasi messaggio di testo/registro in un formato di messaggio Syslog. E in questa demo, invierai i log del server web Apache2 dal client01 macchina al server Rsyslog (central-rsyslog ).
Combinando il modulo di input Rsyslog (imfile
) con il modulo di output (omfwd
) ti consente di inviare tutti i log di messaggi Syslog convertiti al server Rsyslog (central-rsyslog ).
1. Torna al client01 macchina, crea una nuova configurazione Rsyslog /etc/rsyslog.d/50-apache2.conf
, e popolare la configurazione seguente. Assicurati di modificare il nome del modello, il nome del set di regole e il file di input per i tuoi log.
Il modello seguente converte i log di Apache in formato messaggio Syslog con il modulo imfile e invia quei log al server Rsyslog (172.16.1.10).
# deifne global workDirectory for saving the state file of log messages.
global(workDirectory="/var/spool/rsyslog")
# enable the Rsyslog imfile module processing text files or logs.
module(load="imfile" PollingInterval="10")
# define template for apache2 for processing log messages.
# that will be forwarded to rsyslog server
template(
name="TestLog"
type="string"
string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
)
# define ruleset "ApacheLogs" with action object to send logs to rsyslog server
# define the queue
ruleset(name="ApacheLogs") {
action(
type="omfwd"
target="172.16.1.10"
port="514"
protocol="udp"
template="TestLog"
queue.SpoolDirectory="/var/spool/rsyslog"
queue.FileName="remote"
queue.MaxDiskSpace="1g"
queue.SaveOnShutdown="on"
queue.Type="LinkedList"
ResendLastMSGOnReconnect="on"
)
stop
}
# define input files Apache2 logs to send to the Rsyslog server
# and apply ruleset "ApacheLogs"
input(type="imfile" ruleset="ApacheLogs" Tag="apache2" File="/var/log/apache2/*.log")
2. Quindi, esegui rsyslogd
comando qui sotto per verificare il /etc/rsyslog.d/50-apache2.conf
configurazione.
# verify rsyslog configuration
rsyslogd -N1 -f /etc/rsyslog.d/50-apache2.conf
3. Esegui il systemctl
comando di seguito a restart
il rsyslog
servizio e applicare nuove configurazioni. A questo punto, tutti gli Apache2 accedono al client01 macchina verrà inoltrata al server Rsyslog (central-rsyslog ).
# restart rsyslog service
sudo systemctl restart rsyslog
4. Ora esegui il curl
comando seguente per generare i log di Apache2. Questo comando genererà nuovi messaggi di log di Apache2 nel file /var/log/apache2/access.log
.
# generate a new log for Apache
# by accessing via curl command
curl localhost
curl localhost/testnotfound
5. Torna al server Rsyslog (central-rsyslog ) ed esegui i comandi seguenti per accedere a /var/log/remotelogs/client01
elenco di directory file di registro disponibili.
# navigate to the directory /var/log/remotelogs/client01/
cd /var/log/remotelogs/client01/
# check available log files
ls -a
Di seguito puoi vedere che il server Rsyslog (central-rsyslog ) ha ricevuto il file apache.log dal client01 macchina.
6. Infine, esegui cat
comando per mostrare il contenuto del file di registro apache2.log
.
# showing the content of apache2.log file
cat apache2.log
Se /etc/rsyslog.d/50-apache2.conf funziona, vedrai il contenuto del file di log in formato messaggio Syslog come quello qui sotto.
Conclusione
In questo tutorial, hai imparato come impostare la registrazione centralizzata con la configurazione di Rsyslog. Hai anche inviato i registri dei server in remoto al server Rsyslog centralizzato utilizzando diversi tipi di plug-in di input e output Rsyslog. Ora non devi più cercare i log in luoghi diversi oltre al tuo server Rsyslog.
In quale altro modo pensi di utilizzare Rsyslog? Forse inizi a esplorare altri moduli di input e output di Rsyslog? Oppure integrare Rsyslog in un altro sistema di registrazione, come Fluentd e Logstash?