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 .
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 : 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: logDá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: afterMá 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: 1048576Zá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: 1048576Je 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 configFilebeat také umí ověřit síťovou dostupnost příjemce logů. Kontrola se spouští takto:
.filebeat.exe test outputV 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
