Spojujeme ELK a Exchange. Část 1

Spojujeme ELK a Exchange. Část 1

Začínám sérii článků, kde chci sdílet své zkušenosti s připojením Exchange a ELK. Tento stack nám pomůže zpracovávat velké objemy logů, aniž bychom se museli ptát, při jaké velikosti obvyklé nástroje pro logování přestanou být užitečné. Seznamme se s naším novým pomocníkem pro logy.

Exchange má poměrně rozsáhlý systém logování. Nejoblíbenější logy jsou logy sledování, které monitorují postup konkrétního e-mailu uvnitř poštovní organizace; logy webového serveru, které sledují každou novou relaci uživatele v systému, a logy konkrétních webových aplikací s různou úrovní podrobností relace. Exchange také umí uchovávat surové logy protokolů SMTP, IMAP a POP3.

Jaké nástroje můžeme použít pro práci s logy:

  • Vestavěný příkaz Get-MessageTrackingLog: vhodný na zpracování logů sledování;
  • Nástroj logparser: pro logování používá pseudo-SQL jazyk pro vyhledávání a funguje poměrně rychle;
  • Externí SQL server: pro zvlášť specifické případy (například analýzu dat za delší časová období).

To vše funguje dobře, když máme pár serverů a objem zpracovávaných logů měříme na desítkách až stovkách gigabajtů. Co ale, když se počet serverů počítá na desítky a velikost logů přesáhla terabajt? Tato schéma pravděpodobně začne selhávat.

A co se děje: Get-MessageTrackingLog začíná vyhazovat timeouty, logparser narazí na strop 32bitové architektury a export do SQL serveru se rozbije v nejnevhodnějším okamžiku, když nezpracovává mnohořádkovou výjimku od služby.

Na scénu přichází nový hráč – stack ELK, který je speciálně navržen pro manipulaci s obrovskými objemy logů v rozumných časech a s tolerovatelnou spotřebou zdrojů.

V první části se podrobněji podívám, jak připojit filebeat, který patří do části stacku ELK — odpovídá za čtení a odesílání jednoduchých textových souborů, do kterých různé aplikace zapisují své logy. V dalších článcích se podrobněji zaměříme na komponenty Logstash a Kibana.

Instalace

Takže archivní soubor agenta filebeat si můžeme stáhnout z této stránky.

Instalaci uskutečníme jednoduchým rozbalením obsahu zip souboru. Například do c:Program Filesfilebeat. Poté je nutné spustit PowerShell skript install-service-filebeat.ps1, který je součástí balení pro instalaci služby filebeat.

Nyní jsme připraveni začít konfigurovat konfigurační soubor.

Odolnost proti výpadkům

Filebeat zajišťuje doručení logů do systému pro sběr logů. To se realizuje vedením registru záznamů v logovacích souborech. V registru se uchovává informace o těch záznamech, které byly přečteny z logovacích souborů, a označují se konkrétní záznamy, které se podařilo doručit na určené místo.

Pokud se nějaký záznam nepodaří doručit, filebeat se ho pokusí znovu odeslat, dokud nedostane od přijímajícího systému potvrzení o doručení nebo dokud nebude původní logovací soubor odstraněn během rotace.

Při restartu služby filebeat bude číst z registru informace o posledních přečtených a doručených záznamech a bude číst záznamy v logovacích souborech na základě informací v registru.

To umožňuje minimalizovat riziko ztráty informací o logách, které je třeba odeslat na servery elasticlogstash, během nečekaných výpadků a provádění údržby serverů.

Více o tom lze přečíst v dokumentaci v odstavcích: Jak uvádí Filebeat stav souborů a Jak Filebeat zajišťuje doručení alespoň jednou?

Nastavení

Veškeré nastavení se provádí v konfiguračním souboru ve formátu yml, který je rozdělen do několika sekcí. Zvažme některé z nich, které se podílejí na procesu sběru logů ze serverů Exchange.

Blok zpracování logů

Blok zpracování logů začíná polem:

filebeat.inputs:

Budeme používat společný nástroj pro sběr logů:

- type: log

Dále uvádíme stav (povoleno) a cesty k adresáři s logy. Například v případě logů IIS mohou být nastavení následující:

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

Další důležité nastavení: jak by měl filebeat číst víc řádkové záznamy. Ve výchozím nastavení filebeat považuje jeden řádek logovacího souboru za jeden záznam. To funguje dobře, dokud do logu nezačnou proudit výjimky spojené s nesprávným fungováním služby. V tomto případě mohou výjimky sestávat z několika řádků. Proto by měl filebeat považovat víc řádkový záznam za jeden, pokud další řádek začíná datem. Formát záznamů logů v Exchange je takový, že každý nový záznam v logovacím souboru začíná datem. V konfiguraci to vypadá takto:

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

Má smysl přidat tagy do odesílaného záznamu, například:

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

A nezapomeňte vyloučit ze zpracování řádky začínající znakem hash:

  exclude_lines: ['^#']

Takže blok pro čtení logů bude vypadat takto:

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: ['^#']

Blok pro odesílání logů

Jednotlivé záznamy v logovacím souboru filebeat se odesílají ve formátu json, ve kterém konkrétní záznam z logu obsahuje jediné pole message. Pokud s těmito informacemi chceme pracovat, musíme toto pole nejprve rozparsovat na jednotlivá pole. Můžeme to udělat například v logstashi. Ten se stane příjemcem záznamů z filebeat. Takto to může vypadat v konfiguračním souboru filebeat:

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

Pokud je více serverů, je možné zahrnout vyvážení zátěže: pak filebeat nebude odesílat logy na první dostupný server ze seznamu, ale rozloží odesílané logy mezi několik serverů:

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

Při zpracování logů filebeat přidává do odesílaného jsonu kromě záznamu logu, který je obsažen v poli message, určité množství metadat, což ovlivňuje velikost dokumentu, který se dostává do elastic. Tato metadata lze vybraná z odesílání odstranit. Dělá se to v bloku processor pomocí procesoru drop_fields. Můžete například vyloučit následující pole:

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"]

K výběru vylučovaných polí je třeba přistupovat opatrně, neboť některá z nich mohou být na straně elastic používána k vytváření indexů.

Takže blok pro odesílání logů bude vypadat takto:

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"]

Nastavení logování filebeat

Má smysl nastavit následující logovací nastavení:

  • Úroveň logování info;
  • Zapisujeme logy do souborů uložených podle defaultu (adresář logs, ve složce pro instalaci filebeat);
  • Jméno souboru logu — filebeat;
  • Uchovávat posledních 10 souborů logů;
  • Spustit rotaci při dosažení velikosti 1 MB.

Konečná blok nastavení logování bude vypadat takto:

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

Závěrečná konfigurace

Sestavili jsme konfiguraci a nyní vypadá následovně:

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

Je důležité si uvědomit, že formát konfiguračního souboru je yml. Proto je důležité správně nastavit mezery a znaménka minus.

Filebeat umí zkontrolovat konfigurační soubor a pokud bude syntax obsahovat chyby, ukáže, na kterém řádku a v jakém místě řádku je syntaxe nesprávná. Kontrola probíhá takto:

.filebeat.exe test config

Filebeat také umí ověřit síťovou dostupnost příjemce logů. Kontrola se spouští takto:

.filebeat.exe test output

V následujících částech budu mluvit o propojení a spolupráci Exchange s komponenty Logstash a Kibana.

Užitečné odkazy

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster