Wir sind mit ELK und Exchange befreundet. Teil 1

Wir sind mit ELK und Exchange befreundet. Teil 1

Ich beginne eine Artikelserie, in der ich meine Erfahrungen bei der Verbindung von Exchange und ELK teilen möchte. Dieser Stapel wird uns dabei helfen, große Mengen an Protokollen zu verarbeiten, und wir müssen uns nicht fragen, ab welcher Größe uns die üblichen Protokollierungstools die Hilfe verweigern. Machen wir uns mit dem neuen Holzkämpfer vertraut.

Exchange verfügt über ein ziemlich umfangreiches Protokollierungssystem. Die beliebtesten Protokolle sind Tracking-Protokolle, die den schrittweisen Durchgang eines bestimmten Briefes innerhalb einer Postorganisation verfolgen; Webserver-Protokolle, die jede neue Benutzersitzung im System verfolgen, und Protokolle bestimmter Webanwendungen mit unterschiedlichem Sitzungsdetaillierungsgrad. Exchange kann auch Rohprotokolle der Protokolle SMTP, IMAP und Pop3 speichern.

Mit welchen Tools können wir mit Protokollen arbeiten:

  • Standard-Cmdlet Get-MessageTrackingLog: Tracking-Protokolle bequem verarbeiten;
  • Das Dienstprogramm logparser: verwendet für die Protokollierung eine Pseudo-SQL-Suchsprache und arbeitet recht schnell;
  • Externer SQL-Server: für ganz spezielle Fälle (z. B. Analyse von Daten über längere Zeiträume).

All dies funktioniert gut, wenn wir mehrere Server haben und das Volumen der verarbeiteten Protokolle in Dutzenden oder Hunderten von Gigabyte gemessen wird. Was aber, wenn die Anzahl der Server Dutzende beträgt und die Größe der Protokolle ein Terabyte überschreitet? Dieses Schema beginnt höchstwahrscheinlich zu bröckeln.

Und das passiert: Bei Get-MessageTrackingLog beginnt eine Zeitüberschreitung, der Logparser erreicht die Obergrenze der 32-Bit-Architektur und das Hochladen auf den SQL-Server bricht im ungünstigsten Moment ab, ohne die mehrzeilige Ausnahme des Dienstes zu verarbeiten.

Hier betritt ein neuer Player die Szene – der ELK-Stack, der speziell für die Bewältigung großer Protokollmengen in angemessener Zeit und mit erträglichem Ressourcenverbrauch entwickelt wurde.

Im ersten Teil erzähle ich Ihnen ausführlich, So verbinden Sie Filebeat, das zum ELK-Stack gehört – ist für das Lesen und Senden einfacher Textdateien verantwortlich, in die verschiedene Anwendungen ihre Protokolle schreiben. In den folgenden Artikeln werden wir uns die Komponenten Logstash und Kibana genauer ansehen.

Einstellung

Also, Filebeat-Agent-Archivdatei kann von dieser Seite heruntergeladen werden.

Wir schließen die Installation ab, indem wir einfach den Inhalt der ZIP-Datei extrahieren. Zum Beispiel in c:Program Filesfilebeat. Anschließend müssen Sie das PowerShell-Skript ausführen install-service-filebeat.ps1, das im Kit enthalten ist, um den Filebeat-Dienst zu installieren.

Jetzt können wir mit der Einrichtung der Konfigurationsdatei beginnen.

Fehlertoleranz

Filebeat garantiert die Übermittlung von Protokollen an das Protokollerfassungssystem. Dies wird durch die Führung eines Registers der Einträge in Protokolldateien erreicht. Die Registrierung speichert Informationen über die Datensätze, die aus Protokolldateien gelesen wurden, und markiert bestimmte Datensätze, die an das Ziel übermittelt werden konnten.

Wenn ein Datensatz nicht zugestellt werden kann, versucht Filebeat, ihn erneut zu senden, bis es eine Zustellungsbestätigung vom empfangenden System erhält oder die ursprüngliche Protokolldatei während des Rotationsprozesses gelöscht wird.

Wenn der Dienst neu gestartet wird, liest Filebeat Informationen aus der Registrierung über die zuletzt gelesenen und übermittelten Datensätze und liest Datensätze in den Protokolldateien basierend auf den Informationen in der Registrierung.

