Vi förenar ELK och Exchange. Del 1

Vi förenar ELK och Exchange. Del 1

Jag börjar en serie artiklar dÀr jag vill dela med mig av min erfarenhet av att ansluta Exchange och ELK. Denna stack kommer att hjÀlpa till att hantera stora volymer av loggar utan att behöva fundera pÄ vid vilken storlek vanliga loggningsverktyg slutar hjÀlpa oss. LÄt oss lÀra kÀnna en ny kÀmpe i loggar.

Exchange har ett ganska utbyggt loggningssystem. De mest efterfrÄgade loggarna Àr spÄrningsloggar, som följer den steg-för-steg-processen av ett specifikt meddelande inom e-postorganisationen; loggar frÄn webbservern, som spÄrar varje ny anvÀndarsession i systemet, och loggar frÄn specifika webbapplikationer med olika detaljnivÄer för sessioner. Dessutom har Exchange möjlighet att lagra rÄa loggar för protokollen smtp, imap och pop3.

Vilka verktyg kan vi anvÀnda för att arbeta med loggar:

  • Inbyggda kommandot Get-MessageTrackingLog: praktiskt för att bearbeta spĂ„rningsloggar;
  • Verktyget logparser: anvĂ€nder en pseudö-SQL-syntax för loggning och fungerar ganska snabbt;
  • Extern SQL-server: för sĂ€rskilt specifika fall (t.ex. analys av data över lĂ„nga tidsperioder).

Allt detta fungerar ganska bra nÀr vi har ett par servrar och mÀngden bearbetade loggar mÀts i tiotals-hundratals gigabyte. Men vad hÀnder om antalet servrar gÄr upp till tiotals och storleken pÄ loggarna överstiger en terabyte? Denna schematik börjar sannolikt att falla samman.

Och vad som hÀnder Àr: Get-MessageTrackingLog börjar timeouta, logparser nÄr taket för 32-bitarsarkitekturen, och exporten till SQL-servern gÄr sönder vid fel nytt tillfÀlle och kan inte hantera en fler-radig exception frÄn tjÀnsten.

HĂ€r kommer en ny aktör in pĂ„ scenen – ELK-stacken, som Ă€r speciellt designad för att jonglera stora volymer av loggar inom rimliga tidsramar med en acceptabel resursförbrukning.

I den första delen kommer jag att detaljerat berĂ€tta om, hur man ansluter filebeat, som tillhör ELK-stacken, – ansvarar för att lĂ€sa och skicka enkla textfiler, dĂ€r olika applikationer skriver sina loggar. I kommande artiklar kommer vi att gĂ„ mer ingĂ„ende pĂ„ komponenterna Logstash och Kibana.

Installation

SÄ, filarkivet för filebeat-agenten kan laddas ner frÄn denna webbplats..

Vi kommer att installera det genom att enkelt packa upp innehÄllet i zip-filen. Till exempel i c:Program Filesfilebeat.Sedan behöver vi köra PowerShell-skriptet install-service-filebeat.ps1,som följer med, för att installera filebeat-tjÀnsten.

Nu Àr vi redo att börja konfigurera konfigurationsfilen.

Fel-tolerans

Filebeat garanterar leverans av loggar till loggsamlingssystemet. Detta uppnÄs genom att hÄlla en register över poster i loggfilerna. Registret lagrar information om de poster som har lÀsts frÄn loggfilerna och markerar specifika poster som framgÄngsrikt har skickats till destinationsplatsen.

Om en post inte kan levereras kommer filebeat att försöka skicka den igen tills den fÄr en bekrÀftelse frÄn mottagande system eller den ursprungliga loggfilen tas bort under rotation.

Vid omstart av filebeat-tjÀnsten kommer den att lÀsa information frÄn registret om de senaste lÀsta och levererade posterna och kommer att lÀsa poster i loggfilerna baserat pÄ informationen i registret.

Detta minimerar risken för att förlora information om loggar som behöver skickas till servrarna elasticlogstash under oförutsedda avbrott och under serverunderhÄll.

Mer om detta kan lÀsas i dokumentationen i avsnitten: Hur Filebeat hÄller reda pÄ filernas tillstÄnd och Hur Filebeat sÀkerstÀller leverans minst en gÄng?

InstÀllning

All konfiguration görs i en konfigurationsfil av formatet yml, som Àr uppdelad i flera sektioner. LÄt oss titta pÄ nÄgra av dem som deltar i processen för insamling av loggar frÄn Exchange-servrar.

Loggbehandlingsblock

Loggbehandlingsblocket börjar med fÀltet:

filebeat.inputs:

Vi kommer att anvÀnda ett gemensamt verktyg för logginsamling:

- typ: logg

DÀrefter anger vi status (aktiverad) och vÀgar till mappen med loggar. Till exempel, i fallet med IIS-loggar kan instÀllningarna se ut pÄ följande sÀtt:

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

Ytterligare en viktig instÀllning: hur filebeat ska lÀsa flera rader poster. Som standard rÀknar filebeat en rad i loggfilen som en post. Detta fungerar bra tills vi börjar fÄ undantag relaterade till felaktig funktion av tjÀnsten. I detta fall kan undantagen bestÄ av flera rader. DÀrför mÄste filebeat betrakta en fleradig post som en, om nÀsta rad börjar med ett datum. Loggformatet i Exchange Àr sÄdant att varje ny post i loggfilen börjar med ett datum. I konfigurationen ser detta villkor ut sÄ hÀr:

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

Det Àr meningsfullt att lÀgga till taggar i den skickade posten, till exempel:

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

Och glöm inte att utesluta rader som börjar med ett hash-tecken:

  exclude_lines: ['^#']

SÄ, blocket för att lÀsa loggarna kommer att se ut pÄ följande sÀtt:

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

Blocket för att skicka loggar

Individuella poster i loggfilen skickas av filebeat som ett json-objekt, dÀr den specifika posten frÄn loggen finns i fÀltet message. Om vi vill arbeta med denna information mÄste vi först parsa detta fÀlt till separata fÀlt. Detta kan göras, till exempel, i logstash. Det kommer att vara mottagaren av posterna frÄn filebeat. SÄ hÀr kan det se ut i filebeat-konfigurationsfilen:

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

Om det finns flera servrar kan indikatorn för lastbalansering aktiveras: dÄ kommer filebeat att skicka loggar inte till den första tillgÀngliga servern i listan, utan fördela de skickade loggarna mellan flera servrar:

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

Filebeat lÀgger till viss metadata i det skickade json-objektet, utöver loggposten som finns i fÀltet message, vilket pÄverkar storleken pÄ dokumentet som skickas till elastic. Denna metadata kan selektivt tas bort frÄn sÀndningen. Detta görs i blocket processor med hjÀlp av processorn drop_fields. Exempelvis kan följande fÀlt uteslutas:

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

Valet av uteslutna fÀlt bör göras noggrant, eftersom vissa av dem kan anvÀndas pÄ elastic-sidan för att bygga index.

SÄ, blocket för att skicka loggar kommer att se ut pÄ följande sÀtt:

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

InstÀllningar för filebeat-loggning

Det Àr meningsfullt att stÀlla in följande loggningsalternativ:

  • LoggningsnivĂ„n info;
  • Loggar skrivs till filer som finns pĂ„ standardplats (katalog logs, i installationskatalogen för filebeat);
  • Loggfilens namn Ă€r filebeat;
  • Spara de senaste 10 loggfilerna;
  • Starta rotation nĂ€r storleken nĂ„r 1 MB.

Den slutliga loggningsinstÀllningen kommer att se ut sÄ hÀr:

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

Den slutliga konfigurationen kommer att se ut pÄ följande sÀtt:

Vi har samlat konfigurationen, och nu ser den ut sÄ hÀr:

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

Det Àr viktigt att förstÄ att konfigurationsfilens format Àr yml. DÀrför Àr det viktigt att korrekt stÀlla in mellanslag och bindestreck.

Filebeat kan kontrollera konfigurationsfilen, och om syntaxen innehÄller fel, kommer den att ange vilken rad och pÄ vilken plats i raden syntaxen Àr felaktig. Kontroll görs pÄ följande sÀtt:

.filebeat.exe test config

Dessutom kan filebeat kontrollera den nÀtverksmÀssiga tillgÀngligheten av loggmottagaren. Kontroll körs sÄ hÀr:

.filebeat.exe test output

I nÀsta avsnitt kommer jag att berÀtta om kopplingen och samarbetet mellan Exchange och komponenterna Logstash och Kibana.

Nyttiga lÀnkar

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster