Začínam sériu článkov, v ktorých sa podelím o svoje skúsenosti s prepojením Exchange a ELK. Tento balík vám pomôže spracovať veľké objemy protokolov bez toho, aby ste sa museli zamýšľať nad tým, pri akej veľkosti vaše tradičné nástroje na protokolovanie prestanú fungovať. Poďme sa zoznámiť s týmto novým bojovníkom za protokoly.
Exchange má pomerne rozsiahly systém protokolovania. Najbežnejšie používané protokoly sú protokoly sledovania, ktoré sledujú postupný priebeh konkrétneho e-mailu v rámci poštovej organizácie; protokoly webového servera, ktoré sledujú každú novú reláciu používateľa v systéme; a protokoly konkrétnych webových aplikácií s rôznou úrovňou detailov relácie. Exchange môže tiež ukladať nespracované protokoly pre protokoly SMTP, IMAP a POP3.
Aké nástroje môžeme použiť na prácu s protokolmi:
- Štandardný cmdlet Get-MessageTrackingLog: pohodlne spracováva záznamy sledovania;
- Nástroj Logparser: používa na logovanie pseudo-SQL jazyk a pracuje pomerne rýchlo;
- Externý SQL server: pre veľmi špecifické prípady (napr. analýza údajov počas dlhého časového obdobia).
Toto všetko funguje dobre, keď máme niekoľko serverov a objem spracovávaných protokolov sa meria v desiatkach alebo stovkách gigabajtov. Čo ak sú však servery desiatky a veľkosť protokolu presiahne terabajt? Tento systém sa pravdepodobne začne rúcať.
A deje sa toto: Časový limit funkcie Get-MessageTrackingLog sa zvyšuje, logparser narazí na limity 32-bitovej architektúry a nahrávanie na SQL Server sa preruší v najnevhodnejšom okamihu, pričom sa nepodarí spracovať viacriadkovú výnimku zo služby.
Tu vstupuje na scénu nový hráč: zásobník ELK, ktorý je špeciálne navrhnutý na spracovanie obrovských objemov protokolov v rozumnom časovom rámci a s zvládnuteľnou spotrebou zdrojov.
V prvej časti vám podrobne poviem, Ako pripojiť Filebeat, ktorý je súčasťou ELK stacku — je zodpovedný za čítanie a odosielanie textových súborov, do ktorých rôzne aplikácie zapisujú svoje protokoly. V budúcich článkoch sa podrobnejšie budeme venovať komponentom 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 FilesfilebeatPotom musíte spustiť skript PowerShell. install-service-filebeat.ps1, ktorý je súčasťou súpravy, na inštaláciu služby filebeat.
Teraz sme pripravení začať s prispôsobovaním konfiguračného súboru.
odolnosť proti chybám
Filebeat zabezpečuje doručovanie protokolov do systému zberu protokolov. Toto sa dosahuje vedením registra protokolových súborov. Register ukladá informácie o záznamoch načítaných zo protokolových súborov a označuje konkrétne záznamy, ktoré boli úspešne doručené do cieľa.
Ak sa záznam nepodarí doručiť, filebeat sa ho pokúsi znova odoslať, kým nedostane potvrdenie o doručení od prijímajúceho systému alebo kým sa pôvodný súbor protokolu počas rotácie nevymaže.
Po reštarte služby filebeat načíta informácie o posledných prečítaných a doručených záznamoch z registra a na základe informácií v registri načíta záznamy v súboroch denníka.
Toto pomáha minimalizovať riziko straty informácií z protokolov, ktoré je potrebné odoslať na servery elasticlogstash počas neočakávaných zlyhaní a údržby servera.
Viac informácií o tom nájdete tu Ako Filebeat uchováva stav súborov a ako Filebeat zabezpečuje aspoň jedno doručenie?
nastavenie
Všetka konfigurácia sa vykonáva v konfiguračnom súbore vo formáte yml, ktorá je rozdelená do niekoľkých sekcií. Pozrime sa na niektoré z nich, ktoré sa podieľajú na zhromažďovaní protokolov zo serverov Exchange.
Jednotka na spracovanie guľatiny
Blok spracovania protokolu začína poľom:
filebeat.inputs:Použijeme bežný nástroj na zhromažďovanie protokolov:
- type: logĎalej zadajte stav (povolené) a cestu k priečinku s protokolmi. Napríklad pre protokoly IIS môžu byť nastavenia nasledovné:
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
Ďalšie dôležité nastavenie: ako má filebeat čítať viacriadkové položky. Predvolene filebeat počíta jeden riadok súboru denníka ako jednu položku. Toto funguje dobre, kým nezačneme dostávať výnimky súvisiace s poruchami služby. V tomto prípade môžu výnimky pozostávať z viacerých riadkov. Preto by filebeat mal počítať viacriadkovú položku ako jednu, ak nasledujúci riadok začína dátumom. Formát denníka v Exchange je nasledovný: každá nová položka v súbore denníka začína dátumom. V konfigurácii táto podmienka vyzerá takto:
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: afterMá zmysel pridať k príspevku, ktorý odosielate, značky, napríklad:
tags: ['IIS', 'ex-srv1']A nezabudnite zo spracovania vylúčiť riadky, ktoré začínajú symbolom mriežky:
exclude_lines: ['^#']Blok na čítanie protokolov bude teda vyzerať 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 odosielania protokolu
Filebeat odosiela jednotlivé položky protokolového súboru ako objekt JSON s jedným poľom „message“ obsahujúcim každý konkrétny záznam protokolu. Ak chceme s týmito informáciami pracovať, musíme najprv toto pole analyzovať na jednotlivé polia. To sa dá urobiť napríklad v logstash, ktorý bude príjemcom záznamov filebeat. Takto to môže vyzerať v konfiguračnom súbore filebeat:
output.logstash:
hosts: ["logstash1.domain.com:5044"]
Ak máte viacero serverov, môžete pre ne povoliť vyrovnávanie záťaže: potom filebeat nebude odosielať protokoly na prvý dostupný server v zozname, ale rozdelí odoslané protokoly medzi niekoľko serverov:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true Pri spracovaní protokolov do formátu JSON pridáva Filebeat k záznamu protokolu v poli správy niektoré metadáta, ktoré ovplyvňujú veľkosť dokumentu odoslaného do Elasticu. Tieto metadáta je možné selektívne odstrániť z odoslaného dokumentu. Toto sa vykonáva v bloku procesora pomocou funkcie procesor. drop_fieldsNapríklad je možné vylúčiť 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 dôležité postupovať opatrne, pretože niektoré z nich sa môžu použiť na elastickej strane na vytváranie indexov.
Blok odosielania protokolov bude teda vyzerať 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"]Nastavenia protokolovania Filebeat
Má zmysel nastaviť nasledujúce nastavenia protokolovania:
- Informácie o úrovni protokolovania;
- Logy zapisujeme do súborov, ktoré sa štandardne nachádzajú (adresár logs, v inštalačnom adresári filebeat);
- Názov súboru protokolu je filebeat;
- Uchovávajte posledných 10 súborov denníka;
- Spustiť rotáciu, keď veľkosť dosiahne 1 MB.
Finálny blok nastavení protokolovania bude vyzerať takto:
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576Konečná konfigurácia
Konfiguráciu sme dali dokopy a teraz vyzerá 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: ['^#']
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é pochopiť, že formát konfiguračného súboru je .yml. Preto je dôležité správne používať medzery a znamienka mínus.
Filebeat dokáže overiť konfiguračný súbor a ak syntax obsahuje chyby, označí riadok a miesto, kde je syntax nesprávna. Overenie sa vykonáva nasledovne:
.filebeat.exe test configFilebeat dokáže tiež skontrolovať dostupnosť siete prijímača protokolov. Kontrolu spustíte takto:
.filebeat.exe test outputV nasledujúcich častiach budem hovoriť o prepojení a integrácii Exchange s komponentmi Logstash a Kibana.
Užitočné odkazy
Zdroj: hab.com
