Začínam sériu článkov, v ktorých chcem zdieľať svoje skúsenosti s pripojením Exchange a ELK. Táto technológia pomôže spracovávať veľké objemy logov a nezamýšľať nad otázkou, pri akej veľkosti zvyčajné nástroje na logovanie prestanú pomáhať. Poďme sa zoznámiť s novým hráčom v oblasti logov.
Exchange disponuje dosť rozvetveným systémom logovania. Najviac vyhľadávané logy sú logy sledovania, ktoré sledujú krok po kroku prechod konkrétneho e-mailu v rámci poštovej organizácie; logy webového servera, ktoré sledujú každú novú reláciu používateľa v systéme, a logy konkrétnych webových aplikácií rôznej úrovne podrobnosti relácie. Exchange tiež dokáže uchovávať surové logy protokolov smtp, imap a pop3.
Aké nástroje môžeme použiť na prácu s logmi:
- Štandardný cmdlet Get-MessageTrackingLog: pohodlne spracováva logy sledovania;
- Nástroj logparser: na logovanie používa pseudo-SQL jazyk na vyhľadávanie a funguje pomerne rýchlo;
- Externý SQL server: pre osobitne špecifické prípady (napríklad analýzu dát za dlhé časové obdobia).
Toto všetko funguje celkom dobre, keď máme pár serverov a objem spracovávaných logov sa meria v desiatkach-stovkách gigabajtov. A čo ak počet serverov prekročil desiatky a veľkosť logov prešla terabajty? Táto schéma pravdepodobne začne zlyhávať.
A tu nastáva problém: Get-MessageTrackingLog začne padať z dôvodu časového limitu, logparser narazí na strop 32-bitovej architektúry a export do SQL servera sa pokazí v najnepriaznivejšom momente, keď nezvládne víceročnú výnimku od služby.
Tu prichádza na scénu nový hráč – technológia ELK, ktorá je špeciálne navrhnutá na manipuláciu s obrovskými objemami logov v primeraných časoch a s prijateľnou spotrebou zdrojov.
V prvej časti podrobne popíšem, ako pripojiť filebeat, ktorý patrí k časti technológie ELK — zodpovedá za čítanie a odosielanie jednoduchých textových súborov, do ktorých rôzne aplikácie zapisujú svoje logy. V nasledujúcich článkoch sa podrobnejšie zameriame na komponenty Logstash a Kibana.
Inštalácia
Takže archívny súbor agenta filebeat .
Inštaláciu vykonáme jednoduchým rozbalením obsahu zip súboru. Napríklad v c:Program Filesfilebeat. Potom je potrebné spustiť skript PowerShell install-service-filebeat.ps1, ktorý je súčasťou balíka, na inštaláciu služby filebeat.
Teraz sme pripravení začať nastavovať konfiguračný súbor.
Odolnosť voči zlyhaniam
Filebeat zabezpečuje dodávku logov do systému na zber logov. To sa realizuje vedením registra záznamov v logovacích súboroch. V registri sú uložené informácie o tých záznamoch, ktoré boli prečítané z logovacích súborov, a sú označené konkrétne záznamy, ktoré sa podarilo dodať na miesto určenia.
Ak sa nejaký záznam nedá dodať, filebeat sa ho bude snažiť zaslať znova, kým od prijímajúceho systému nedostane potvrdenie o dodaní, alebo kým pôvodný logovací súbor nebude odstránený v procese rotácie.
Pri reštarte služby filebeat sa prečíta z registra informácia o posledných prečítaných a dodaných záznamoch a bude čítať záznamy v logovacích súboroch na základe informácií z registra.
To minimalizuje riziko straty informácií o logoch, ktoré je potrebné poslať na servery elasticlogstash, počas neočakávaných porúch a vykonávania technickej údržby serverov.
Podrobnejšie o tom sa dá : Ako Filebeat uchováva stav súborov a Ako Filebeat zabezpečuje dodanie aspoň raz?
Nastavenie
Celé nastavenie sa vykonáva v konfiguračnom súbore formátu yml, ktorý je rozdelený na niekoľko sekcií. Pozrime sa na niektoré z nich, ktoré sa podieľajú na procese zbierania logov zo serverov Exchange.
Blok spracovania logov
Blok spracovania logov začína polom:
filebeat.inputs:Budeme používať spoločný nástroj na zber logov:
- type: logĎalej uvádzame stav (povolené) a cesty do priečinka s logmi. Napríklad v prípade logov IIS môžu byť nastavenia nasledujúce:
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
Ešte jedno dôležité nastavenie: ako by filebeat mal čítať viacriadkové záznamy. Podľa predvoleného nastavenia filebeat považuje jeden riadok logovacieho súboru za jeden záznam. To funguje dobre, pokiaľ do logu nezačnú prichádzať výnimky týkajúce sa nesprávnej činnosti služby. V takom prípade môžu byť výnimky zložené z viacerých riadkov. Preto by mal filebeat považovať viacriadkový záznam za jeden, ak nasledujúci riadok začína dátumom. Formát záznamu logov v Exchange je taký, že každý nový záznam v logovacom súbore začína dátumom. V konfigurácii vyzerá táto podmienka takto:
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: afterMá zmysel pridať štítky do odosielanej záznamu, napríklad:
tags: ['IIS', 'ex-srv1']A nezabudnúť vylúčiť zo spracovania riadky, ktoré začínajú mriežkovým symbolom:
exclude_lines: ['^#']Takže blok na čítanie logov bude vyzerať nasledovne:
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 na odosielanie logov
Jednotlivé záznamy v logovom súbore filebeat odosiela vo forme objektu json, v ktorom konkrétny záznam z logu obsahuje v jedinom poli message. Ak chceme s týmito informáciami nejakým spôsobom pracovať, musíme toto pole najprv rozparsovať na jednotlivé polia. Môžeme to urobiť napríklad v logstashi. Ten bude príjemcom záznamov z filebeat. Takto to môže vyzerať v konfiguračnom súbore filebeat:
output.logstash:
hosts: ["logstash1.domain.com:5044"]
Ak je viacero serverov, je možné zapnúť vyvažovanie: vtedy filebeat nebude posielať logy na prvý dostupný server zo zoznamu, ale bude rozdeľovať odosielané logy medzi viaceré servery:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true Filebeat pri spracovaní logov v odosielanom json okrem záznamu logu, ktorý je obsiahnutý v poli message, pridáva určité množstvo metadát, ktoré ovplyvňujú veľkosť dokumentu, ktorý sa dostáva do elasticu. Tieto metadáta je možné selektívne odstrániť z odosielania. Robí sa to v bloku processor pomocou procesora drop_fields. Je možné vylúčiť napríklad nasledujúce polia:
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"]Pri výbere vylúčených polí je potrebné pristupovať opatrne, pretože niektoré z nich môžu byť používané na strane elastic pre budovanie indexov.
Takže blok na odosielanie logov bude vyzerať nasledovne:
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"]Nastavenia logovania filebeat
Má zmysel nastaviť nasledujúce nastavenia logovania:
- Úroveň logovania info;
- Zapisujeme logy do súborov umiestnených podľa predvolieb (adresár logs, v adresári inštalácie filebeat);
- Názov súboru logu — filebeat;
- Uchovávať posledných 10 súborov logov;
- Spustiť rotáciu pri dosiahnutí veľkosti 1MB.
Finálne nastavenie logovania bude vyzerať takto:
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576Konečná konfigurácia
Zostavili sme konfiguráciu a teraz vyzerá nasledovne:
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é chápať, že formát konfiguračného súboru je yml. Preto je dôležité správne nastavovať medzery a znaky minus.
Filebeat dokáže skontrolovať konfiguračný súbor a ak bude syntax obsahovať chyby, ukáže, v ktorom riadku a na ktorom mieste v riadku je syntax nesprávna. Kontrola prebieha nasledujúcim spôsobom:
.filebeat.exe test configOkrem toho filebeat dokáže overiť sieťovú dostupnosť prijímača logov. Kontrola sa spúšťa takto:
.filebeat.exe test outputV nasledujúcich častiach poviem o pripojení a spolupráci Exchange s komponentmi Logstash a Kibana.
Užitočné odkazy
Zdroj: habr.com
