Eg begynner ein serie artiklar der eg vil dele mine erfaringar med Ä koble til Exchange og ELK. Denne stakken vil hjelpe med Ä hÄndtere store mengder loggar utan Ä lure pÄ nÄr dei vanlege loggingverktÞya vil slutte Ä hjelpe oss. La oss bli kjent med den nye kjempen i loggane.
Exchange har eit ganske omfattande logging system. Dei mest etterspurde loggane er tracking-loggar, som sporer steg-for-steg prosessen til eit spesifikt brev innanfor postorganisasjonen; webserverloggar, som sporer kvar nye brukarsesjon i systemet, og loggar frÄ spesifikke webapplikasjonar med ulik detaljnivÄ for sesjonar. I tillegg kan Exchange lagre rÄloggar for SMTP, IMAP og POP3 protokolla.
Kva verktĂžy kan vi bruke for Ă„ arbeide med loggar:
- Standard cmdlet Get-MessageTrackingLog: praktisk for Ă„ behandle tracking-loggar;
- VerktÞyet logparser: bruker ein pseudo-SQL-sprÄk for logging og fungerer ganske raskt;
- Ekstern SQL-server: for spesielt spesifikke tilfelle (for eksempel, analyse av data over lange tidsperiodar).
Alt dette fungerer greitt nÄr vi har eit par serverar og mengda av behandlede loggar mÄles i titalls til hundrevis av gigabyte. Men kva om talet pÄ serverar gÄr opp til titalls og storleiken pÄ loggane har overskrid terekabyte? Denne ordninga vil mest sannsynleg begynne Ä svikte.
Og kva skjer dÄ: Get-MessageTrackingLog begynner Ä feile pÄ grunn av timeout, logparser mÞter taket pÄ 32-bits arkitekturen, og eksport til SQL-serveren krasjar pÄ det absolutt dÄrlegaste tidspunktet, utan Ä klare Ä hÄndtere eit flerlina exception frÄ tenesta.
Her kjem ein ny deltakar pĂ„ bana â ELK stakken, som er spesialdesignet for Ă„ jonglere store loggmengder pĂ„ fornuftig tid med akseptabel ressursbruk.
I den fÞrste delen vil eg grundig forklare, korleis ein koblar til filebeat, som er ein del av ELK stakken, og som ansvarar for Ä lese og sende enkle tekstfiler der ulike applikasjonar skriv loggane sine. I dei komande artiklane vil vi sjÄ nÊrmare pÄ komponentane Logstash og Kibana.
Installasjon
SĂ„, fil-arkivet til filebeat-agenten .
Vi vil installere ved Ä pakke ut innhaldet i zip-fila. For eksempel, i c:Program Filesfilebeat. Deretter mÄ vi kjÞre PowerShell-skriptet install-service-filebeat.ps1, som fÞlger med, for Ä installere filebeat-tenesta.
No er vi klare til Ă„ begynne Ă„ konfigurere konfigurasjonsfilen.
Feiltoleranse
Filebeat sikrer levering av logger til loggsamlingssystemet. Dette oppnÄs ved Ä fÞre et register over postene i loggfilene. I registeret lagres informasjon om de postene som har blitt lest fra loggfilene, og spesifikke poster merkes som vellykket levert til bestemmelsesstedet.
Hvis en post ikke kan leveres, vil Filebeat prÞve Ä sende den pÄ nytt til den mottakende systemet bekrefter leveransen, eller til den opprinnelige loggfilen blir slettet under rotasjonen.
Ved omstart av Filebeat vil det lese registerinformasjonen om de siste leste og leverte postene, og lese poster i loggfilene basert pÄ informasjonen i registeret.
Dette bidrar til Ä minimere risikoen for tap av informasjon om logger som mÄ sendes til Elasticlogstash-serverne under uforutsette nedbrudd og ved vedlikeholdsoperasjoner pÄ serverne.
Mer om dette kan : Hvordan Filebeat opprettholder tilstanden til filer og Hvordan Filebeat sikrer minst én levering?
Konfigurasjon
All konfigurasjon gjÞres i en konfigurasjonsfil i formatet yml, som er delt opp i flere seksjoner. La oss se pÄ noen av dem som er involvert i prosessen med Ä samle logger fra Exchange-servere.
Blokken for loggbehandling
Blokken for loggbehandling starter med feltet:
filebeat.inputs:Vi skal bruke et felles verktĂžy for loggsamling:
- type: logDeretter spesifiserer vi status (aktivert) og stiene til mappen med logger. For eksempel, i tilfellet med IIS-logger kan innstillingene vĂŠre som fĂžlger:
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
En annen viktig innstilling: hvordan Filebeat skal lese flerlinjeposter. Som standard regner Filebeat en linje i loggfilen som en post. Dette fungerer bra sÄ lenge vi ikke begynner Ä motta unntak relatert til feil i tjenesten. I sÄ fall kan unntakene bestÄ av flere linjer. Derfor mÄ Filebeat regne en flerlinjepost som en, hvis neste linje begynner med dato. Formatet for logger i Exchange er som fÞlger: hver ny post i loggfilen begynner med en dato. I konfigurasjonen ser dette betingelsen slik ut:
multiline:
pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negate: true
match: afterDet gir mening Ă„ legge til tags i den sendte posten, for eksempel:
tags: ['IIS', 'ex-srv1']Og ikke glem Ă„ ekskludere linjer som begynner med hash-tegnet:
exclude_lines: ['^#']SĂ„ leseblokken for logger vil se slik ut:
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: ['^#']Loggsendingsblokk
Hver post i loggfilen sendes av filebeat som et JSON-objekt, hvor den spesifikke loggposten er i feltet message. Hvis vi Þnsker Ä jobbe med denne informasjonen, mÄ vi fÞrst analysere dette feltet til separate felt. Dette kan gjÞres, for eksempel, i logstash. Den vil vÊre mottakeren av postene fra filebeat. Slik kan det se ut i konfigurasjonsfilen for filebeat:
output.logstash:
hosts: ["logstash1.domain.com:5044"]
Hvis det er flere servere, kan vi aktivere lastbalansering: da vil filebeat sende logger ikke til den fĂžrste tilgjengelige serveren fra listen, men fordele de sendte loggene mellom flere servere:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true Filebeat legger til en del metadata nÄr det behandler logger i den sendte JSON-en, i tillegg til loggposten som finnes i feltet message, noe som pÄvirker stÞrrelsen pÄ dokumentet som sendes til elastic. Dette metadata kan selektivt utelates fra sendingen. Dette gjÞres i prosessorblokken med hjelp av prosessoren drop_fields. For eksempel kan fÞlgende felt utelukkes:
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"]Det er viktig Ä vÊre forsiktig med valget av utelukkede felt, da noen av dem kan brukes pÄ elastic-siden for indeksering.
SĂ„ sendingsblokken for logger vil se slik ut:
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"]Innstillinger for loggfĂžring av filebeat
Det gir mening Ă„ sette fĂžlgende loggfĂžringsinnstillinger:
- LoggfÞringsnivÄ info;
- Lagre logger i filer, som ligger i standard (mappen logs, i installasjonsmappen for filebeat);
- Loggfilsnavnet er filebeat;
- Lagre de 10 nyeste loggfilene;
- UtfÞre rotering nÄr stÞrrelsen nÄr 1 MB.
Den endelige loggningsinnstillingen vil se slik ut:
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576Den endelige konfigurasjonen
Vi har samlet konfigurasjonen, og nÄ ser den slik ut:
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: 1048576Det er viktig Ä forstÄ at filformatet for konfigurasjonen er yml. Derfor er det viktig Ä plassere mellomrom og minustegn korrekt.
Filebeat kan sjekke konfigurasjonsfilen, og hvis syntaksen inneholder feil, vil den indikere hvilken linje og hvilket sted i linjen som er feil. Sjekken utfÞres pÄ fÞlgende mÄte:
.filebeat.exe test configFilebeat kan ogsÄ sjekke nettverks tilgjengelighet til loggmottakeren. Sjekken startes slik:
.filebeat.exe test outputI de fĂžlgende delene vil jeg fortelle om tilkoblingen og samarbeidet mellom Exchange og komponentene Logstash og Kibana.
Nyttige lenker
Kilde: habr.com
