Amicizia tra ELK e Exchange. Parte 1

Amicizia tra ELK e Exchange. Parte 1

Inizio una serie di articoli in cui voglio condividere la mia esperienza di collegamento di Exchange e ELK. Questo stack aiuterà a gestire grandi volumi di log senza doversi preoccupare della dimensione oltre la quale gli strumenti di logging tradizionali smettono di essere utili. Iniziamo a conoscere un nuovo alleato nei log.

Exchange ha un sistema di logging abbastanza ramificato. I log più richiesti sono i log di tracciamento, che monitorano il passaggio passo dopo passo di una specifica email all'interno dell'organizzazione; i log del web server, che tracciano ogni nuova sessione utente nel sistema, e i log di specifiche web application con diversi gradi di dettaglio delle sessioni. Inoltre, Exchange è in grado di memorizzare i log grezzi dei protocolli smtp, imap e pop3.

Quali strumenti possiamo utilizzare per lavorare con i log:

  • Il cmdlet Get-MessageTrackingLog: comodo per elaborare i log di tracciamento;
  • L'utilità logparser: utilizza un linguaggio pseudo-SQL per la registrazione e funziona abbastanza velocemente;
  • Un server SQL esterno: per casi particolarmente specifici (ad esempio, analisi dei dati su lunghi periodi di tempo).

Tutto ciò funziona bene quando abbiamo un paio di server e il volume dei log elaborati è dell'ordine di decine-centinaia di gigabyte. E se il numero di server supera la decina e la dimensione dei log supera il terabyte? Questo schema comincia probabilmente a crollare.

E questo è quello che succede: Get-MessageTrackingLog inizia a andare in timeout, logparser raggiunge il limite dell'architettura a 32 bit, e l'esportazione nel server SQL si interrompe al momento meno opportuno, non riuscendo a gestire un'eccezione multilinea proveniente dal servizio.

Qui entra in gioco un nuovo attore: lo stack ELK, progettato specificamente per gestire enormi volumi di log in tempi ragionevoli e con un consumo di risorse tollerabile.

Nella prima parte parlerò in dettaglio di come collegare filebeat, che fa parte dello stack ELK — è responsabile della lettura e dell'invio di file di testo semplici, nei quali diverse applicazioni registrano i loro log. Negli articoli seguenti ci soffermeremo sui componenti Logstash e Kibana.

Installazione

Dunque, l'archivio del file agent filebeat può essere scaricato da questo sito.

Effettueremo l'installazione semplicemente estraendo il contenuto del file zip. Ad esempio, in c:Program Filesfilebeat. Poi sarà necessario avviare lo script PowerShell install-service-filebeat.ps1, che è incluso, per l'installazione del servizio filebeat.

Ora siamo pronti a iniziare a configurare il file di configurazione.

Resilienza

Filebeat garantisce la consegna dei log al sistema di raccolta dei log. Questo viene realizzato tramite la registrazione delle voci nei file di log. Nella registrazione vengono memorizzate informazioni su quelle voci che sono state lette dai file di log e vengono segnate specifiche voci che sono state consegnate a destinazione.

Se non riesce a consegnare una voce, filebeat tenterà di inviarla nuovamente fino a quando non riceverà conferma di consegna dal sistema ricevente o fino a quando il file di log originale non verrà eliminato durante il processo di rotazione.

Al riavvio del servizio, filebeat leggerà dalla registrazione le informazioni sulle ultime voci lette e consegnate e leggerà le voci dai file di log in base alle informazioni nella registrazione.

Questo permette di minimizzare il rischio di perdita di informazioni sui log che devono essere inviati ai server elasticlogstash durante imprevisti guasti e operazioni di manutenzione dei server.

Puoi leggere di più su questo nella documentazione nei paragrafi: Come fa Filebeat a mantenere lo stato dei file e Come garantisce Filebeat la consegna almeno una volta?

Configurazione

L'intera configurazione è eseguita nel file di configurazione in formato yml, che è suddiviso in più 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 di raccolta log comune:

- type: log

Successivamente, indichiamo lo stato (abilitato) 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 multi-linea. Per impostazione predefinita, filebeat considera una riga del file di log come una voce. Questo funziona bene, finché non iniziamo a ricevere eccezioni nei log relative a malfunzionamenti del servizio. In questo caso, le eccezioni possono consistere di più righe. Pertanto, filebeat deve considerare una voce multi-linea 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 in questo modo:

multiline:
	pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	negate: true
	match: after

È utile aggiungere i tag nella registrazione inviata, ad esempio:

  tags: ['IIS', 'ex-srv1']

E non dimenticare di escludere dalla lavorazione le righe che iniziano con il simbolo hash:

  exclude_lines: ['^#']

Quindi, il blocco di lettura dei log sarà 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 ciascuna registrazione nel file di log come oggetto json, in cui la registrazione specifica del log è contenuta in un unico campo message. Se desideriamo lavorare con queste informazioni, dobbiamo prima analizzare questo campo in campi separati. Questo può essere fatto, ad esempio, in logstash. Questo sarà il destinatario delle registrazioni 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ò attivare il bilanciamento: in questo modo filebeat non invierà i log al primo server disponibile nell'elenco, ma distribuisce i log inviati tra più server:

hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
  loadbalance: true 

Filebeat, durante la lavorazione dei log, oltre alla registrazione del log contenuta nel campo message, aggiunge alcune informazioni di metadati, che influenzano la dimensione del documento che entra in elastic. Questi metadati possono essere selettivamente esclusi dall'invio. Questo si fa nel blocco processor utilizzando il processore drop_fields. Possono essere esclusi, 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"]

È opportuno prestare attenzione alla selezione dei campi esclusi, poiché alcuni di essi potrebbero essere utilizzati da elastic per la creazione degli indici.

Quindi, il blocco di invio dei log sarà 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 nei file, posizionati per default (directory logs, nella directory di installazione di filebeat);
  • Nome del file di log — filebeat;
  • Conservare gli ultimi 10 file di log;
  • Avviare la rotazione quando si raggiunge la dimensione di 1 MB.

Il blocco finale della configurazione del logging sarà il seguente:

logging.level: info
logging.to_files: true
logging.files:
  name: filebeat
  keepfiles: 10
  rotateeverybytes: 1048576

Configurazione 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, è fondamentale posizionare correttamente gli spazi e i segni meno.

Filebeat può verificare il file di configurazione e, se ci sono errori di sintassi, indicherà in quale riga e in quale punto della linea la sintassi è errata. Il controllo viene eseguito nel seguente modo:

.filebeat.exe test config

Inoltre, filebeat è in grado di controllare la disponibilità della rete per il ricevitore dei log. Il controllo viene avviato in questo modo:

.filebeat.exe test output

Nei prossimi capitoli parlerò della connessione e dell'integrazione di Exchange con i componenti Logstash e Kibana.

Link utili

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster