Gestione dei log di Linux

postato in: Articles | 0

Una best practice chiave per la registrazione è quella di centralizzare o aggregare i log in un’unica posizione, soprattutto se si dispone di più server o livelli di architettura. Le applicazioni moderne hanno spesso più livelli di infrastruttura che possono includere un mix di server on-premise e servizi cloud. Cercare di trovare il file giusto per risolvere un errore sarebbe incredibilmente difficile e cercare di correlare i problemi tra i sistemi sarebbe ancora più difficile., Non c’è niente di più frustrante che scoprire che le informazioni desiderate non sono state catturate in un file di registro o che il file di registro che avrebbe potuto contenere la risposta è stato perso dopo il riavvio del server.

Questa sezione spiega come utilizzare i servizi di centralizzazione per raccogliere e centralizzare i file di log di Linux.

vantaggi

Vantaggi della centralizzazione dei log

La centralizzazione dei log rende la ricerca tra i dati di log più semplice e veloce, poiché tutti i log sono accessibili in un’unica posizione., Invece di indovinare quale server ha il file corretto, puoi semplicemente accedere al tuo repository di dati di registro per cercare eventi rilevanti. La centralizzazione è una parte fondamentale delle soluzioni di gestione di grandi dimensioni, in quanto consente loro di analizzare, analizzare e indicizzare i registri prima di memorizzarli in un’unica posizione. Questo rende la risoluzione dei problemi e la risoluzione dei problemi di produzione più facile e veloce. La centralizzazione offre anche questi vantaggi.

  • I log vengono sottoposti a backup in una posizione separata, proteggendoli da perdite accidentali o non intenzionali., Questo li mantiene anche accessibili nel caso in cui i server vadano giù o non rispondano.
  • Non è necessario utilizzare SSH o comandi grep inefficienti, che possono utilizzare preziose risorse di calcolo per ricerche complesse.
  • È possibile ridurre la quantità di spazio su disco utilizzato dai file di log.
  • Gli ingegneri possono risolvere i problemi di produzione senza accedere direttamente ai sistemi.

Mentre la gestione centralizzata dei log è generalmente l’opzione migliore, ci sono ancora alcuni rischi come la scarsa connettività di rete che porta alla perdita di dati o i registri che utilizzano una grande quantità di larghezza di banda di rete., Discuteremo come affrontare in modo intelligente questi problemi nelle sezioni seguenti.

popolare

Strumenti popolari per centralizzare i log

La maggior parte dei sistemi Linux già centralizza i log utilizzando un demone syslog. Come abbiamo spiegato nella sezione Linux Logging Basics, syslog è un servizio che raccoglie file di log da servizi e applicazioni in esecuzione sull’host. Può scrivere quei registri su file o inoltrarli a un altro server tramite il protocollo syslog., Ci sono diverse implementazioni syslog che è possibile utilizzare, tra cui:

  • Rsyslog– un demone leggero installato sulla maggior parte delle comuni distribuzioni Linux.
  • syslog-ng – il secondo demone syslog più popolare per Linux.
  • logstash-un agente più pesante che può eseguire elaborazioni e analisi più avanzate. Può leggere i messaggi syslog utilizzando il plug-in di input syslog e inoltrarli a qualsiasi numero di destinazioni di output.
  • fluentd-un altro agente con funzionalità di elaborazione avanzate. Supporta anche l’input syslog utilizzando il plugin in_syslog.,

Rsyslog è l’implementazione syslog più popolare e viene installato di default in molte distribuzioni di Linux. Se hai bisogno di funzionalità di filtraggio più avanzate o di analisi personalizzate, Logstash è la prossima scelta più popolare. Logstash è inoltre strettamente integrato con Elastic Stack, che fornisce una soluzione completa di gestione dei log. Per questa guida, ci concentreremo sull’utilizzo di rsyslog poiché è così ampiamente utilizzato.

config

Configura Rsyslog.conf

Il file di configurazione rsyslog principale si trova in/etc/rsyslog.conf., È possibile memorizzare file di configurazione aggiuntivi in /etc/rsyslog.d / directory. Ad esempio, su Ubuntu, questa directory contiene/etc/rsyslog.d/50-default.conf, che indica a rsyslog di scrivere i log di sistema nel file. È possibile leggere ulteriori informazioni sui file di configurazione nella documentazione rsyslog.

La configurazione di rsyslog comporta l’impostazione delle sorgenti di input (dove rsyslog riceve i log), nonché delle regole di destinazione per dove e come vengono scritti i log. Rsyslog fornisce già i valori predefiniti per la ricezione di eventi syslog, quindi normalmente è sufficiente aggiungere il server di centralizzazione come output., Rsyslog utilizza RainerScript per la sua sintassi di configurazione. In questo esempio, stiamo inoltrando i nostri log al server su central.example.com sulla porta TCP 514.

action(type="omfwd" protocol="tcp" target="central.example.com" port="514")

In alternativa, potremmo inviare i nostri log a una soluzione di gestione dei log. I provider di gestione dei log basati su cloud come SolarWinds ® Loggly ® ti forniranno un nome host e una porta a cui puoi inviare i tuoi log semplicemente modificando i campi target e port. Verificare con la documentazione del provider durante la configurazione di rsyslog..,

direct

File e directory di registrazione

Rsyslog fornisce il modulo imfile, che consente di monitorare i file di registro per nuovi eventi. Ciò consente di specificare un file o una directory come origine del log. Rsyslog può monitorare singoli file e intere directory.

Ad esempio, vogliamo monitorare i file di log creati dal server Apache. Possiamo farlo creando un nuovo file in/etc/rsyslog.d/ chiamatoapache.conf, caricare il modulo imfile e aggiungere i file di log di Apache come input.,

Il parametro File supporta i caratteri jolly per il monitoraggio di più file e directory.

protocollo

Quale protocollo: UDP, TCP o RELP?

Esistono tre protocolli principali tra cui è possibile scegliere durante la trasmissione dei dati di registro: UDP, TCP e RELP.

UDP invia messaggi senza garantire la consegna o una conferma di ricezione (ACK). Effettua un singolo tentativo di inviare un pacchetto e, se la consegna fallisce, non ci riprova. È molto più veloce e utilizza meno risorse rispetto ad altri protocolli, ma dovrebbe essere utilizzato solo su reti affidabili come localhost., UDP inoltre non supporta la crittografia dei registri.

TCP è il protocollo più comunemente usato per lo streaming su Internet, poiché richiede un ACK prima di inviare il pacchetto successivo. Se la consegna non riesce, continuerà a riprovare fino a quando non consegna correttamente il messaggio. Tuttavia, TCP richiede una stretta di mano e una connessione attiva tra il mittente e il destinatario, che utilizza risorse di rete aggiuntive.

RELP (Reliable Event Logging Protocol) è progettato specificamente per rsyslog ed è probabilmente il più affidabile di questi tre protocolli., Riconosce la ricezione dei dati nel livello dell’applicazione e invierà nuovamente se si verifica un errore. Poiché è meno comune, è necessario assicurarsi che la destinazione supporti anche questo protocollo.

Se rsyslog rileva un problema durante la memorizzazione dei log, ad esempio una connessione di rete non disponibile, i log verranno messi in coda fino al ripristino della connessione. I registri in coda vengono memorizzati in memoria per impostazione predefinita. Tuttavia, la memoria è limitata e se il problema persiste, i registri possono superare la capacità di memoria, che può portare alla perdita di dati. Per evitare ciò, considerare l’utilizzo di code disco.,

Attenzione: È possibile perdere i dati se si memorizzano i registri solo in memoria.

que

Invia in modo affidabile con code assistite da disco

Rsyslog può accodare i log su disco quando la memoria è piena. Le code assistite dal disco rendono il trasporto dei log più affidabile. Ecco un esempio di come configurare una regola di inoltro del registro in rsyslog con una coda assistita da disco.

encrypt

Encrypt Logs Using TLS

Quando la sicurezza dei dati e la privacy sono un problema, dovresti considerare di crittografare i tuoi log. Sniffer e intermediari potrebbero leggere i tuoi dati di registro se li trasmetti su Internet in chiaro., È necessario crittografare i log se contengono informazioni private, dati identificativi sensibili o dati regolamentati dal governo. Il demone rsyslog può crittografare i log utilizzando il protocollo TLS e mantenere i dati più sicuri.

Il processo di abilitazione della crittografia TLS dipende dalla configurazione di registrazione. Generalmente, comporta i seguenti passaggi.

  1. Creare un’autorità di certificazione (CA). Ci sono certificati di esempio nella directory /contrib/gnutls di rsyslog, che sono buoni solo per il test, ma è necessario crearne uno per la produzione., Se stai utilizzando un servizio di gestione dei log, ne avrà uno pronto per te.
  2. Genera un certificato digitale per il tuo server per abilitare TLS o utilizzane uno dal tuo fornitore di servizi di gestione dei log.
  3. Configurare il servizio rsyslog per inviare dati crittografati TLS al servizio di gestione dei log.

Ecco un esempio di configurazione rsyslog con crittografia TLS. Sostituisci CERT e DOMAIN_NAME con le tue impostazioni del server.,

$DefaultNetstreamDriverCAFile /etc/rsyslog.d/keys/ca.d/CERT.crt$ActionSendStreamDriver gtls$ActionSendStreamDriverMode 1$ActionSendStreamDriverAuthMode x509/name$ActionSendStreamDriverPermittedPeer *.DOMAIN_NAME.com

I servizi di gestione dei log come SolarWinds Loggly spesso forniscono i propri CA e certificati, che è sufficiente fare riferimento nella configurazione rsyslog. Ad esempio, abilitare TLS con Loggly richiede solo di scaricare il certificato Loggly nel proprio /etc/rsyslog.d / directory, aggiornare la configurazione e riavviare il servizio rsyslog.

In primo luogo, scaricare il certificato.

$ mkdir -pv /etc/rsyslog.d/keys/ca.d$ cd /etc/rsyslog.d/keys/ca.d$ curl -O https://logdog.loggly.com/media/logs-01.loggly.com_sha12.crt

Quindi, aprire il file di configurazione/etc/rsyslog.d/22-loggly.conf e aggiungere quanto segue:

Infine, riavviare rsyslog.,

$ sudo service rsyslog restart

pratica

Best practice per la registrazione delle applicazioni

Oltre ai log creati da Linux per impostazione predefinita, è anche una buona idea centralizzare i log delle applicazioni importanti. Quasi tutte le applicazioni server basate su Linux scrivono le loro informazioni di stato in file di registro separati e dedicati. Questo include prodotti di database come PostgreSQL o MySQL, server web come Nginx o Apache, firewall, servizi di stampa e condivisione di file, directory e server DNS, e così via.

La prima cosa che gli amministratori fanno dopo aver installato un’applicazione è configurarla., Le applicazioni Linux in genere hanno un .file conf da qualche parte all’interno della directory / etc. Può essere anche da qualche altra parte, ma questo è il primo posto in cui le persone cercano i file di configurazione. A seconda di quanto sia complessa o grande l’applicazione, il numero di parametri impostabili può essere pochi o in centinaia. Fare riferimento alla documentazione dell’applicazione per saperne di più, o utilizzare il comando locate per cercare di trovare il file da soli.

# locate postgresql.conf/usr/pgsql-9.4/share/postgresql.conf.sample/var/lib/pgsql/9.4/data/postgresql.conf

Imposta una posizione standard per i file di log

I sistemi Linux in genere salvano i loro file di log nella directory /var/log., Funziona bene, ma controlla se l’applicazione salva in una directory specifica sotto /var/log. Se lo fa, grande. In caso contrario, è possibile creare una directory dedicata per l’app sotto /var/log. Perché? Questo perché anche altre applicazioni salvano i loro file di registro sotto /var/log e se la tua app salva più di un file di registro—forse una volta al giorno o dopo ogni riavvio del servizio—potrebbe essere un po ‘ difficile strisciare attraverso una directory di grandi dimensioni per trovare il file desiderato.,

Se si dispone di più di un’istanza dell’applicazione in esecuzione nella rete, questo approccio è anche utile. Pensa a una situazione in cui potresti avere una dozzina di server Web in esecuzione nella tua rete. Se i tuoi log sono memorizzati su un server syslog centrale, come fai a sapere quale file di log contiene i log di quale server? Registrando ogni server in una directory separata, si sa esattamente dove guardare quando la risoluzione dei problemi qualsiasi server.

Utilizzare un nome file statico

Molte applicazioni aggiungono dati dinamici al nome del file di registro, ad esempio la data corrente o il timestamp., Questo è utile per suddividere automaticamente i registri per data, ma rende più difficile per servizi come rsyslog trovare il file più recente. Un approccio migliore consiste nell’utilizzare un nome non modificabile per il file di registro, quindi utilizzare logrotate per applicare un timestamp o un numero a file di registro precedenti.

Aggiungi e ruota i file di registro

Le applicazioni dovrebbero aggiungersi ai file di registro esistenti invece di sovrascriverli. Ciò aiuta a garantire che tutte le righe di registro vengano acquisite e che non vengano persi dati, anche se l’applicazione viene riavviata. Tuttavia, i file di registro possono diventare molto grandi nel tempo., Se stai cercando di trovare la causa principale di un problema, potresti finire per cercare attraverso decine di migliaia di righe.

Si consiglia di aggiungere i log a un singolo file, ma si consiglia anche di configurare l’applicazione per ruotare i file di log ogni tanto. Strumenti come logrotate possono farlo automaticamente copiando il file di registro corrente in una nuova posizione, dandogli un nome univoco, quindi troncando il file di registro corrente., Questo ha una serie di vantaggi, tra cui:

  1. i Registri sono suddivisi tra i file per data e l’ora, il che rende facile trovare registri per una specifica data
  2. Ogni file di log è molto più piccoli, che li rende più facile la ricerca e la più facile da inviare in rete
  3. eseguire il backup dei file di log è molto più facile, e l’eliminazione o l’archiviazione vecchi registri può essere fatto molto più velocemente

Come spesso la rotazione dei file di log dipende da quanti sono i registri di generare. Come regola generale, iniziare ruotando i registri una volta al giorno.

Imposta i criteri di conservazione dei file di registro

Per quanto tempo conservi un file di registro?, Che sicuramente si riduce al requisito di business. Si potrebbe essere chiesto di mantenere il valore di una settimana di informazioni di registrazione, o può essere un requisito normativo per mantenere il valore di 10 anni di dati. Qualunque cosa sia, i registri devono andare dal server in una volta o nell’altra.

A nostro avviso, se non diversamente richiesto, dovresti tenere online almeno un mese di file di log, oltre a copiarli in una posizione secondaria (come un server di registrazione). Qualsiasi cosa più vecchia di quella può essere scaricata su un supporto separato. Ad esempio, se sei su AWS, i tuoi registri più vecchi possono essere copiati su Glacier.,

Archivia i file di registro su un’unità separata

I file di registro vengono scritti costantemente, il che può portare a un I / O del disco elevato su sistemi occupati. Come best practice, è necessario montare /var/log su un dispositivo di archiviazione separato. Ciò impedisce alle scritture di file di registro di interferire con le prestazioni delle applicazioni, in particolare su storage basato su disco. Ciò impedisce anche ai file di registro di riempire l’intera unità nel caso in cui diventino troppo grandi.

Formatta le voci di registro

Quali informazioni dovresti acquisire in ogni voce di registro?

Dipende da cosa si desidera utilizzare il registro per., Vuoi usarlo solo per scopi di risoluzione dei problemi o vuoi catturare tutto ciò che sta accadendo? È un requisito legale acquisire ciò che ogni utente sta eseguendo o visualizzando?

Se si utilizzano i log per la risoluzione dei problemi, salvare solo errori, avvisi o messaggi fatali. Non c’è motivo per catturare i messaggi di debug, ad esempio. L’app potrebbe registrare i messaggi di debug per impostazione predefinita, o un altro amministratore potrebbe averlo attivato per un altro esercizio di risoluzione dei problemi, ma è necessario disattivarlo perché può sicuramente riempire rapidamente lo spazio., Come minimo, acquisire la data, l’ora, il nome dell’applicazione client, l’IP di origine o il nome host del client, l’azione eseguita e il messaggio stesso.

Ad esempio, considera il comportamento di registrazione predefinito di PostgreSQL. I log sono memorizzati in /var/log/postgresql e ogni file inizia con postgresql, seguito dalla data. I file vengono ruotati ogni giorno e i file più vecchi vengono aggiunti con un numero in base a quando sono stati ruotati. Ogni riga di registro può essere preceduta da campi come il timestamp corrente, l’utente corrente, il nome del database, l’ID sessione e l’ID transazione., È possibile modificare queste impostazioni modificando il file di configurazione di PostgreSQL (/etc/postgresql/11/main/postgresql.conf su Debian).

Per impostazione predefinita, ogni riga di log mostra l’ID del processo timestamp e PostgreSQL seguito dal messaggio di log.

Monitorare i file di registro con Imfile

Tradizionalmente, il modo più comune per le applicazioni di registrare i propri dati è con i file. I file sono facili da cercare su una singola macchina, ma non scalano bene con più server. Con rsyslog, è possibile monitorare i file per le modifiche e importare nuovi eventi in syslog, dove è possibile inoltrare i log a un server centralizzato., Questo viene fatto usando il modulo imfile. Per abilitare il modulo, creare un nuovo file di configurazione in /etc/rsyslog.d/, quindi aggiungere un input di file come questo.

Aggiungi i tuoi flussi di output dopo questa configurazione e rsyslog invierà i log dal file specificato alla destinazione di output.

Accedere direttamente al socket Syslog con Imuxsock

Un socket è simile a un handle di file UNIX, tranne che legge i dati in memoria invece di scriverli su disco. Nel caso di syslog, questo ti consente di inviare i log direttamente a syslog senza doverlo scrivere prima in un file.,

Questo approccio fa un uso efficiente delle risorse di sistema se il tuo server è vincolato dall’I/O del disco o non hai bisogno di registri di file locali. Lo svantaggio di questo approccio è che il socket ha una dimensione della coda limitata. Se il tuo demone syslog va giù o non riesce a tenere il passo, potresti perdere i dati del registro.

Per abilitare la registrazione del socket in rsyslog, aggiungi la seguente riga alla tua configurazione rsyslog (è abilitata per impostazione predefinita).

$ModLoad imuxsock

Questo crea un socket su /dev/log socket per impostazione predefinita, ma è possibile modificarlo modificando SysSock.Name parametro., È inoltre possibile impostare opzioni come la limitazione della velocità e il controllo del flusso. Per ulteriori informazioni, consultare la documentazione di rsyslog imuxsock.

UDP Registra con Imupd

Alcune applicazioni emettono dati di registro in formato UDP, che è il protocollo standard quando si trasferiscono file di registro su una rete o sul localhost. Il demone syslog riceve questi log e può elaborarli o trasmetterli in un formato diverso. In alternativa, è possibile inviare i log a un altro server syslog o a una soluzione di gestione dei log.,

Utilizzare il seguente comando per configurare rsyslog per accettare i dati syslog su UDP sulla porta standard 514.

$ModLoad imudp$UDPServerRun 514

Gestisci la configurazione su molti server

Quando hai solo pochi server, puoi configurare manualmente la registrazione su di essi. Una volta che si dispone di poche decine o più server, è possibile usufruire di strumenti che rendono questo più facile e più scalabile. A livello di base, l’obiettivo di ogni strumento è abilitare syslog su ciascuno dei server, applicare una configurazione e garantire che le modifiche abbiano effetto.,

Pssh

Pssh (o SSH parallelo) consente di eseguire un comando ssh su più server in parallelo. Utilizzare una distribuzione pssh solo per un numero limitato di server. Se uno dei tuoi server non riesce, devi ssh nel server non riuscito e fare la distribuzione manualmente. Se si dispone di diversi server non riusciti, la distribuzione manuale su di essi può richiedere molto tempo.

Puppet/Chef

Puppet e Chef sono strumenti di gestione della configurazione che possono configurare automaticamente tutti i server e portarli allo stesso stato. Possono monitorare i tuoi server e tenerli sincronizzati., Puppet e Chef sono potenti strumenti in grado di installare software, creare file, riavviare servizi e altro ancora. Se non sei sicuro di quale sia più adatto per la gestione della configurazione della distribuzione, potresti apprezzare il confronto di InfoWorld tra i due strumenti.

Alcuni fornitori offrono anche moduli o ricette per la configurazione di syslog. Ad esempio, Loggly fornisce un modulo Puppet che utilizza rsyslog per inoltrare automaticamente i log dagli agenti. Installa il modulo Loggly Puppet sul tuo Puppet master, quindi aggiungi la seguente configurazione al manifesto Puppet.,

 # Send syslog events to Loggly class { 'loggly::rsyslog': customer_token => 'YOUR_CUSTOMER_TOKEN', }

Una volta che gli agenti si aggiornano, inizieranno la registrazione su Loggly.

Kubernetes

Kubernetes è uno strumento di orchestrazione per la gestione di contenitori su più nodi. Kubernetes fornisce un’architettura di registrazione completa che raccoglie e scrive automaticamente i log del contenitore in un file sul computer host. È possibile visualizzare i log di un Pod specifico eseguendo il comando kubectl logs <pod name>, utile per accedere ai log delle applicazioni su un server remoto.,

Molte soluzioni di gestione dei log forniscono agenti che possono essere distribuiti su Kubernetes per raccogliere sia i log delle applicazioni che i log degli host. Ad esempio, Loggly fornisce un DaemonSet che distribuisce un Pod di registrazione a ciascun nodo in un cluster. Il Pod raccoglie i registri da altri Pod e dall’host stesso e distribuirlo come DaemonSet aiuta a garantire che ci sia sempre un’istanza in esecuzione su ciascun nodo. La registrazione di un cluster Kubernetes con Loggly è facile come eseguire i seguenti comandi.

Docker

Docker utilizza contenitori per eseguire applicazioni indipendenti dal server sottostante., Viene spesso utilizzato come runtime contenitore per orchestratori come Kubernetes, ma può essere utilizzato come piattaforma standalone. ZDNet ha un articolo approfondito sull’utilizzo di Docker nel data center.,

Ci sono diversi modi per accedere da Mobile contenitori, tra cui:

  • la Registrazione tramite il Pannello di Registrazione Driver per il sistema host (metodo consigliato)
  • Routing di tutto il contenitore di log in un unico dedicato per la registrazione contenitore (questo è come la logspout contenitore di opere)
  • la Registrazione di un sidecar registrazione contenitore
  • Aggiunta di un agente di registrazione per il contenitore

È inoltre possibile utilizzare la finestra Mobile contenitori per raccogliere i registri dall’host., Se il contenitore dispone di un servizio syslog in esecuzione, è possibile inviare i registri dall’host al contenitore tramite syslog o montare i file di registro dell’host all’interno del contenitore e utilizzare un agente di monitoraggio file per leggere i file.

Script o agenti del fornitore

La maggior parte delle soluzioni di gestione dei log offrono script o agenti per rendere relativamente facile l’invio di dati da uno o più server. Gli agenti pesanti possono utilizzare risorse di sistema aggiuntive. Alcuni fornitori si integrano con i demoni rsyslog esistenti per inoltrare i log senza utilizzare molte più risorse., Loggly, ad esempio, fornisce uno script che inoltra i registri da rsyslog ai server di ingestione Loggly utilizzando il modulo omfwd.

Vederlo. Analizzalo. Ispezionalo. Risolvilo

Vedi cosa conta.

INIZIA LA PROVA GRATUITA

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *