Siamo amici di ELK ed Exchange. Parte 1

Siamo amici di ELK ed Exchange. Parte 1

Sto iniziando una serie di articoli in cui desidero condividere la mia esperienza nel collegamento di Exchange ed ELK. Questo stack ci aiuterà a elaborare grandi volumi di log e non dovremo chiederci quale dimensione i soliti strumenti di logging si rifiuteranno di aiutarci. Facciamo conoscenza con il nuovo combattente di log.

Exchange dispone di un sistema di registrazione abbastanza esteso. I registri più diffusi sono i registri di tracciamento, che tracciano passo dopo passo il passaggio di una lettera specifica all'interno di un'organizzazione postale; registri del server Web, che tengono traccia di ogni nuova sessione utente nel sistema e registri di applicazioni Web specifiche con vari gradi di dettaglio della sessione. Exchange può anche archiviare log grezzi dei protocolli smtp, imap e pop3.

Quali strumenti possiamo utilizzare per lavorare con i log:

  • Cmdlet standard Get-MessageTrackingLog: elabora comodamente i registri di tracciamento;
  • L'utilità logparser: per il logging, utilizza un linguaggio di ricerca pseudo-SQL e funziona abbastanza velocemente;
  • Server SQL esterno: per casi molto specifici (ad esempio, analisi di dati su lunghi periodi di tempo).

Tutto questo funziona bene quando disponiamo di un paio di server e il volume dei log elaborati si misura in decine o centinaia di gigabyte. Ma cosa succede se il numero di server è nell'ordine delle dozzine e la dimensione dei registri supera il terabyte? Molto probabilmente questo schema sta iniziando a sgretolarsi.

E questo è ciò che accade: Get-MessageTrackingLog inizia a scadere, logparser raggiunge il limite dell'architettura a 32 bit e il caricamento sul server SQL si interrompe nel momento più inopportuno, senza digerire l'eccezione su più righe dal servizio.

Qui entra in scena un nuovo attore: lo stack ELK, appositamente progettato per destreggiarsi tra enormi volumi di log in un tempo ragionevole e con un consumo di risorse tollerabile.

Nella prima parte ti racconterò in dettaglio, come connettere filebeat che appartiene a parte dello stack ELK — è responsabile della lettura e dell'invio di semplici file di testo in cui diverse applicazioni scrivono i propri registri. Nei seguenti articoli daremo uno sguardo più da vicino ai componenti Logstash e Kibana.

Installazione

Quindi, file di archivio dell'agente filebeat può essere scaricato da questo sito.

Completeremo l'installazione semplicemente estraendo il contenuto del file zip. Ad esempio, nel c:Program Filesfilebeat. Quindi è necessario eseguire lo script PowerShell install-service-filebeat.ps1, fornito con il kit, per installare il servizio filebeat.

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

tolleranza ai guasti

Filebeat garantisce la consegna dei log al sistema di raccolta log. Ciò si ottiene mantenendo un registro delle voci nei file di registro. Il registro memorizza le informazioni sui record letti dai file di registro e contrassegna i record specifici che è stato possibile consegnare alla destinazione.

Se un record non può essere consegnato, filebeat tenterà di inviarlo nuovamente finché non riceverà la conferma di consegna dal sistema ricevente o il file di registro originale non verrà eliminato durante il processo di rotazione.

Quando il servizio viene riavviato, filebeat leggerà le informazioni dal registro sugli ultimi record letti e consegnati e leggerà i record nei file di registro in base alle informazioni nel registro.

Ciò consente di ridurre al minimo il rischio di perdere le informazioni di registro che devono essere inviate ai server elasticlogstash durante guasti imprevisti e operazioni di manutenzione del server.

Puoi saperne di più su questo leggere la documentazione nei paragrafi: In che modo Filebeat mantiene lo stato dei file e in che modo Filebeat garantisce la consegna almeno una volta?

registrazione

Tutta la configurazione viene eseguita nel file di configurazione del formato yml, che è suddiviso in più sezioni. Diamo un'occhiata ad alcuni di essi coinvolti nel processo di raccolta dei registri dai server Exchange.

Blocco di elaborazione del registro

Il blocco di elaborazione del registro inizia con il campo:

filebeat.inputs:

Utilizzeremo uno strumento comune di raccolta dei log:

- type: log

Successivamente, indicare lo stato (abilitato) e il percorso della cartella con i registri. Ad esempio, nel caso dei registri IIS, le impostazioni potrebbero essere le seguenti:

    enabled: true
    paths:
	- C:inetpublogsLogFilesW3SVC1*.log
	- C:inetpublogsLogFilesW3SVC2*.log

Un'altra impostazione importante è il modo in cui filebeat dovrebbe leggere i record su più righe. Per impostazione predefinita, filebeat considera una riga di un file di registro come una voce. Funziona bene finché non iniziamo a ricevere eccezioni nel nostro registro relative al funzionamento errato del servizio. In questo caso, le eccezioni possono essere costituite da più righe. Pertanto filebeat deve contare una voce su più righe come una se la riga successiva inizia con una data. Il formato per la registrazione dei registri in Exchange è il seguente: ogni nuova voce nel file di registro inizia con una data. Nella configurazione, questa condizione si presenta così:

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

Ha senso aggiungere tag al post che stai inviando, ad esempio:

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

E non dimenticare di escludere dall'elaborazione le righe che iniziano con un carattere hash:

  exclude_lines: ['^#']

Quindi, il blocco di lettura del registro sarà simile a questo:

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 invio log

Filebeat invia singole voci nel file di registro come oggetto json, in cui una voce specifica dal registro è contenuta in un singolo campo di messaggio. Se vogliamo in qualche modo lavorare con queste informazioni, dobbiamo prima analizzare questo campo in campi separati. Questo può essere fatto, ad esempio, in logstash. Sarà il destinatario dei record di filebeat. Ecco come potrebbe apparire in un file di configurazione filebeat:

output.logstash:
  hosts: ["logstash1.domain.com:5044"]

Se sono presenti più server, è possibile abilitare il bilanciamento per essi: filebeat non invierà i log al primo server disponibile dall'elenco, ma distribuirà i log inviati tra più server:

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

Filebeat, durante l'elaborazione dei log nel json inviato, oltre alla voce di log contenuta nel campo del messaggio, aggiunge una certa quantità di metadati, che influiscono sulla dimensione del documento che finisce in elastico. Questi metadati possono essere rimossi selettivamente dall'invio. Questo viene fatto nel blocco del processore utilizzando il processore drop_fields. Ad esempio, puoi escludere 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"]

Dovresti affrontare con attenzione la selezione dei campi esclusi, perché alcuni di essi possono essere utilizzati sul lato elastico per creare indici.

Quindi, il blocco di invio del log sarà simile al seguente:

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 registrazione di filebeat

È opportuno configurare le seguenti impostazioni di registrazione:

  • Informazioni sul livello di registrazione;
  • Scriviamo i log sui file posizionati per impostazione predefinita (directory logs, nella directory di installazione di filebeat);
  • Nome del file di registro: filebeat;
  • Memorizza gli ultimi 10 file di registro;
  • Inizia la rotazione quando la dimensione raggiunge 1 MB.

Il blocco di configurazione della registrazione finale sarà simile al seguente:

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

Configurazione finale

Abbiamo assemblato la configurazione e ora appare così:

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

Filebeat può controllare il file di configurazione e, se la sintassi contiene errori, indicherà quale riga e dove nella riga la sintassi non è corretta. Il controllo viene eseguito come segue:

.filebeat.exe test config

Filebeat può anche verificare la disponibilità di rete del ricevitore di log. Il controllo funziona così:

.filebeat.exe test output

Nelle parti seguenti parlerò della connessione e dell'amicizia di Exchange con i componenti Logstash e Kibana.

Link utili

Fonte: habr.com

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