Engineering

Erfassen von AWS-Protokolldaten aus S3 mit Filebeat und dem Elastic Stack

In S3-Buckets können Logdaten aus einer Reihe von AWS-Diensten gespeichert werden, wie z. B. Daten aus S3-Serverzugriffsprotokollen, ELB-Zugriffsprotokollen, CloudWatch-Protokollen und VPC-Flow-Protokollen. Sehen wir und als Beispiel die S3-Serverzugriffsprotokolle an, die ausführliche Angaben zu den Anfragen enthalten, die an einen Bucket gerichtet wurden. Diese Informationen sind sehr wertvoll, allerdings erstellt AWS für mehrere Operationen mehrere .txt-Dateien, was es schwierig macht, die Übersicht darüber zu behalten, welche Operationen in welcher Datei gespeichert sind – man müsste jede einzelne .txt-Datei separat öffnen. Hinzu kommt, dass das Format, in dem S3-Serverzugriffsprotokolle gespeichert sind, so komplex ist, dass sich die gewünschten Informationen in den .txt-Dateien nur mit viel Mühe finden lassen.

Aber glücklicherweise gibt es den Elastic Stack, in dem alle Ihre AWS-Logdateien (oder „Protokolldateien“, wie Sie bei AWS genannt werden) einfach indexiert, analysiert und visualisiert werden können. So gehen Ihnen keine der wichtigen Informationen in diesen Dateien verloren. In diesem Blogpost zeigen wir, wie einfach das Ganze ist.

Einführung

Seit Filebeat 7.4 kann s3 als Datenquelle genutzt werden, sodass Nutzer Ereignisse aus Dateien in einem S3-Bucket sammeln können, wobei jede Zeile aus jeder Datei als ein eigenes Ereignis geführt wird. Zusammen mit der Einführung von s3 als Datenquelle haben wir auch zwei neue Dateigruppen für das Filebeat-AWS-Modul bereitgestellt: die Dateigruppe s3access und die Dateigruppe elb (neu in 7.5). Mit diesen Dateigruppen können Nutzer Logdaten aus unterschiedlichen S3-Buckets erfassen lassen und sie dann an einem zentralen Ort visualisieren und analysieren, ohne jede einzelne Datei herunterladen oder manuell öffnen zu müssen.

Zur Vermeidung von langen Wartezeiten beim Polling sämtlicher Protokolldateien aus jedem S3-Bucket haben wir uns für eine Kombination aus Benachrichtigung und Polling entschieden: Bei Erstellung eines neues S3-Objekts wird für die Amazon-S3-Benachrichtigung der Amazon Simple Queue Service (SQS) verwendet. Der Filebeat-s3-Input prüft den SQS auf neue Nachrichten zu dem in S3 erstellten neuen Objekt und nutzt die Informationen in diesen Nachrichten für das Abrufen von Logdaten aus S3-Buckets. Bei dieser Konfiguration müssen die einzelnen S3-Buckets nicht regelmäßig per Polling abgefragt werden. Der Filebeat-s3-Input garantiert die zeitnahe, schnelle und zuverlässige Erfassung der Daten aus den S3-Buckets.

Konfigurieren von S3-Ereignisbenachrichtigungen mit SQS

Mit den folgenden vier Schritten kann einer AWS-SQS-Warteschlange eine Benachrichtigungskonfiguration zu einem Bucket hinzugefügt werden, mit der AWS S3 dazu aufgefordert wird, in einer AWS-SQS-Warteschlange Ereignisse des Typs s3:ObjectCreated:* zu veröffentlichen. Weitere Einzelheiten finden Sie unter „Beispielhaftes Walkthrough: Hinzufügen von Bucket-Benachrichtigungen mittels SNS und SQS“.

Schritt 1: SQS-Warteschlange und S3-Bucket erstellen

Erstellen Sie mithilfe der Amazon-SQS-Konsole eine SQS-Warteschlange und einen S3-Bucket, beide in derselben AWS-Region.

Schritt 2: SQS-Warteschlange konfigurieren

Ersetzen Sie die mit der Warteschlange verknüpfte Zugriffsrichtlinie durch die folgende Warteschlangenrichtlinie:

{
 "Version": "2012-10-17",
 "Id": "example-ID",
 "Statement": [
  {
   "Sid": "example-statement-ID",
   "Effect": "Allow",
   "Principal": {
    "AWS":"*"  
   },
   "Action": [
    "SQS:SendMessage"
   ],
   "Resource": "<SQS-queue-ARN>",
   "Condition": {
      "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:<bucket-name>" }
   }
  }
 ]
}

Geben Sie für <sqs-queue-arn> Ihren SQS-Warteschlangen-ARN und für <bucket-name> Ihren S3-Bucket-Namen an.

Schritt 3: S3-Bucket konfigurieren

Fügen Sie mithilfe der Amazon-S3-Konsole eine Benachrichtigungskonfiguration hinzu, die Amazon S3 dazu auffordert, Ereignisse des Typs s3:ObjectCreated:* in Ihrer Amazon-SQS-Warteschlange zu veröffentlichen.

Konfigurieren des S3-Buckets

Schritt 4: S3-SQS-Setup testen

Laden Sie ein Objekt in den S3-Bucket hoch und prüfen Sie, ob in der Amazon-SQS-Konsole die entsprechende Ereignisbenachrichtigung angezeigt wird.

Verwenden des Filebeat-s3-Inputs

Wenn Sie in Filebeat den s3-Input aktivieren, können Nutzer Logdaten aus AWS-S3-Buckets erfassen lassen. Jede Zeile in jeder Logdatei wird zu einem eigenen Ereignis und im jeweils konfigurierten Filebeat-Output, z. B. in Elasticsearch, gespeichert. Wenn nur der s3-Input genutzt wird, werden die Logmeldungen im Feld message jedes Ereignisses gespeichert, ohne dass irgendein weiteres Parsing stattfindet.

Sollte die Verarbeitung eines S3-Objekts, auf das in einer SQS-Nachricht verwiesen wird, nach Ablauf der Hälfte der konfigurierten „visibility_timeout“-Zeit (Sichtbarkeits-Timeout) noch nicht abgeschlossen sein, wird das Sichtbarkeits-Timeout dieser SQS-Nachricht zurückgesetzt. So wird sichergestellt, dass die Nachricht nicht mitten während der Verarbeitung wieder in die Warteschlange zurückgeschickt wird. Falls es während der Verarbeitung des S3-Objekts Fehler gibt, wird der Prozess angehalten und die SQS-Nachricht geht wieder in die Warteschlange zurück.

Schritt 1: Filebeat installieren

Die Vorgehensweise zum Herunterladen und Installieren von Filebeat hängt vom jeweiligen System ab. So ist zum Beispiel auf einem Mac Folgendes einzugeben:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-darwin-x86_64.tar.gz
tar xzvf filebeat-7.5.1-darwin-x86_64.tar.gz

Nähere Informationen finden Sie unter „Install Filebeat“.

Schritt 2: s3-Input konfigurieren

Das folgende Beispiel zeigt das Konfigurieren des s3-Inputs in filebeat.yml:

filebeat.inputs:
- type: s3
  queue_url: https://sqs.us-east-1.amazonaws.com/1234/test-fb-ks
  visibility_timeout: 300s
  credential_profile_name: elastic-beats

Bei dieser Konfiguration greift Filebeat auf die AWS-SQS-Warteschlange test-fb-ks zu, um Benachrichtigungen zu lesen. Filebeat nutzt die Nachrichten, um Informationen zu konkreten S3-Objekten zu beziehen und anhand dieser Informationen Zeile für Zeile Objekte zu lesen. „visibility_timeout“ gibt die Dauer (in Sekunden) an, für die die empfangenen Nachrichten für nachfolgende Abrufanforderungen verborgen bleiben, nachdem sie von einer „ReceiveMessage“-Anforderung abgerufen wurden. Der „visibility_timeout“-Wert beträgt standardmäßig 300 Sekunden. Der Mindestwert liegt bei 0 Sekunden und der Höchstwert bei 12 Stunden. Für Aufrufe der AWS-API müssen in der Konfiguration des s3-Inputs die entsprechenden AWS-Anmeldeinformationen angegeben sein. Im Beispiel oben ist für Aufrufe der AWS-API der Profilname elastic-beats angegeben. Nähere Einzelheiten finden Sie unter „AWS Credentials Configuration“.

Schritt 3: Filebeat starten

Bei Mac und Linux:

sudo chown root filebeat.yml
sudo ./filebeat -e

Nähere Informationen finden Sie unter „Start Filebeat“.

Erfassen von S3-Serverzugriffsprotokoll-Daten mit der Dateigruppe „s3access“

In Filebeat 7.4 wurde die Dateigruppe s3access hinzugefügt, sodass mit dem s3-Input S3-Serverzugriffsprotokoll-Daten erfasst werden können. Serverzugriffsprotokolle enthalten ausführliche Angaben zu den Anfragen, die an einen Bucket gerichtet wurden. Diese können in Security- und Zugriffsaudits sehr hilfreich sein. Das Protokollieren von Serverzugriffen ist standardmäßig deaktiviert. Wenn Sie Anfragen für den Zugriff auf Ihren Bucket überwachen möchten, können Sie diese Funktion aktivieren. Jeder Zugriffsprotokoll-Datensatz enthält Details zu je einer Zugriffsanfrage. Dazu gehören Angaben dazu, woher die Anfrage kommt, welcher Bucket betroffen ist, wann die Anfrage gestellt wurde, was angefragt wurde, wie der Antwortstatus aussieht und gegebenenfalls welcher Fehlercode ausgegeben wurde.

Schritt 1: Protokollieren von Serverzugriffen aktivieren

Gehen Sie im entsprechenden S3-Bucket zu „Properties“ und wählen Sie dort Enable logging, um das Protokollieren von Serverzugriffsdaten zu aktivieren:

Protokollieren von Serverzugriffsdaten aktivieren

Schritt 2: Modul „aws“ in Filebeat aktivieren

In der Standardkonfiguration von Filebeat ist das Modul „aws“ nicht aktiviert. Wenn Sie die Konfiguration des Moduls „aws“ im Verzeichnis „modules.d“ auf macOS- und Linux-Systemen aktivieren möchten, verwenden Sie den folgenden Befehl:

sudo ./filebeat modules enable aws

Schritt 3: Modul „aws“ aktivieren

Die Dateigruppe s3access ist standardmäßig deaktiviert. Zur Aktivierung der Dateigruppe s3access ist in aws.yml Folgendes anzugeben:

- module: aws
  s3access:
    enabled: true
    var.queue_url: https://sqs.myregion.amazonaws.com/123456/myqueue
    var.credential_profile_name: fb-aws

Schritt 4: Filebeat starten

Bei Mac und Linux:

sudo chown root filebeat.yml
sudo ./filebeat -e

Nähere Informationen finden Sie unter „Start Filebeat“.

Schritt 5: „s3access“-Dashboard in Kibana verwenden

Die Dateigruppe s3access enthält ein vordefiniertes Dashboard mit dem Namen „[Filebeat AWS] S3 Server Access Log Overview“. Diese Dashboards werden automatisch eingerichtet, wenn Sie beim Starten von Metricbeat den Befehl „setup“ ausführen.

Bei Mac und Linux:

./filebeat setup --dashboards

Weitere Informationen hierzu finden Sie unter „Set up the Kibana dashboards“.

Dieses Dashboard enthält eine Übersicht über Ihre AWS-S3-Serverzugriffsprotokolle. Es zeigt Top-URLs mit deren Antwortcode, den HTTP-Status im Laufe der Zeit und alle Fehlerprotokolleinträge.

Dashboard „AWS S3 Server Access Log Overview“

Wie geht es weiter?

Mit dem Filebeat-s3-Input können Nutzer problemlos Logdaten aus AWS-Diensten erfassen lassen und diese Daten als Ereignisse an unseren Elasticsearch Service auf Elastic Cloud oder an einen Cluster senden, der auf der Standarddistribution basiert. Für Version 7.4 steht die Dateigruppe s3access zur Verfügung, mit der Nutzer S3-Serverzugriffsprotokoll-Daten erfassen lassen und analysieren können. Für Version 7.5 steht die Dateigruppe elb zur Verfügung, mit der Nutzer Logdaten aus dem klassischen Load Balancer, dem Anwendungs-Load-Balancer und dem Netzwerk-Load-Balancer erfassen lassen können. Wir werden in naher Zukunft weitere Dateigruppen hinzufügen, um andere gängige Logdaten zu unterstützen, z. B. Daten aus VPC-Flow-Protokollen, CloudWatch-Protokollen und Cloudtrail-Protokollen. Falls Sie Fragen oder Feedback haben, nutzen Sie bitte unser Beats-Diskussionsforum.