Prijateljevanje ELK in Exchange. Del 1

Prijateljevanje ELK in Exchange. Del 1

Začnem serijo člankov, kjer želim deliti svoje izkušnje s povezovanjem Exchange in ELK. Ta sklad bo pomagal obdelovati velike količine dnevnikov in se ne spraševati, pri kateri velikosti se običajno orodja za beleženje ne bodo mogla več pomagati. Spoznajmo novega borca z dnevniki.

Exchange ima precej razvejano sistemsko beleženje. Najbolj iskani dnevniki so dnevniki sledenja, ki spremljajo korak za korakom prehod določenega sporočila znotraj poštne organizacije; dnevniki spletnega strežnika, ki spremljajo vsako novo sejo uporabnika v sistemu, in dnevniki specifičnih spletnih aplikacij z različno stopnjo podrobnosti seje. Exchange prav tako shranjuje surove dnevnike protokolov smtp, imap in pop3.

Katera orodja lahko uporabimo za delo z dnevnikom:

  • Standardni ukaz Get-MessageTrackingLog: enostavno obdeluje dnevnike sledenja;
  • Orodje logparser: za beleženje uporablja psevd SQL jezik za iskanje in deluje precej hitro;
  • Zunanji SQL strežnik: za posebej specifične primere (na primer, analizo podatkov za dolga časovna obdobja).

Vse to dobro deluje, ko imamo nekaj strežnikov in obdelane količine dnevnikov merimo v desetih ali sto gigabajtih. Kaj, če število strežnikov doseže desetke, velikost dnevnikov pa preseže terabajt? Ta shema verjetno začne popuščati.

In kaj se zgodi: Get-MessageTrackingLog začne odpovedovati zaradi časovnega izteka, logparser naleti na omejitev 32-bitne arhitekture, izvozi v SQL strežnik pa se podre v najbolj neprimernem trenutku, ne da bi prenesel večvrstni exception iz storitve.

Tukaj stopi na oder nov igralec – sklad ELK, ki je posebej zasnovan za obvladovanje ogromnih količin dnevnikov v razumnih časovnih okvirih in s sprejemljivo porabo virov.

V prvem delu bom podrobno opisal, kako povezati filebeat, ki pripada delu sklada ELK — odgovarja za branje in pošiljanje preprostih besedilnih datotek, v katere različne aplikacije zapisujejo svoje dnevnike. V naslednjih člankih se bomo podrobneje osredotočili na komponente Logstash in Kibana.

Namestitev

Torej, datoteko arhiv agenta filebeat lahko prenesemo s te strani.

Namestitev izvedemo s preprostim razpakiranjem vsebine zip-datoteke. Na primer, v c:Program Filesfilebeat. Nato je potrebno zagnati PowerShell skript install-service-filebeat.ps1, ki je priložen, za namestitev storitve filebeat.

Sedaj smo pripravljeni začeti s konfiguracijo datoteke.

Odporna zasnova

Filebeat zagotavlja dostavo logov v sistem zbiranja logov. To se doseže z vodenjem registra zapisov v log-datotekah. V registru so shranjeni podatki o tistih zapisih, ki so bili prebrani iz log-datotek, in označeni so konkretni zapisi, ki so bili dostavljeni na cilj.

Če katerega koli zapisa ni mogoče dostaviti, bo Filebeat poskušal ponovno poslati, dokler ne prejme potrdila o dostavi od prejemnika ali dokler prvotna log-datoteka ne bo izbrisana med rotacijo.

Ob ponovnem zagonu storitve Filebeat bo prebral iz registra podatke o zadnjih prebranih in dostavljenih zapisih ter bo bral zapise v log-datotekah na podlagi informacij iz registra.

To zmanjšuje tveganje izgube informacij o logih, ki jih je treba poslati na strežnike Elastic Logstash, med nepredvidenimi okvarami in izvajanjem vzdrževalnih operacij na strežnikih.

Več o tem lahko preberete v dokumentaciji v odstavkih: Kako Filebeat ohranja stanje datotek in Kako Filebeat zagotavlja dostavo vsaj enkrat?

Setup

Vsa nastavitev poteka v konfiguracijski datoteki formata yml, ki je razdeljena na več sekcij. Poglejmo nekatere od njih, ki sodelujejo v procesu zbiranja logov s strežnikov Exchange.

Blok obdelave logov

Blok obdelave logov se začne s poljem:

filebeat.inputs:

Uporabljali bomo splošen instrument za zbiranje logov:

- type: log

Nato določimo stanje (vklopljeno) in poti do mape z logi. Na primer, v primeru logov IIS so lahko nastavitve naslednje:

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

Še ena pomembna nastavitev: kako naj Filebeat bere večvrstične zapise. Privzeto Filebeat šteje eno vrstico log-datoteke kot en zapis. To deluje dobro, dokler v log ne začnejo prihajati izjave o napakah, povezane z nepravilnim delovanjem storitve. V tem primeru lahko izjave obsegajo več vrstic. Zato mora Filebeat šteti večvrstični zapis kot enega, če se naslednja vrstica začne z datumom. Format zapisov logov v Exchange je tak: vsak nov zapis v log-datoteko se začne z datumom. V konfiguraciji to stanje izgleda takole:

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

Smiselno je dodati oznake v poslane beležke, na primer:

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

In ne pozabite izključiti vrstic, ki se začnejo s simbolom hash:

  exclude_lines: ['^#']

Torej, blok za branje logov bo videti takole:

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 za pošiljanje logov

Posamezne beležke v datoteki filebeat se pošiljajo v obliki json objekta, v katerem je specifična beležka shranjena v edinem polju message. Če želimo kako obdelati te informacije, moramo to polje prej razdeliti na posamezna polja. To lahko storimo, na primer, v logstash-u. Ta bo prejemnik beležk iz filebeat-a. Tako bi to lahko izgledalo v konfiguracijski datoteki filebeat:

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

Če je več strežnikov, lahko omogočite obremenitveno uravnoteženje: takrat bo filebeat pošiljal loge ne na prvi dostopni strežnik na seznamu, ampak bo razporedil poslane loge med več strežniki:

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

Filebeat pri obdelavi logov v pošiljanem json-u poleg beležke loga, ki je shranjena v polju message, doda določeno število metapodatkov, kar vpliva na velikost dokumenta, ki gre v elastic. Te metapodatke lahko selektivno odstranimo iz pošiljanja. To se naredi v bloku processor s pomočjo procesorja drop_fields. Izključiti je mogoče, na primer, naslednja polja:

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 izbiri izključenih polj je treba pristopiti previdno, saj jih lahko del uporablja na strani elastic za gradnjo indeksov.

Torej, blok za pošiljanje logov bo videti takole:

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

Nastavitve logiranja filebeat

Smiselno je nastaviti naslednje nastavitve logiranja:

  • Nivo logiranja info;
  • Loge zapisujemo v datoteke, ki se privzeto nahajajo (direktorij logs v direktoriju namestitve filebeat);
  • Ime log datoteke — filebeat;
  • Shranjujte zadnjih 10 datotek logov;
  • Izvedite rotacijo ob dosegu velikosti 1MB.

Končna nastavitev dnevnike bo izgledala takole:

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

Končna konfiguracija

Zbrali smo konfiguracijo in zdaj izgleda takole:

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

Pomembno je razumeti, da je format datoteke konfiguracije — yml. Zato je pomembno pravilno postaviti presledke in znake minus.

Filebeat zna preveriti datoteko konfiguracije in, če bo sintaksa vsebovala napake, bo pokazal, v kateri vrstici in na katerem mestu vrstice je sintaksa napačna. Preverjanje poteka na naslednji način:

.filebeat.exe test config

Poleg tega filebeat zna preveriti omrežno dostopnost prejemnika dnevnikov. Preverjanje se zažene tako:

.filebeat.exe test output

V naslednjih delih bom govoril o povezovanju in prijateljstvu Exchange s komponentami Logstash in Kibana.

Koristne poveznice

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster