Wie man Apache-Logs mit Logstash an OpenSearch weiterleitet

Einleitung

Effektive Verwaltung von Webserver-Logs ist entscheidend für die Wartung der Website-Leistung, das Trouble-Shooting von Problemen und das Erlangen von Einblicken in das Nutzerverhalten. Apache ist einer der beliebtesten Webserver. Er generiert Zugangs- und Fehlerlogs, die wertvolle Informationen enthalten. Um diese Logs effizient zu verwalten und zu analysieren, kannst du Logstash verwenden, um sie zu verarbeiten und an DigitalOcean’s Managed OpenSearch zu senden, wo sie indiziert und visualisiert werden.

In diesem Tutorial führen wir dich durch die Installation von Logstash auf einem Droplet, die Konfiguration zur Sammlung deiner Apache-Logs und den Versand an Managed OpenSearch zur Analyse.

Voraussetzungen

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

Schritt 1 – Installation von Logstash

Logstash kann entweder über die binären Dateien installiert werden oder über die Paket-Repositories. Für eine einfache Verwaltung und Updates ist es generell empfehlenswert, Paket-Repositories zu verwenden.

In diesem Abschnitt werden wir Ihnen dabei begleiten, Logstash auf Ihrem Droplet mit den APT und YUM Paketmanagern zu installieren.

Lassen Sie uns zunächst die Betriebssystem-Art bestimmen:

cat /etc/os-release

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

Laden Sie die öffentliche Signaturschlüssel herunter und installieren Sie diese:

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

Es ist möglicherweise notwendig, das Paket apt-transport-https auf Debian zu installieren, bevor Sie fortfahren:

sudo apt-get install apt-transport-https

Speichern Sie die Repository-Definition in /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 oben beschriebene echo-Methode, um das Logstash-Repository hinzuzufügen. Verwenden Sie nicht add-apt-repository, da es auch eine deb-src-Eintrag hinzufügt, aber wir stellen kein Quellpaket bereit. Wenn Sie den deb-src-Eintrag hinzugefügt haben, sehen Sie einen Fehler wie folgendes:

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

Löschen Sie den deb-src-Eintrag aus der Datei /etc/apt/sources.list und die Installation sollte wie erwartet funktionieren.

Führen Sie sudo apt-get update aus, und das Repository ist bereit für die Verwendung. Sie können es mit folgendem Befehl installieren:

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

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

Laden und installieren Sie die öffentliche Signaturschlüssel:

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

Fügen Sie die folgenden Einträge Ihrer Datei /etc/yum.repos.d/logstash.repo hinzu. Sie können den Befehl ‘tee’ verwenden, um die Datei zu aktualisieren und zu erstellen.

sudo tee /etc/yum.repos.d/logstash.repo > /dev/null <<EOF
[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

Ihr Repository ist bereit für die Nutzung. Sie können es mit installieren:

sudo yum install logstash

Weitere Informationen finden Sie im Leitfaden zur Installation von Logstash.

Schritt 2 – Konfigurieren von Logstash, um Protokolle in OpenSearch zu senden

Ein Logstash-Pipeline besteht aus drei Hauptschritten: Eingang, Filter und Ausgang. Logstash-Pipelines verwenden Plugins. Sie können Community-Plugins verwenden oder eigenen Plugins erstellen.

  • Eingang: In diesem Schritt wird Daten aus verschiedenen Quellen erfasst. Logstash unterstützt zahlreiche Eingangs-Plugins, um Datenquellen wie Logdateien, Datenbanken, Meldequeues und Clouddienste zu verwalten.

  • Filter: In diesem Stadium werden die im Eingangsstadium gesammelten Daten verarbeitet und transformiert. Filter können die Daten modifizieren, ergänzen und strukturieren, um sie nützlicher und einfacher zu analysieren.

  • Ausgabe: In diesem Stadium werden die verarbeiteten Daten an einen Bestimmungsort gesendet. mögliche Ziele sind Datenbanken, Dateien und Datenspeicher wie OpenSearch.

Schritt 3 – Installation der Open Search Ausgabemoduls

Das OpenSearch-Ausgabemodul kann installiert werden, indem Sie den folgenden Befehl ausführen:

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

Weitere Informationen finden Sie in diesem logstash-output-opensearch-plugin-Repository.

Jetzt erstellen wir eine Pipeline:

Erstellen Sie ein neues Datei im Verzeichnis /etc/logstash/conf.d/ mit dem Namen apache_pipeline.conf und fügen Sie folgenden Inhalt hinzu.

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://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_access"
    ssl_certificate_verification => true
  }

  } else {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_error"
    ssl_certificate_verification => true
  }
  }
}

Ersetzen Sie <OpenSearch_Host> mit dem Hostnamen Ihres OpenSearch-Servers und <OpenSearch_Password> mit Ihrem OpenSearch-Passwort.

Lassen Sie uns die obige Konfiguration aufteilen.

  • EINGABE: Dies wird verwendet, um eine Quelle für Ereignisse einzurichten. Der ‚datei‘ Eingabemodul wird hier verwendet.

  • pfad => “/var/log/apache2/access.log” : Gibt den Pfad zum Apache-Zugriffsprotokolldatei an, die Logstash ausliest.

    Stellen Sie sicher, dass der Logstash-Dienst auf die Eingabepfad zugreifen kann.

  • startposition => “beginning”: Definiert, wo Logstash beginnen soll, die Protokolldatei zu lesen. “beginning” bedeutet, dass Logstash die Datei am Anfang bearbeitet, anstatt am Ende.

  • sincedb_path => “/dev/null”: Gewährt den Pfad zu einer sincedb-Datei. Sincedb-Dateien werden von Logstash verwendet, um den aktuellen position in log-Dateien zu verwalten, was es ermöglicht, bei Neustarts oder Fehlern fortzufahren, wo es aufgehört hat.

  • tags => “apache_access”: Fügt Events, die von diesem Input gelesen werden, einer Tag. Tags sind nützlich für die Identifizierung und Filterung von Ereignissen innerhalb von Logstash und werden oft in den Ausgaben oder Filterstufen der Konfiguration verwendet. Wir verwenden Tags für letzteres.

  • FILTER: wird verwendet, um die Ereignisse zu verarbeiten.

    Beginnend mit Bedingungen:

    (if "apache_access" in [tags]):
    

    Dies überprüft, ob das Tag apache_access im [tags]-Feld der eingehenden Protokollereignisse vorhanden ist. Wir verwenden diese Bedingung, um den entsprechenden GROK-Filter für Apache Access- und Fehlerprotokolle anzuwenden.

  • Grok-Filter (für Apache-Zugriffslogs):

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

    Das Grok-Filter %{HTTPD_COMBINEDLOG} ist ein vordefiniertes Muster in Logstash, das zum Parsen des Apache-Kombinierten Zugriffslogformats verwendet wird. Dies extrahiert Felder wie IP-Adresse, Zeitstempel, HTTP-Methode, URL, Status-Code etc. aus dem Nachrichtenfeld von eingehenden Ereignissen.

  • Mutationsfilter Entfernen (optional): Nach der Analyse der Apache-Logdateien verwenden wir mutate-remove, um bestimmte Felder zu entfernen.

    mutate {
        remove_field => [
            "message",
            "[log][file][path]",
            "[event][original]"
        ]
    }
    
  • Andere Bedingung: Der else-Block wird ausgeführt, wenn das apache_access-Tag in den [tags] nicht enthalten ist. Dieser else-Block enthält einen weiteren GROK-Filter für Apache-Fehlerprotokolle.

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

    Dieser grok-Filter %{HTTPD24_ERRORLOG} parsed Nachrichten, die auf das Apache-Fehlerprotokollformat passen. Er extrahiert Felder, die für Fehlerprotokolle relevant sind, wie Zeitstempel, Protokollierungsstufe, Fehlernachricht usw.

    GROK-Muster können unter folgendem Link gefunden werden: https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns.

  • OUTPUT: Das Ausgabe-Plugin sendet Ereignisse an einen bestimmten Zielort.

    Der Ausgabe-Block beginnt mit einer If-Bedingung. Wir verwenden hier If-Bedingungen

    wenn "apache_access" in [tags] {}
    

    apache_error und apache_access.

    Wir erkunden das OpenSearch-Ausgabe-Plugin:

    hosts            => "https://XXX:25060"  Ihr OpenSearch-Hostname
    user             => "doadmin"            Ihr OpenSearch-Benutzername
    password         => "XXXXX"              OpenSearch-Passwort
    index            => "apache_error"       Indexname in OpenSearch
    ssl_certificate_verification => true     SSL-Zertifikatsüberprüfung aktiviert
    

Schritt 4 – Starten von Logstash

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

Prüfen Sie die Verbindung

Sie können überprüfen, ob Logstash sich mit OpenSearch verbinden kann, indem Sie die Verbindung testen:

curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"

Ersetzen Sie <your-opensearch-server> mit dem Hostnamen Ihres OpenSearch-Servers und <your_username>, <your_password> mit Ihren OpenSearch-Anmeldedaten.

Dateningestion

Stellen Sie sicher, dass Daten ordnungsgemäß in OpenSearch indiziert werden:

curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"

Ersetzen Sie <your-opensearch-server> mit dem Hostnamen Ihres OpenSearch-Servers und <your_username>, <your_password> mit Ihren OpenSearch-Anmeldedaten. Ebenso <your-index-name> mit dem Index-Namen.

Firewall und Netzwerkeinstellungen

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

Protokolle

Die Protokolle von Logstash finden Sie unter /var/log/logstash/logstash-plain.log

Weitere Informationen entnehmen Sie dem Fehlerbehebung-Abschnitt.

Fazit

In diesem Leitfaden haben wir durchgeführt, wie man Logstash einrichtet, um Apache-Protokolle zu sammeln und an OpenSearch weiterzuleiten. Hier ist ein kurzer Zusammenfassung dessen, was wir behandelt haben:

Installieren von Logstash: Wir haben erklärt, wie Sie Logstash mithilfe entweder des APT- oder YUM-Paketmanagers installieren können, je nach Ihrer Linux-Distribution, auf Ihrem Droplet.

Einstellen von Logstash: Wir haben eine Logstash-Konfigurationsdatei erstellt und verändert, um sicherzustellen, dass Apache-Protokolle korrekt verarbeitet und an OpenSearch weitergeleitet werden.

Überprüfen in OpenSearch: Wir haben in OpenSearch Dashboards ein Indexmuster eingerichtet, um sicherzustellen, dass Ihre Protokolle korrekt indiziert werden und für die Analyse sichtbar sind.

Nach Abschluss dieser Schritte sollten Sie nun eine funktionelle Einrichtung haben, in der Logstash Apache-Protokolle sammelt und an OpenSearch sendet.

Source:
https://www.digitalocean.com/community/tutorials/forward-apache-logs-to-opensearch-via-logstash