Ich beginne eine Reihe von Artikeln, in denen ich meine Erfahrungen mit der Anbindung von Exchange und ELK teilen möchte. Dieser Stack hilft, große Mengen an Logs zu verarbeiten, ohne sich die Frage stellen zu müssen, ab welcher Größe die üblichen Logging-Tools nicht mehr hilfreich sind. Lassen Sie uns unseren neuen Helden im Umgang mit Logs kennenlernen.
Exchange verfügt über ein umfangreiches Logging-System. Die am häufigsten nachgefragten Logs sind Tracking-Logs, die den schrittweisen Verlauf eines bestimmten E-Mails innerhalb der Mail-Organisation verfolgen; Webserver-Logs, die jede neue Benutzersitzung im System protokollieren, sowie Logs spezifischer Webanwendungen mit unterschiedlicher Detailgenauigkeit der Sitzungen. Außerdem kann Exchange Roh-Logs der Protokolle SMTP, IMAP und POP3 speichern.
Welche Tools können wir für die Arbeit mit Logs verwenden:
- Der integrierte Cmdlet Get-MessageTrackingLog: praktisches Handwerkszeug zum Verarbeiten von Tracking-Logs;
- Das Tool logparser: nutzt eine Pseudo-SQL-Sprache für die Log-Analyse und arbeitet ziemlich schnell;
- Externer SQL-Server: für besonders spezifische Fälle (z.B. Datenanalyse über längere Zeiträume).
Das funktioniert ganz gut, wenn wir ein paar Server haben und das Volumen der verarbeiteten Protokolle in Hunderten von Gigabyte gemessen wird. Was aber, wenn die Anzahl der Server auf mehrere Dutzend steigt und die Protokolldateien mehrere Terabyte überschreiten? Unter diesen Bedingungen wird das System wahrscheinlich anfällig.
Und das passiert: Get-MessageTrackingLog beginnt aufgrund von Zeitüberschreitungen auszufallen, logparser stößt an die Grenzen der 32-Bit-Architektur, und der Export in den SQL-Server bricht im ungünstigsten Moment ab, ohne die mehrzeilige Ausnahme vom Dienst zu verarbeiten.
Hier kommt ein neuer Akteur ins Spiel – der ELK-Stack, der speziell dafür optimiert ist, mit riesigen Protokolldateien in vertretbaren Zeiten umzugehen und dabei einen moderaten Ressourcenverbrauch zu gewährleisten.
Im ersten Teil werde ich ausführlich erläutern, wie man filebeat anschließt, das Teil des ELK-Stacks ist, — verantwortlich für das Lesen und Senden einfacher Textdateien, in denen verschiedene Anwendungen ihre Protokolle schreiben. In den folgenden Artikeln werden wir näher auf die Komponenten Logstash und Kibana eingehen.
Installation von
Also, die Archivdatei des Filebeat-Agenten .
Wir werden die Installation über das Entpacken des Inhalts der Zip-Datei durchführen. Zum Beispiel in c:Program Filesfilebeat. Dann muss das PowerShell-Skript gestartet werden. install-service-filebeat.ps1, das im Lieferumfang enthalten ist, um den Filebeat-Dienst zu installieren.
Jetzt sind wir bereit, die Konfigurationsdatei einzurichten.
Ausfallsicherheit
Filebeat gewährleistet die Zustellung von Protokollen an das Log-Sammelsystem. Dies geschieht durch die Führung eines Protokolls der Einträge in den Log-Dateien. Im Protokoll wird gespeichert, welche Einträge aus den Log-Dateien gelesen wurden, und es werden spezifische Einträge markiert, die erfolgreich an den Zielort zugestellt wurden.
Wenn ein Eintrag nicht zugestellt werden kann, wird Filebeat versuchen, ihn so lange erneut zu senden, bis es eine Bestätigung von der empfangenden System erhält oder die ursprüngliche Log-Datei während der Rotation gelöscht wird.
Nach dem Neustart des Dienstes wird Filebeat die Informationen über die zuletzt gelesenen und zugestellten Einträge aus dem Protokoll lesen und basierend auf diesen Informationen die Einträge in den Log-Dateien lesen.
Das minimiert das Risiko des Verlusts von Informationen über Protokolle, die an die Elastic Logstash-Server gesendet werden müssen, während unerwartete Ausfälle und Wartungsarbeiten an den Servern durchgeführt werden.
Weitere Informationen hierzu finden Sie : Wie hält Filebeat den Zustand von Dateien und wie gewährleistet Filebeat eine mindestens einmalige Zustellung?
Konfiguration
Alle Einstellungen erfolgen in der Konfigurationsdatei im Format yml, die in mehrere Abschnitte unterteilt ist. Betrachten wir einige von ihnen, die am Prozess des Log-Sammelns von Exchange-Servern beteiligt sind.
Block zur Log-Verarbeitung
Der Block zur Log-Verarbeitung beginnt mit dem Feld:
filebeat.inputs:Wir werden ein allgemeines Log-Sammelwerkzeug verwenden:
- type: logIm Folgenden geben wir den Status (aktiviert) und die Pfade zum Log-Ordner an. Zum Beispiel können die Einstellungen für IIS-Logs wie folgt aussehen:
enabled: true
paths:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
Eine weitere wichtige Einstellung ist, wie Filebeat mehrzeilige Einträge einlesen soll. Standardmäßig betrachtet Filebeat eine Zeile der Logdatei als einen Eintrag. Dies funktioniert gut, bis wir in den Logs Ausnahmen erhalten, die mit einem fehlerhaften Dienst zusammenhängen. In diesem Fall können die Ausnahmen aus mehreren Zeilen bestehen. Daher muss Filebeat mehrzeilige Einträge als einen einzigen betrachten, wenn die nächste Zeile mit einem Datum beginnt. Das Format der Logeinträge in Exchange ist so: Jeder neue Eintrag in die Logdatei beginnt mit einem Datum. In der Konfiguration sieht diese Bedingung wie folgt aus:
Mehrzeilig:
Muster: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negieren: wahr
übereinstimmen: nachEs macht Sinn, Tags in den gesendeten Eintrag hinzuzufügen, zum Beispiel:
tags: ['IIS', 'ex-srv1']Und vergessen Sie nicht, die Zeilen auszuschließen, die mit dem Hash-Zeichen beginnen:
exclude_lines: ['^#']Also wird der Protokolllesebereich wie folgt aussehen:
filebeat.inputs:
- typ: log
aktiviert: wahr
pfade:
- C:inetpublogsLogFilesW3SVC1*.log
- C:inetpublogsLogFilesW3SVC2*.log
mehrzeilig:
muster: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
negieren: wahr
übereinstimmen: nach
tags: ['IIS', 'ex-srv1']
exclude_lines: ['^#']Protokollversandbereich
Einzelne Einträge im Logfile sendet filebeat als JSON-Objekt, in dem ein spezifischer Eintrag aus dem Log in einem einzigen Feld message enthalten ist. Wenn wir mit diesen Informationen arbeiten möchten, müssen wir dieses Feld vorher in einzelne Felder parsen. Dies kann zum Beispiel in Logstash geschehen. Es wird der Empfänger der Einträge aus Filebeat sein. So könnte es in der Konfigurationsdatei von Filebeat aussehen:
output.logstash:
hosts: ["logstash1.domain.com:5044"]
Wenn es mehrere Server gibt, können Sie die Lastverteilung aktivieren: Dann wird filebeat die Logs nicht an den ersten verfügbaren Server in der Liste senden, sondern die gesendeten Logs auf mehrere Server verteilen:
hosts: ["logstash1.domain.com:5044", "logstash2.domain.com:5044"]
loadbalance: true Filebeat fügt beim Verarbeiten von Protokollen im gesendeten JSON neben dem Protokolleintrag, der im Feld message enthalten ist, eine Reihe von Metadaten hinzu, die die Größe des Dokuments beeinflussen, das in Elasticsearch gelangt. Diese Metadaten können gezielt von der Übertragung ausgeschlossen werden. Dies geschieht im Block processor mithilfe des Prozessors. drop_fields. Ausgeschlossen werden können zum Beispiel folgende Felder:
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 der auszuschließenden Felder sollte sorgfältig durchgeführt werden, da einige davon auf der Elasticsearch-Seite zum Erstellen von Indizes verwendet werden können.
Der Block zum Senden von Protokollen wird also wie folgt aussehen:
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 macht Sinn, die folgenden Protokollierungseinstellungen festzulegen:
- Protokollierungsstufe info;
- Protokolle werden in Dateien geschrieben, die standardmäßig (im Verzeichnis logs im Installationsverzeichnis von Filebeat) gespeichert sind.
- Der Name der Logdatei ist filebeat;
- Die letzten 10 Logdateien aufbewahren;
- Die Rotation starten, wenn die Größe 1 MB erreicht ist.
Der abschließende Block für die Log-Konfiguration sieht folgendermaßen aus:
logging.level: info
logging.to_files: true
logging.files:
name: filebeat
keepfiles: 10
rotateeverybytes: 1048576Endkonfiguration
Wir haben die Konfiguration zusammengestellt, und sie sieht jetzt wie folgt aus:
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: 1048576Es ist wichtig zu verstehen, dass das Dateiformat der Konfiguration yml ist. Daher ist es wichtig, die Abstände und Bindestriche korrekt zu setzen.
Filebeat kann die Konfigurationsdatei überprüfen und, wenn der Syntax Fehler enthält, angeben, in welcher Zeile und an welcher Stelle in der Zeile der Syntax fehlerhaft ist. Die Überprüfung erfolgt wie folgt:
.filebeat.exe test configDarüber hinaus kann filebeat die Netzwerkverfügbarkeit des Logempfängers überprüfen. Die Überprüfung wird wie folgt gestartet:
.filebeat.exe TestausgabeIn den nächsten Teilen werde ich über die Verbindung und Zusammenarbeit von Exchange mit den Komponenten Logstash und Kibana sprechen.
Nützliche Links
Quelle: habr.com
