Vriendschap tussen ELK en Exchange. Deel 1

Vriendschap tussen ELK en Exchange. Deel 1

Ik begin een serie artikelen waarin ik mijn ervaring wil delen met het verbinden van Exchange en ELK. Deze stack helpt bij het verwerken van grote hoeveelheden logs zonder de vraag te stellen wanneer de gebruikelijke logtools ons niet meer kunnen helpen. Laten we kennismaken met de nieuwe speler in het loggen.

Exchange heeft een vrij uitgebreid logsysteem. De meest gevraagde logs zijn trackinglogs, die het stap-voor-stap proces van specifieke e-mails binnen de e-mailorganisatie volgen; webserverlogs, die elke nieuwe gebruikerssessie in het systeem bijhouden, en logs van specifieke webapplicaties met verschillende detailleringen van de sessie. Ook kan Exchange ruwe logs van de protocollen smtp, imap en pop3 opslaan.

Welke tools kunnen we gebruiken om met logs te werken:

  • De ingebouwde cmdlet Get-MessageTrackingLog: handig voor het verwerken van trackinglogs;
  • De utility logparser: gebruikt een pseudo-SQL-taal voor logging en werkt behoorlijk snel;
  • Een externe SQL-server: voor bijzonder specifieke gevallen (bijvoorbeeld het analyseren van gegevens over lange tijdperken).

Dit werkt prima als we een paar servers hebben en het volume van de verwerkte logs in tientallen tot honderden gigabytes kan worden gemeten. Maar wat als het aantal servers in de tientallen loopt, en de loggrootte de terabyte is gepasseerd? Dit schema zal waarschijnlijk beginnen te haperen.

En dit gebeurt er: Get-MessageTrackingLog begint uit te vallen vanwege timeouts, logparser stuit op de limiet van de 32-bitsarchitectuur, en de dump naar de SQL-server breekt op het meest ongepaste moment, zonder een meerregelige exception van de service te verwerken.

Hier komt een nieuwe speler in beeld – de ELK-stack, die speciaal is ontworpen voor het jongleren met enorme hoeveelheden logs binnen redelijke tijd en met een acceptabel gebruik van middelen.

In het eerste deel zal ik in detail uitleggen, hoe je filebeat aansluit, dat deel uitmaakt van de ELK-stack — verantwoordelijk voor het lezen en verzenden van eenvoudige tekstbestanden waarin verschillende applicaties hun logs schrijven. In de volgende artikelen zullen we verder ingaan op de componenten Logstash en Kibana.

Installatie

Dus, het bestand-archief van de filebeat-agent kan van deze website worden gedownload.

We zullen de installatie uitvoeren door de inhoud van het zip-bestand simpelweg uit te pakken. Bijvoorbeeld, in c:Program Filesfilebeat. Vervolgens moet het PowerShell-script install-service-filebeat.ps1, dat bij de installatie wordt geleverd, worden uitgevoerd voor het installeren van de filebeat-service.

Nu zijn we klaar om het configuratiebestand in te stellen.

Resilience

Filebeat garandeert de levering van logs naar het logverzamelsysteem. Dit wordt gerealiseerd door het bijhouden van een register van de records in logbestanden. In het register staat informatie over die records die uit logbestanden zijn gelezen, en specifieke records worden gemarkeerd die met succes naar de bestemming zijn verzonden.

Als een record niet kan worden verzonden, zal Filebeat blijven proberen het opnieuw te verzenden totdat het bevestiging van levering van het ontvangende systeem ontvangt of het oorspronkelijke logbestand in het rotatieproces wordt verwijderd.

Bij het herstarten van de filebeat-service zal het informatie uit het register lezen over de laatst gelezen en afgeleverde records, en wordt het lezen van de logbestanden uitgevoerd op basis van de informatie in het register.

Dit minimaliseert het risico op verlies van informatie over logs die naar de elasticlogstash-servers moeten worden verzonden, tijdens onverwachte storingen en onderhoudsoperaties van de servers.

Meer hierover kunt u lezen in de documentatie in de paragrafen: Hoe houdt Filebeat de status van bestanden bij en Hoe zorgt Filebeat voor al-minimaal-eens levering?

Instellingen

De volledige configuratie wordt uitgevoerd in een configuratiebestand van het formaat yml, dat is opgedeeld in verschillende secties. Laten we enkele van deze secties bekijken die betrokken zijn bij het verzamelen van logs van Exchange-servers.

Het logverwerkingsblok

Het logverwerkingsblok begint met het veld:

filebeat.inputs:

We zullen een algemeen logverzamelingshulpmiddel gebruiken:

- type: log

Vervolgens geven we de status (ingeschakeld) en paden naar de map met logs op. Bijvoorbeeld, in het geval van IIS-logs kunnen de instellingen als volgt zijn:

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

Een andere belangrijke instelling: hoe Filebeat meerdere regels moet lezen. Standaard beschouwt Filebeat ƩƩn regel van het logbestand als ƩƩn record. Dit werkt goed, totdat er uitzonderingen binnenkomen die verband houden met een onjuiste werking van de service. In dat geval kunnen de uitzonderingen uit meerdere regels bestaan. Daarom moet Filebeat een meerregelig record als ƩƩn beschouwen, als de volgende regel begint met een datum. Het logformaat in Exchange is zodanig: elke nieuwe invoer in het logbestand begint met een datum. In de configuratie ziet deze voorwaarde er als volgt uit:

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

Het is zinvol om tags toe te voegen aan het verzonden record, bijvoorbeeld:

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

En niet vergeten om regels die beginnen met een hash-teken uit te sluiten:

  exclude_lines: ['^#']

Dus, het blok voor het lezen van logs zou er als volgt uitzien:

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 voor het verzenden van logs

Individuele records in het filebeat-logbestand worden verzonden als een json-object, waarin een specifiek record uit de log zich in het enige veld message bevindt. Als we deze informatie willen verwerken, moeten we dit veld vooraf splitsen in aparte velden. Dit kan bijvoorbeeld in logstash. Dit zal de ontvanger zijn van records uit filebeat. Zo kan het eruitzien in het configuratiebestand van filebeat:

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

Als er meerdere servers zijn, kan er balans worden ingesteld: dan zal filebeat logs niet naar de eerste beschikbare server in de lijst sturen, maar de verzonden logs over meerdere servers verdelen:

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

Filebeat voegt bij het verwerken van logs in het verzonden json naast het logrecord, dat zich in het veld message bevindt, een aantal metadata toe, wat invloed heeft op de grootte van het document dat in elastic terechtkomt. Deze metadata kan selectief uit de verzending worden verwijderd. Dit kan worden gedaan in het processor-blok met behulp van de processor drop_fields. Velden zoals de volgende kunnen bijvoorbeeld worden uitgesloten:

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

Bij het selecteren van uit te sluiten velden moet voorzichtigheid worden betracht, want sommige daarvan kunnen aan de elastic-zijde worden gebruikt voor het opbouwen van indexen.

Dus, het blok voor het verzenden van logs zou er als volgt uitzien:

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

Logginginstellingen van filebeat

Het is zinvol om de volgende logginginstellingen in te stellen:

  • Loggingniveau info;
  • Logboeken opslaan in bestanden op de standaardlocatie (directorie logs, in de installatie-directory van filebeat);
  • Naam van het logbestand — filebeat;
  • Bewaar de laatste 10 logbestanden;
  • Voer rotatie uit bij het bereiken van een grootte van 1MB.

De uiteindelijke configuratie van de logboekinstellingen ziet er als volgt uit:

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

De eindconfiguratie zal er als volgt uitzien:

We hebben de configuratie samengevoegd en nu ziet deze eruit als volgt:

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

Het is belangrijk te begrijpen dat het configuratiebestand een yml-formaat heeft. Daarom is het van belang om spaties en mintekens correct te plaatsen.

Filebeat kan het configuratiebestand verifiƫren en als de syntaxis fouten bevat, zal het aangeven op welke regel en op welk punt in de regel de syntaxis onjuist is. De controle wordt als volgt uitgevoerd:

.filebeat.exe test config

Bovendien kan filebeat de netwerkkoppeling naar de logontvanger controleren. De controle wordt als volgt uitgevoerd:

.filebeat.exe test output

In de volgende delen zal ik uitleggen hoe je Exchange aansluit op de componenten Logstash en Kibana.

Nuttige links

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster