Effektives Webserver-Log-Management mit Logstash und OpenSearch

Effektives Webserver-Log-Management ist entscheidend für die Aufrechterhaltung der Leistung Ihrer Website, die Fehlerbehebung und das Gewinnen von Einblicken in das Nutzerverhalten. Apache ist einer der beliebtesten Webserver. Er generiert Zugriffs- und Fehlerprotokolle, die wertvolle Informationen enthalten.

In diesem Tutorial führen wir Sie durch die Installation von Logstash auf einem Droplet, die Konfiguration zur Erfassung Ihrer Apache-Protokolle und das Senden dieser an Managed OpenSearch zur Analyse.

Voraussetzungen

  • Droplet/s mit installiertem Apache-Webserver.
  • Managed OpenSearch Cluster

Schritt 1 – Installation von Logstash

Logstash ist entweder mit den Binärdateien ODER über die Paket-Repositories installierbar. Zur einfacheren Verwaltung und Aktualisierung wird generell die Nutzung der Paket-Repositories empfohlen.

In diesem Abschnitt zeigen wir Ihnen die Installation von Logstash auf Ihrem Droplet mit APT- und YUM-Paketmanagern.

Zunächst das Betriebssystem identifizieren:

Für APT-basierte Systeme (Ubuntu/Debian)

Laden Sie den Public Signing Key herunter und installieren Sie ihn:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

Eventuell müssen Sie das Paket apt-transport-https auf Debian installieren:

sudo apt-get install apt-transport-https

Speichern Sie die Repository-Definition unter /etc/apt/sources.list.d/elastic-8.x.list:

echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

Verwenden Sie die Echo-Methode, um das Logstash-Repository hinzuzufügen – nicht add-apt-repository. Dieses fügt nämlich auch einen deb-src-Eintrag hinzu, obwohl kein Quellpaket bereitgestellt wird. Falls der deb-src-Eintrag hinzugefügt wurde, kann ein Fehler wie der folgende auftreten:

Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)

Dann entfernen Sie die deb-src-Eintragung aus der Datei /etc/apt/sources.list.

Führen Sie ein Update durch und installieren Sie Logstash:

sudo apt-get update && sudo apt-get install logstash

Für YUM-basierte Systeme (CentOS/RHEL)

Öffentlichen Signaturschlüssel herunterladen und installieren:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Fügen Sie die folgende Konfiguration in Ihre Datei /etc/yum.repos.d/logstash.repo ein. Verwenden Sie tee, um die Datei zu erstellen und zu aktualisieren.

sudo tee /etc/yum.repos.d/logstash.repo > /dev/null

Installieren Sie Logstash:

Weitere Informationen finden Sie im Logstash-Installationshandbuch.

Schritt 2 – Logstash zur Übertragung von Logs an OpenSearch konfigurieren

Eine Logstash-Pipeline besteht aus drei Hauptphasen: Input, Filter und Output. Logstash-Pipelines verwenden Plugins. Sie können Community-Plugins nutzen oder eigene erstellen.

Input

Diese Phase sammelt Daten aus verschiedenen Quellen. Logstash unterstützt zahlreiche Input-Plugins für Datenquellen wie Logdateien, Datenbanken, Message Queues und Cloud-Dienste.

Filter

Diese Phase verarbeitet und transformiert die gesammelten Daten. Filter können Daten ändern, anreichern und strukturieren, um sie nutzbarer und einfacher analysierbar zu machen.

Output

Diese Phase sendet die verarbeiteten Daten an ein Ziel, wie Datenbanken, Dateien oder Datenspeicher wie OpenSearch.

Schritt 3 – Installation des OpenSearch Output Plugins

Das OpenSearch Output Plugin kann mit folgendem Befehl installiert werden:

/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch

Weitere Informationen finden Sie im logstash-output-opensearch Plugin Repository.

Erstellen einer Logstash-Pipeline

Erstellen Sie eine neue Datei unter /etc/logstash/conf.d/ mit dem Namen apache_pipeline.conf und kopieren Sie den folgenden Inhalt:


input {
  file {
    path => "/var/log/apache2/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_access"
  }

  file {
    path => "/var/log/apache2/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_error"
  }
}

filter {
  if "apache_access" in [tags] {
    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
      }
   } else {
   grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
   }
}

output {
  if "apache_access" in [tags] {
  opensearch {
    hosts       => "https://:25060"
    user        => "doadmin"
    password    => ""
    index       => "apache_access"
    ssl_certificate_verification => true
  }

  } else {
  opensearch {
    hosts       => "https://:25060"
    user        => "doadmin"
    password    => ""
    index       => "apache_error"
    ssl_certificate_verification => true
  }
  }
}


Ersetzen Sie <OpenSearch-Hostname> mit Ihrem OpenSearch-Server und <Ihr_Passwort> mit Ihrem OpenSearch-Passwort.

Verständnis der Konfiguration

INPUT

Dieser Abschnitt dient zur Konfiguration einer Quelle für die Ereignisse. Das file-Input-Plugin wird hier verwendet.

  • path => "/var/log/apache2/access.log": Gibt den Pfad zur Apache-Zugriffsprotokolldatei an, die Logstash lesen soll.
  • Stellen Sie sicher, dass der Logstash-Dienst Zugriff auf den Eingabepfad hat.
  • start_position => "beginning": Definiert, wo Logstash mit dem Lesen der Logdatei beginnen soll. „beginning“ bedeutet, dass Logstash die Datei von Anfang an verarbeitet.
  • sincedb_path => "/dev/null": Gibt den Pfad zu einer sincedb-Datei an, die die zuletzt gelesene Position speichert.
  • tags => "apache_access": Weist den von dieser Eingabe gelesenen Ereignissen ein Tag zu, das später für die Filterung nützlich ist.

FILTER

Filter verarbeiten und transformieren Ereignisse.

Bedingte Verarbeitung

if "apache_access" in [tags]: Dies überprüft, ob das Tag apache_access im Ereignis vorhanden ist, und wendet den entsprechenden GROK-Filter an.

Grok-Filter für Apache-Zugriffsprotokolle

grok {
    match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}

Der %{HTTPD_COMBINEDLOG}-Grok-Filter extrahiert Felder wie IP-Adresse, Zeitstempel, HTTP-Methode, URI und Statuscode.

Mutate-Filter

mutate {
    remove_field => [ "message","[log][file][path]","[event][original]" ]
}

Dieser Filter entfernt unnötige Felder nach der Protokollverarbeitung.

Grok-Filter für Apache-Fehlerprotokolle

grok {
    match => { "message" => "%{HTTPD24_ERRORLOG}" }
}

Dieser Filter extrahiert strukturierte Felder aus den Apache-Fehlerprotokollen.

OUTPUT

Das Output-Plugin sendet Ereignisse an ein bestimmtes Ziel.

Routing von Logs an OpenSearch

if "apache_access" in [tags] {
  opensearch {
    hosts       => "https://XXX:25060"
    user        => "doadmin"
    password    => "XXXXX"
    index       => "apache_access"
    ssl_certificate_verification => true
  }
}

  • hosts: Gibt den OpenSearch-Server an.
  • user: Benutzername für die Authentifizierung.
  • password: Passwort für die Authentifizierung.
  • index: Definiert den OpenSearch-Index, in dem die Protokolle gespeichert werden.
  • ssl_certificate_verification => true: Aktiviert die SSL-Zertifikatsüberprüfung.

GROK-Muster können im Logstash Patterns Repository gefunden werden.

Schritt 4 – Logstash starten

Sobald die Pipeline konfiguriert ist, starten Sie den Logstash-Dienst:

systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service

Schritt 5 – Fehlerbehebung

Verbindung prüfen

Überprüfen Sie die Verbindung von Logstash zu OpenSearch:

curl -u ihr_benutzername:ihr_passwort -X GET "https://ihr-opensearch-server:25060/_cat/indices?v"

Datenübertragung prüfen

Stellen Sie sicher, dass die Daten korrekt in OpenSearch indexiert werden:

curl -u ihr_benutzername:ihr_passwort -X GET "http://ihr-opensearch-server:25060//_search?pretty"

Ersetzen Sie <your-opensearch-server> durch den Hostnamen Ihres OpenSearch-Servers sowie <your_username> und <your_password> durch Ihre OpenSearch-Anmeldedaten. Ebenso ersetzen Sie <your-index-name> durch den Indexnamen.

Firewall- und Netzwerkkonfiguration

Stellen Sie sicher, dass Firewall-Regeln und Netzwerkeinstellungen den Datenverkehr zwischen Logstash und OpenSearch auf Port 25060 zulassen.

Logs

Die Logdateien für Logstash befinden sich unter:

/var/log/logstash/logstash-plain.log

Weitere Informationen finden Sie in der Fehlerbehebungsanleitung.

Fazit

In dieser Anleitung haben wir die Einrichtung von Logstash zur Erfassung und Weiterleitung von Apache-Logs an OpenSearch durchlaufen. Hier eine kurze Zusammenfassung:

  • Installation von Logstash: Wir haben die Installation mit APT oder YUM für verschiedene Linux-Distributionen behandelt.
  • Konfiguration: Wir haben die Logstash-Konfiguration erstellt und angepasst, damit Apache-Logs korrekt verarbeitet und an OpenSearch gesendet werden.
  • Verifizierung in OpenSearch: Wir haben ein Indexmuster in OpenSearch Dashboards eingerichtet, um sicherzustellen, dass Ihre Logs korrekt indexiert und analysiert werden können.

Mit diesen Schritten sollten Sie nun eine funktionale Umgebung haben, in der Logstash Apache-Logs sammelt und an OpenSearch weiterleitet.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: