Wir sind mit ELK und Exchange befreundet. Teil 1





Ich beginne eine Reihe von Artikeln, in denen ich meine Erfahrungen mit der Verbindung von Exchange und ELK teilen möchte. Dieser Stapel hilft Ihnen bei der Verarbeitung großer Protokollmengen und wundert Sie nicht, in welcher Größe die üblichen Protokollierungswerkzeuge uns nicht weiterhelfen. Machen wir uns mit dem neuen Kämpfer mit Protokollen vertraut.



Exchange verfügt über ein ziemlich umfangreiches Protokollierungssystem. Die beliebtesten Protokolle sind Verfolgungsprotokolle, mit denen die schrittweise Passage eines bestimmten Briefes innerhalb der Postorganisation verfolgt wird. Webserver-Protokolle, die jede neue Benutzersitzung im System verfolgen, und Protokolle bestimmter Webanwendungen mit unterschiedlichem Grad an Sitzungsgranularität. Exchange kann auch rohe SMTP-, IMAP- und Pop3-Protokolle speichern.



Mit welchen Tools können wir mit Protokollen arbeiten:



  • Standard-Cmdlet Get-MessageTrackingLog: Bequem zum Verarbeiten von Verfolgungsprotokollen;
  • Das Dienstprogramm logparser: Verwendet eine Pseudo-SQL-Suchsprache für die Protokollierung und arbeitet ziemlich schnell.
  • Externer SQL Server: für besonders spezielle Fälle (z. B. zum Analysieren von Daten über lange Zeiträume).


All dies funktioniert gut, wenn wir ein paar Server haben und das Volumen der verarbeiteten Protokolle in zehn oder Hunderten von Gigabyte gemessen wird. Aber was ist, wenn es zehn Server gibt und die Größe der Protokolle ein Terabyte überschritten hat? Dieses Schema beginnt höchstwahrscheinlich zu bröckeln.



Und Folgendes passiert: Get-MessageTrackingLog fällt aufgrund eines Zeitlimits ab, logparser erreicht die Obergrenze der 32-Bit-Architektur und das Hochladen auf SQL Server bricht im ungünstigsten Moment ab, ohne eine mehrzeilige Ausnahme vom Dienst zu verdauen.



Hier betritt ein neuer Spieler die Szene - der ELK-Stack, der speziell auf das Jonglieren mit großen Mengen an Protokollen in angemessener Zeit und mit tolerierbarem Ressourcenverbrauch zugeschnitten ist.



Im ersten Teil werde ich detailliert erklären, wie Filebeat, das Teil des ELK-Stacks ist, verbunden wird- ist verantwortlich für das Lesen und Senden einfacher Textdateien, in die verschiedene Anwendungen ihre Protokolle schreiben. In den folgenden Artikeln werden wir uns eingehender mit den Komponenten Logstash und Kibana befassen.



Installation



Das Dateiarchiv des Filebeat-Agenten kann also von dieser Site heruntergeladen werden .



Wir schließen die Installation ab, indem wir einfach den Inhalt der Zip-Datei entpacken. Zum Beispiel in c:\Program Files\filebeat. Anschließend müssen Sie install-service-filebeat.ps1das mit dem Kit gelieferte PowerShell-Skript ausführen, um den Filebeat-Dienst zu installieren.



Jetzt können Sie mit dem Anpassen der Konfigurationsdatei beginnen.



Fehlertoleranz



Filebeat garantiert die Übermittlung von Protokollen an das Protokollsammelsystem. Dies wird erreicht, indem ein Verzeichnis der Einträge in Protokolldateien geführt wird. Die Registrierung speichert Informationen zu den Datensätzen, die aus den Protokolldateien gelesen wurden, und markiert die spezifischen Datensätze, die an das Ziel übermittelt wurden.



Wenn ein Datensatz nicht zugestellt werden kann, versucht filebeat, ihn erneut zu senden, bis er eine Empfangsbestätigung vom empfangenden System erhält oder die ursprüngliche Protokolldatei während der Rotation gelöscht wird.



Wenn der Dienst neu gestartet wird, liest Filebeat Informationen zu den zuletzt gelesenen und gelieferten Datensätzen aus der Registrierung und liest Datensätze in Protokolldateien basierend auf den Informationen in der Registrierung.



Auf diese Weise können Sie das Risiko minimieren, Informationen über Protokolle zu verlieren, die bei unerwarteten Fehlern und bei der Durchführung von Serverwartungsvorgängen an elastische \ logstash-Server gesendet werden müssen.



Weitere Informationen hierzu finden Sie in der Dokumentation in den folgenden Abschnitten : Wie behält Filebeat den Status von Dateien bei und wie stellt Filebeat die mindestens einmalige Zustellung sicher?



Anpassung



Die gesamte Konfiguration erfolgt in der Formatkonfigurationsdatei yml, die in mehrere Abschnitte unterteilt ist. Schauen wir uns einige davon an, die beim Sammeln von Protokollen von Exchange-Servern beteiligt sind.



Protokollverarbeitungseinheit



Der Protokollverarbeitungsblock beginnt mit dem Feld:



filebeat.inputs:


Wir werden ein allgemeines Protokollsammlungstool verwenden:



- type: log


Als nächstes geben wir den Status (aktiviert) und die Pfade zum Ordner mit Protokollen an. Bei IIS-Protokollen können die Einstellungen beispielsweise wie folgt lauten:



    enabled: true
    paths:
	- C:\inetpub\logs\LogFiles\W3SVC1\*.log
	- C:\inetpub\logs\LogFiles\W3SVC2\*.log


Eine weitere wichtige Optimierung ist, wie Filebeat mehrzeilige Datensätze lesen soll. Standardmäßig betrachtet Filebeat eine Zeile der Protokolldatei als einen Datensatz. Dies funktioniert gut, solange wir keine Ausnahmen im Zusammenhang mit dem fehlerhaften Betrieb des Dienstes im Protokoll erhalten. In diesem Fall können die Ausnahmen mehrere Zeilen umfassen. Daher sollte Filebeat einen mehrzeiligen Datensatz als einen behandeln, wenn die nächste Zeile mit einem Datum beginnt. Das Format für die Aufzeichnung von Protokollen in Exchange lautet wie folgt: Jeder neue Datensatz in der Protokolldatei beginnt mit einem Datum. In der Konfiguration sieht diese Bedingung folgendermaßen aus:



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


Es ist sinnvoll, dem von Ihnen gesendeten Beitrag Tags hinzuzufügen, zum Beispiel:



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


Und vergessen Sie nicht, Zeilen, die mit einem Hash-Zeichen beginnen, von der Verarbeitung auszuschließen:



  exclude_lines: ['^#']


Der Block zum Lesen von Protokollen sieht also folgendermaßen aus:



filebeat.inputs:
- type: log
  enabled: true
  paths:
	- C:\inetpub\logs\LogFiles\W3SVC1\*.log
	- C:\inetpub\logs\LogFiles\W3SVC2\*.log
  multiline:
	pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
	negate: true
	match: after
  tags: ['IIS', 'ex-srv1']
  exclude_lines: ['^#']


Protokoll sendender Block



Filebeat sendet einzelne Einträge in der Protokolldatei als JSON-Objekt, in dem ein bestimmter Eintrag aus dem Protokoll in einem einzelnen Nachrichtenfeld enthalten ist. Wenn wir irgendwie mit diesen Informationen arbeiten wollen, müssen wir dieses Feld zuerst in separate Felder analysieren. Dies kann beispielsweise in logstash erfolgen. Es wird der Empfänger der Datensätze von Filebeat sein. So könnte es in der Filebeat-Konfigurationsdatei aussehen:



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


Wenn mehrere Server vorhanden sind, kann der Ausgleich für diese aktiviert werden. Anschließend sendet Filebeat Protokolle nicht an den ersten verfügbaren Server aus der Liste, sondern verteilt die gesendeten Protokolle auf mehrere Server:



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


Filebeat fügt bei der Verarbeitung von Protokollen im gesendeten JSON zusätzlich zu dem Protokolleintrag, der im Nachrichtenfeld enthalten ist, eine bestimmte Menge an Metadaten hinzu, die sich auf die Größe des Dokuments auswirken, das elastisch wird. Diese Metadaten können selektiv aus der Übermittlung entfernt werden. Dies erfolgt im Prozessorblock unter Verwendung des Prozessors drop_fields. Sie können beispielsweise folgende Felder ausschließen:



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


Die Auswahl ausgeschlossener Felder sollte sorgfältig angegangen werden, da einige von ihnen auf der elastischen Seite zum Erstellen von Indizes verwendet werden können.



Der Block zum Senden von Protokollen sieht also folgendermaßen aus:



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


Filebeat-Protokollierungseinstellungen



Es ist sinnvoll, die folgenden Protokollierungseinstellungen festzulegen:



  • Informationen zur Protokollierungsstufe;
  • Wir schreiben Protokolle in Dateien, die sich standardmäßig befinden (das Protokollverzeichnis im Filebeat-Installationsverzeichnis).
  • Der Name der Protokolldatei lautet filebeat.
  • Behalten Sie die letzten 10 Protokolldateien bei.
  • Starten Sie die Drehung, wenn die Größe 1 MB erreicht.


Schließlich sieht der Block mit den Protokollierungseinstellungen folgendermaßen aus:



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


Endgültige Konfiguration



Wir haben die Konfiguration gesammelt und jetzt sieht es so aus:



filebeat.inputs:
- type: log
  enabled: true
  paths:
    - C:\inetpub\logs\LogFiles\W3SVC1\*.log
    - C:\inetpub\logs\LogFiles\W3SVC2\*.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


Es ist wichtig zu verstehen, dass das Konfigurationsdateiformat yml ist. Daher ist es wichtig, Leerzeichen und Minuszeichen richtig zu platzieren.



Filebeat kann die Konfigurationsdatei überprüfen. Wenn die Syntax Fehler enthält, wird angezeigt, in welcher Zeile und wo in der Zeile die Syntax falsch ist. Die Prüfung erfolgt wie folgt:



.\filebeat.exe test config


Außerdem kann filebeat die Netzwerkverfügbarkeit des Protokollempfängers überprüfen. Die Prüfung wird folgendermaßen gestartet:



.\filebeat.exe test output


In den nächsten Abschnitten werde ich über die Exchange-Konnektivität und die Freundschaft mit den Logstash- und Kibana-Komponenten sprechen.



Nützliche Links






All Articles