Dadurch können Sie das Risiko des Verlusts von Protokollinformationen minimieren, die bei unerwarteten Ausfällen und Serverwartungsvorgängen an Elasticlogstash-Server gesendet werden müssen.

Sie können mehr darüber lesen Lesen Sie die Dokumentation in Absätzen: Wie behält Filebeat den Status von Dateien bei und wie stellt Filebeat eine mindestens einmalige Zustellung sicher?

Einstellung

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

Protokollverarbeitungsblock

Der Protokollverarbeitungsblock beginnt mit dem Feld:

filebeat.inputs:

Wir werden ein gängiges Protokollerfassungstool verwenden:

- type: log

Geben Sie als Nächstes den Status (aktiviert) und den Pfad zum Ordner mit Protokollen an. Im Fall von IIS-Protokollen könnten die Einstellungen beispielsweise wie folgt lauten:

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

Eine weitere wichtige Einstellung ist, wie Filebeat mehrzeilige Datensätze lesen soll. Standardmäßig betrachtet Filebeat eine Zeile einer Protokolldatei als einen Eintrag. Dies funktioniert gut, bis wir in unserem Protokoll Ausnahmen erhalten, die auf den fehlerhaften Betrieb des Dienstes zurückzuführen sind. In diesem Fall können Ausnahmen aus mehreren Zeilen bestehen. Daher muss Filebeat einen mehrzeiligen Eintrag als einen zählen, wenn die nächste Zeile mit einem Datum beginnt. Das Format zum Aufzeichnen von Protokollen in Exchange ist wie folgt: Jeder neue Eintrag in der Protokolldatei beginnt mit einem Datum. In der Konfiguration sieht dieser Zustand so 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 Rautezeichen beginnen, von der Verarbeitung auszuschließen:

  exclude_lines: ['^#']

Der Protokollleseblock sieht also folgendermaßen 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: ['^#']

Block zum Senden von Protokollen

Filebeat versendet 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 mit diesen Informationen irgendwie arbeiten wollen, müssen wir dieses Feld zunächst in separate Felder analysieren. Dies kann beispielsweise in logstash erfolgen. Er wird Empfänger der Datensätze von Filebeat sein. So könnte es in einer Filebeat-Konfigurationsdatei aussehen:

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

Wenn mehrere Server vorhanden sind, können Sie den Ausgleich für diese aktivieren: Dann sendet Filebeat keine Protokolle 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 im Nachrichtenfeld enthaltenen Protokolleintrag eine bestimmte Menge an Metadaten hinzu, die sich auf die Größe des Dokuments auswirkt, das in Elastic landet. Diese Metadaten können selektiv aus der Einreichung entfernt werden. Dies geschieht im Prozessorblock mithilfe des Prozessors drop_fields. Sie können beispielsweise die folgenden 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"]

Sie sollten die Auswahl der ausgeschlossenen Felder sorgfältig angehen, da einige davon auf der elastischen Seite zum Erstellen von Indizes verwendet werden können.

Der Block zum Senden des Protokolls 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 (Protokollverzeichnis, im Filebeat-Installationsverzeichnis);
  • Name der Protokolldatei – filebeat;
  • Speichern Sie die letzten 10 Protokolldateien.
  • Beginnen Sie mit der Rotation, wenn die Größe 1 MB erreicht.

Der endgültige Protokollierungskonfigurationsblock sieht 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 zusammengestellt und jetzt sieht sie so 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: 1048576

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

Filebeat kann die Konfigurationsdatei überprüfen und, wenn die Syntax Fehler enthält, anzeigen, in welcher Zeile und an welcher Stelle in der Zeile die Syntax falsch ist. Die Prüfung wird wie folgt durchgeführt:

.filebeat.exe test config

Filebeat kann auch die Netzwerkverfügbarkeit des Protokollempfängers überprüfen. Die Prüfung beginnt so:

.filebeat.exe test output

In den folgenden Teilen werde ich über die Verbindung und Freundschaft von Exchange mit den Logstash- und Kibana-Komponenten sprechen.

Nützliche Links

Source: habr.com