Inizio una serie di articoli in cui voglio condividere la mia esperienza con la configurazione di Exchange e ELK. Questo stack aiuterà a gestire grandi volumi di log, senza doversi preoccupare di quale sia la dimensione oltre la quale gli strumenti di logging abituali smetteranno di aiutare. Scopriamo insieme questo nuovo alleato nella gestione dei log.
Exchange dispone di un sistema di logging piuttosto articolato. I log più richiesti sono i log di tracking, che monitorano il percorso dettagliato di una specifica email all'interno dell'organizzazione, i log del server web, che tracciano ogni nuova sessione utente nel sistema, e i log di applicazioni web specifiche con diversi livelli di dettaglio delle sessioni. Inoltre, Exchange può conservare i log grezzi dei protocolli smtp, imap e pop3.
Quali strumenti possiamo utilizzare per lavorare con i log:
- Il cmdlet integrato Get-MessageTrackingLog: comodo per elaborare i log di tracking;
- L'utilità logparser: utilizza un linguaggio pseudo-SQL per la ricerca dei log e funziona piuttosto rapidamente;
- Un server SQL esterno: per casi particolarmente specifici (ad esempio, analisi dei dati su ampi intervalli temporali).
Tutto ciò funziona bene quando abbiamo un paio di server e il volume dei log da elaborare è misurato in decine o centinaia di gigabyte. Ma cosa succede se il numero dei server arriva a decine e la dimensione dei log supera il terabyte? Questo schema, molto probabilmente, inizia a presentare problemi.
Ecco cosa succede: Get-MessageTrackingLog comincia a fallire per timeout, logparser si scontra con il limite dell'architettura a 32 bit, e l'esportazione nel server SQL si blocca nel momento meno opportuno, non riuscendo a gestire una multiriga di eccezione dal servizio.
Qui entra in scena un nuovo attore: lo stack ELK, progettato per gestire enormi volumi di log in tempi ragionevoli con un consumo di risorse tollerabile.
Nella prima parte parlerò in dettaglio di come connettere filebeat, che fa parte dello stack ELK — È responsabile della lettura e dell'invio di file di testo semplici, in cui diverse applicazioni scrivono i loro log. Negli articoli successivi ci soffermeremo sui componenti Logstash e Kibana.
Installazione
Quindi, il file-archivio dell'agente filebeat .
Procederemo con l'installazione semplicemente estraendo il contenuto del file zip. Ad esempio, in c:Program Filesfilebeat. Poi è necessario eseguire lo script PowerShell. install-service-filebeat.ps1, incluso nella confezione, per installare il servizio filebeat.
Ora siamo pronti per iniziare a configurare il file di configurazione.
Affidabilità
Filebeat garantisce la consegna dei log al sistema di raccolta log. Questo avviene mantenendo un registro delle voci nei file di log. Nel registro si conserva l'informazione sulle voci lette dai file di log, segnando quelle che sono state consegnate con successo alla destinazione.
Se una voce non può essere consegnata, filebeat cercherà di inviarla nuovamente fino a quando non riceverà conferma di avvenuta consegna dal sistema ricevente o fino a quando il file di log originale non sarà eliminato durante il processo di rotazione.
Durante il riavvio del servizio, filebeat leggerà dal registro le informazioni sulle ultime voci lette e consegnate e continuerà a leggere le voci nei file di log in base alle informazioni contenute nel registro.
Questo permette di minimizzare il rischio di perdita di informazione sui log che devono essere inviati ai server elasticlogstash durante imprevisti e operazioni di manutenzione dei server.
Per maggiori dettagli, puoi : Come mantiene Filebeat lo stato dei file e come garantisce la consegna almeno una volta?
Impostazione
Tutte le impostazioni vengono eseguite nel file di configurazione in formato yml, che è suddiviso in diverse sezioni. Esaminiamo alcune di esse che partecipano al processo di raccolta dei log dai server Exchange.
Blocco di elaborazione dei log
Il blocco di elaborazione dei log inizia con il campo:
filebeat.inputs:Utilizzeremo uno strumento comune per la raccolta dei log:
- type: logSuccessivamente, specifichiamo lo stato (attivato) e i percorsi della cartella contenente i log. Ad esempio, nel caso dei log IIS, le impostazioni potrebbero essere le seguenti:
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
Un'altra impostazione importante: come Filebeat deve leggere le voci multilinea. Per impostazione predefinita, Filebeat considera una riga del file di log come una singola voce. Questo funziona bene, finché i log non iniziano a ricevere eccezioni legate al malfunzionamento del servizio. In questo caso, le eccezioni possono consistere in più righe. Pertanto, Filebeat deve considerare una voce multilinea come una sola, se la riga successiva inizia con una data. Il formato delle voci di log in Exchange è tale che ogni nuova voce nel file di log inizia con una data. Nella configurazione, questa condizione appare nel seguente modo:
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: afterHa senso aggiungere tag nel record inviato, per esempio:
tags: ['IIS', 'ex-srv1']E non dimenticare di escludere le righe che iniziano con il simbolo hash:
exclude_lines: ['^#']Quindi, il blocco di lettura dei log apparirà come segue:
filebeat.inputs:
- type: log
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']Blocco di invio dei log
Filebeat invia le singole voci nel file di log come oggetto json, in cui una specifica voce del log è contenuta in un unico campo message. Se vogliamo lavorare con queste informazioni, dobbiamo prima analizzare questo campo in campi separati. Possiamo farlo, per esempio, in logstash. Questo sarà il destinatario dei record da filebeat. Ecco come potrebbe apparire nel file di configurazione di filebeat:
output.logstash:
hosts: ["logstash1.domain.com:5044"]
Se ci sono più server, si può abilitare il bilanciamento: in questo modo filebeat non invierà i log al primo server disponibile nell'elenco, ma distribuisce i log inviati tra diversi server:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true Filebeat, durante l'elaborazione dei log, aggiunge al JSON inviato, oltre alla registrazione del log presente nel campo message, una certa quantità di metadati che influiscono sulla dimensione del documento inoltrato a Elastic. Questi metadati possono essere rimossi selettivamente dall'invio. Questo si fa nel blocco processor usando il processore drop_fields. È possibile escludere, ad esempio, i seguenti campi:
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]È importante selezionare con attenzione i campi da escludere, poiché alcuni di essi potrebbero essere utilizzati da Elastic per la creazione degli indici.
Quindi, il blocco di invio dei log apparirà come segue:
output.logstash:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]Impostazioni di logging di Filebeat
È utile impostare le seguenti configurazioni di logging:
- Livello di logging info;
- Registriamo i log in file, situati per impostazione predefinita (directory logs, nella directory di installazione di Filebeat);
- Il nome del file di log è filebeat;
- Conservare gli ultimi 10 file di log;
- Avviare la rotazione al raggiungimento di una dimensione di 1MB.
Il blocco finale della configurazione del logging apparirà così:
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576Configurazione finale
Abbiamo raccolto la configurazione e ora appare come segue:
filebeat.inputs:
- type: log
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: after
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']
output.logstash:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true
processors:
- drop_fields:
fields: ["agent.ephemeral_id", "agent.hostname", "agent.id", "agent.type", "agent.version", "agent", "ecs.version", "ecs", "input.type", "input", "log.offset", "version"]
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576È importante capire che il formato del file di configurazione è yml. Pertanto, è cruciale prestare attenzione agli spazi e ai segni meno.
Filebeat è in grado di verificare il file di configurazione e, se ci sono errori di sintassi, indicherà in quale riga e in quale punto della riga la sintassi è errata. Il controllo viene eseguito nel seguente modo:
.filebeat.exe test configInoltre, filebeat è in grado di verificare la disponibilità di rete del ricevitore dei log. Il controllo si avvia in questo modo:
.filebeat.exe test outputNelle prossime parti parlerò della connessione e dell'integrazione di Exchange con i componenti Logstash e Kibana.
Link utili
Fonte: habr.com
