Zugriffs- und Speicherlogs

In diesem Dokument wird erklärt, wie Sie Zugriffslogs und Speicherinformationen für Cloud Storage-Buckets herunterladen und mit Google BigQuery analysieren.

Einführung

Cloud Storage bietet Zugriffs- und Speicherlogs in Form von CSV-Dateien, die Sie herunterladen und anzeigen können. Die stündlich erstellten Zugriffslogs enthalten Informationen zu allen Anfragen, die an einen bestimmten Bucket gestellt wurden. Die täglichen Speicherlogs liefern Informationen zum Speicherverbrauch dieses Buckets für den letzten Tag. Zugriffs- und Speicherlogs werden nach der Einrichtung automatisch in dem von Ihnen bestimmten Bucket als neue Objekte erstellt.

Sollte ich Zugriffslogs oder Cloud-Audit-Logs verwenden?

In den meisten Fällen ist Cloud-Audit-Logs die empfohlene Methode zum Erstellen von Logs, mit denen in Cloud Storage ausgeführte API-Vorgänge erfasst werden:

  • Cloud-Audit-Logs erfasst den Zugriff auf kontinuierliche Weise.
  • Cloud-Audit-Logs erzeugt Logs, mit denen Sie einfacher arbeiten können.
  • Mit Cloud-Audit-Logs können Sie viele Google Cloud Platform-Dienste beobachten, nicht nur Cloud Storage.

In einigen Fällen können Sie stattdessen Zugriffslogs verwenden. Die Verwendung von Zugriffslogs eignet sich in der Regel in folgenden Situationen:

  • Sie möchten den Zugriff auf öffentliche Objekte erfassen, z. B. auf Assets in einem Bucket, den Sie als statische Website konfiguriert haben.
  • Sie möchten den Zugriff auf Objekte verfolgen, wenn der Zugriff aufgrund der für die Objekte festgelegten Access Control Lists (ACLs) ausschließlich gewährt wird.
  • Sie möchten durch die Verwaltung des Objektlebenszyklus vorgenommene Änderungen verfolgen.
  • Sie möchten authentifizierte Browserdownloads verwenden, um auf Objekte im Bucket zuzugreifen.
  • Sie möchten, dass Ihre Logs Latenzinformationen oder die Größe von Anfragen und Antworten einzelner HTTP-Anfragen enthalten.

Sollten Sie Speicherlogs oder Stackdriver verwenden?

Im Allgemeinen sollten Sie keine Speicherlogs verwenden. Stackdriver wird zur Messung des Speicherverbrauchs empfohlen. Es bietet Visualisierungstools sowie zusätzliche Messwerte zum Speicherverbrauch, die in Speicherlogs nicht berücksichtigt werden. Unter Größe eines Buckets ermitteln finden Sie eine Schritt-für-Schritt-Anleitung für Stackdriver.

Logbereitstellung einrichten

Im Folgenden wird das Einrichten der Logbereitstellung für einen bestimmten Bucket mithilfe des gsutil-Tools, der XML API und der JSON API beschrieben. Falls Sie das gsutil-Tool nicht haben, können Sie es als Teil des Google Cloud SDK-Pakets oder als eigenständiges Produkt herunterladen und installieren.

gsutil

  1. Erstellen Sie einen Bucket, um Ihre Logs zu speichern.

    Verwenden Sie dazu den folgenden Befehl:

    gsutil mb gs://example-logs-bucket
  2. Gewähren Sie Cloud Storage die Berechtigung WRITE für den Bucket.

    Cloud Storage benötigt die Berechtigung WRITE, um die Logs als neue Objekte zu erstellen und zu speichern. Damit Cloud Storage WRITE-Zugriff auf den Bucket erhält, gewähren Sie mit dem folgenden Befehl der Gruppe cloud-storage-analytics@google.com Schreibzugriff:

    gsutil acl ch -g cloud-storage-analytics@google.com:W gs://example-logs-bucket
  3. Logobjekte haben die Standardobjekt-ACL des Log-Buckets. Die Standardobjekt-ACL des Log-Buckets können Sie mit gsutil einrichten. So legen Sie beispielsweise als Standardobjekt-ACL "project-private" fest:

    gsutil defacl set project-private gs://example-logs-bucket
  4. Aktivieren Sie das Logging für den Bucket.

    Dazu verwenden Sie den logging-Befehl:

    gsutil logging set on -b gs://example-logs-bucket [-o log_object_prefix ] gs://example-bucket

    Optional können Sie das Objektpräfix log_object_prefix für Ihre Logobjekte einrichten. Dieses bildet den Anfang des Logobjektnamens. Es darf maximal 900 Zeichen umfassen und muss ein gültiger Objektname sein. Standardmäßig ist das Objektpräfix der Name des Buckets, für den die Logs aktiviert werden.

XML API

  1. Erstellen Sie einen Bucket, um Ihre Logs zu speichern.

    Verwenden Sie dazu die folgende Anfrage:

    PUT /example-logs-bucket HTTP/1.1
    Host: storage.googleapis.com
    
  2. Gewähren Sie Cloud Storage die Berechtigung WRITE für den Bucket.

    Cloud Storage benötigt die Berechtigung WRITE, um die Logs als neue Objekte zu erstellen und zu speichern. Fügen Sie einen ACL-Eintrag für den Bucket hinzu, der der Gruppe cloud-storage-analytics@google.com den Schreibzugriff gestattet, um Cloud Storage WRITE-Zugriff auf den Bucket zu gewähren. Achten Sie darauf, dass die Anfrage alle vorhandenen ACLs für den Bucket sowie die neue Zugriffssteuerungsliste enthält.

    PUT /example-logs-bucket?acl HTTP/1.1
    Host: storage.googleapis.com
    
    <AccessControlList>
      <Entries>
        <Entry>
          <Scope type="GroupByEmail">
            <EmailAddress>cloud-storage-analytics@google.com</EmailAddress>
          </Scope>
         <Permission>WRITE</Permission>
        </Entry>
        <!-- include other existing ACL entries here-->
      </Entries>
    </AccessControlList>
    
  3. Aktivieren Sie das Logging für den Bucket.

    Dazu verwenden Sie den Abfrageparameter "logging":

    PUT /example-bucket?logging HTTP/1.1
    Host: storage.googleapis.com
    
    <Logging>
        <LogBucket>example-logs-bucket</LogBucket>
        <LogObjectPrefix>log_object_prefix</LogObjectPrefix>
    </Logging>
    

JSON API

  1. Erstellen Sie einen Bucket, um Ihre Logs zu speichern.

    Verwenden Sie dazu die folgende Anfrage:

    POST /storage/v1/b?project=project-id
    Host: www.googleapis.com
    
    {
      "name": "example-logs-bucket"
    }
    
  2. Gewähren Sie Cloud Storage die Berechtigung WRITE für den Bucket.

    Cloud Storage benötigt die Berechtigung WRITE, um die Logs als neue Objekte zu erstellen und zu speichern. Fügen Sie einen ACL-Eintrag für den Bucket hinzu, der der Gruppe cloud-storage-analytics@google.com den Schreibzugriff gestattet, um Cloud Storage WRITE-Zugriff auf den Bucket zu gewähren. Nutzen Sie dazu die folgende Anfrage an die Ressource "BucketAccessControls" für den Log-Bucket:

    POST /storage/v1/b/example-logs-bucket/acl
    Host: www.googleapis.com
    {
     "entity": "group-cloud-storage-analytics@google.com",
     "role": "WRITER"
    }
    
  3. Aktivieren Sie das Logging für den Bucket.

    Dazu verwenden Sie die folgende Anfrage:

    PATCH /storage/v1/b/example-bucket
    Host: www.googleapis.com
    
    {
     "logging": {
      "logBucket": "example-logs-bucket",
      "logObjectPrefix": "log_object_prefix"
     }
    }
    

Logging-Status prüfen

gsutil

In gsutil können Sie das Logging mit dem Befehl logging get prüfen:

gsutil logging get gs://example-bucket

Außerdem können Sie die Logging-Konfiguration in einer Datei speichern:

gsutil logging get gs://example-bucket > your_logging_configuration_file

Wenn das Logging aktiviert ist, gibt der Server die Logging-Konfiguration in der Antwort zurück:

{"logBucket": "example-logs-bucket", "logObjectPrefix": "log_object_prefix"}

Ist das Logging nicht aktiviert, wird Folgendes zurückgegeben:

gs://example-bucket/ has no logging configuration.

XML API

Mit der Cloud Storage XML API können Sie eine GET-Bucket-Anfrage zum Abrufen der Logging-Konfiguration für den Bucket senden, wie im folgenden Beispiel gezeigt:

GET /example-bucket?logging HTTP/1.1
Host: storage.googleapis.com

Wenn das Logging aktiviert ist, sendet der Server die Konfiguration in der Antwort. Diese könnte so aussehen:

<?xml version="1.0" ?>
<Logging>
    <LogBucket>
        example-logs-bucket
    </LogBucket>
    <LogObjectPrefix>
        log_object_prefix
    </LogObjectPrefix>
</Logging>

Ist das Logging nicht aktiviert, wird eine leere Konfiguration zurückgegeben:

<?xml version="1.0" ?>
<Logging/>

JSON API

Mit der Cloud Storage JSON API können Sie eine GET-Anfrage zum Abrufen der Logging-Konfiguration für den Bucket senden, wie im folgenden Beispiel gezeigt:

GET /storage/v1/b/example-bucket?fields=logging
Host: www.googleapis.com

Wenn das Logging aktiviert ist, sendet der Server die Konfiguration in der Antwort. Diese könnte so aussehen:

{
 "logging": {
  "logBucket": "example-logs-bucket",
  "logObjectPrefix": "log_object_prefix"
  }
}

Ist das Logging nicht aktiviert, wird eine leere Konfiguration zurückgegeben:

{
}

Logs herunterladen

Speicherlogs werden einmal täglich erstellt und enthalten Informationen zur Speichernutzung des Vortags. In der Regel werden sie vor 19:00 Uhr MEZ generiert.

Nutzungslogs werden stündlich erstellt, wenn es in dem überwachten Bucket Aktivitäten gibt. Nutzungslogs werden normalerweise 15 Minuten nach Ablauf der Stunde generiert.

Der Zugriff auf Ihre Logs wird durch die ACL für die Logobjekte gesteuert. Diese haben die Standardobjekt-ACL des Log-Buckets.

Am einfachsten können Sie Zugriffs- und Speicherlogs über die Google Cloud Platform Console oder mit dem gsutil-Tool herunterladen. Die Zugriffs-Logs werden im CSV-Format erstellt und folgendermaßen benannt:

gs://<bucket_name>/<object_prefix>_usage_<timestamp>_<id>_v0

Das unten stehende Beispiel zeigt ein Zugriffs-Log-Objekt für den Bucket gs://example-bucket, das am 18. Juni 2013 um 14:00 Uhr UTC erstellt wurde und im Bucket gs://example-logs-bucket gespeichert ist:

gs://example-logs-bucket/example-bucket_usage_2013_06_18_14_00_00_1702e6_v0

Speicher-Logs werden folgendermaßen benannt:

gs://<bucket_name>/<object_prefix>_storage_<timestamp>_<id>_v0

Das folgende Beispiel zeigt ein Speicher-Log-Objekt für denselben Bucket am 18. Juni 2013:

gs://example-logs-bucket/example-bucket_storage_2013_06_18_07_00_00_1702e6_v0

So laden Sie Logs herunter:

Console

  1. Öffnen Sie in der Google Cloud Platform Console den Cloud Storage-Browser.
    Zum Cloud Storage-Browser
  2. Wählen Sie Ihren Log-Bucket aus.

  3. Laden Sie Ihre Logs herunter oder zeigen Sie sie an, indem Sie auf das entsprechende Log-Objekt klicken.

gsutil

Führen Sie den folgenden Befehl aus:

gsutil cp <logs_object> <destination_uri>

Logs in BigQuery analysieren

Um Ihre Cloud Storage-Nutzung und Speicherlogs abzufragen, können Sie Google BigQuery verwenden, das schnelle, SQL-ähnliche Abfragen in Tabellen ermöglicht, für die nur Anfügungen zulässig sind. Das BigQuery-Befehlszeilentool bq basiert auf Python und ermöglicht es Ihnen, über die Befehlszeile auf BigQuery zuzugreifen. Informationen zum Herunterladen und Verwenden von bq finden Sie auf der Referenzseite zum bq-Befehlszeilentool.

Logs in BigQuery laden

  1. Wählen Sie ein Standardprojekt aus.

    Weitere Informationen zum Auswählen eines Projekts finden Sie unter Mit Projekten arbeiten.

  2. Erstellen Sie ein neues Dataset.

    $ bq mk storageanalysis
    Dataset 'storageanalysis' successfully created.
    
  3. Listen Sie die Datasets im Projekt auf.

    $ bq ls
     
    datasetId
    -----------------
    storageanalysis
    
  4. Speichern Sie die Nutzungs-und Speicherschemas auf Ihrem lokalen Computer, um sie im Ladebefehl verwenden zu können.

    Die zu verwendenden Schemas finden Sie unter cloud_storage_usage_schema_v0 und cloud_storage_storage_schema_v0. Diese werden auch im Abschnitt Format der Zugriffs- und Speicherlogs beschrieben.

  5. Laden Sie die Zugriffslogs in das Dataset.

    $ bq load --skip_leading_rows=1 storageanalysis.usage \
          gs://example-logs-bucket/example-bucket_usage_2014_01_15_14_00_00_1702e6_v0 \
          ./cloud_storage_usage_schema_v0.json
    $ bq load --skip_leading_rows=1 storageanalysis.storage \
          gs://example-logs-bucket/example-bucket_storage_2014_01_05_14_00_00_091c5f_v0 \
          ./cloud_storage_storage_schema_v0.json
    

    Mit diesen Befehlen erledigen Sie Folgendes:

    • Nutzungs- und Speicherlogs aus dem Bucket example-logs-bucket laden
    • Die Tabellen usage und storage im Dataset storageanalysis erstellen.
    • Schemadaten (.json-Datei) aus demselben Verzeichnis lesen, in dem der Befehl bq ausgeführt wird
    • Erste Zeile jeder Log-Datei überspringen, da sie Spaltenbeschreibungen enthält

    Weil Sie in diesem Beispiel den Ladebefehl zum ersten Mal ausgeführt haben, wurden die Tabellen usage und storage erstellt. Sie können durch weitere Ladebefehle mit anderen Zugriffs-Logdateinamen oder Platzhaltern weiter Daten an diese Tabellen anfügen. Mit dem folgenden Befehl hängen Sie zum Beispiel Daten aus allen Logs, die mit "bucket_usuage_2014" beginnen, an die Tabelle storage an:

    $ bq load --skip_leading_rows=1 storageanalysis.usage \
          gs://example-logs-bucket/bucket_usage_2014* \
          ./cloud_storage_usage_schema.json
    

    Bei der Verwendung von Platzhaltern sollten Sie bereits in BiqQuery hochgeladene Logs in ein anderes Verzeichnis verschieben (z. B. gs://example-logs-bucket/processed), um Daten aus einem Log nicht mehrfach hochzuladen.

Auf die Funktionen von BiqQuery können Sie auch über das BigQuery-Browsertool zugreifen. Damit können Sie Daten im Rahmen des Prozesses zum Erstellen von Tabellen laden.

Weitere Informationen zum Laden von Daten aus Cloud Storage, einschließlich des programmatischen Ladens, finden Sie in Daten aus Cloud Storage laden.

Zugriffs-Log-Schema ändern

In manchen Fällen kann es hilfreich sein, Zugriffs-Logs vorzuverarbeiten, bevor sie in BigQuery geladen werden. Dabei können Sie beispielsweise zusätzliche Informationen zu den Zugriffs-Logs hinzufügen, um die Abfrageanalyse in BigQuery zu vereinfachen. In diesem Abschnitt erfahren Sie, wie Sie den Dateinamen jedes Speicherzugriffs-Logs zum Log hinzufügen. Dazu müssen das vorhandene Schema und die Logdateien geändert werden.

  1. Ändern Sie das vorhandene Schema cloud_storage_storage_schema_v0, um den Dateinamen wie unten gezeigt hinzuzufügen. Geben Sie dem Schema einen neuen Namen, zum Beispiel cloud_storage_storage_schema_custom.json, damit Sie es vom Original unterscheiden können.

    [  {"name": "bucket", "type": "string", "mode": "REQUIRED"},
    {"name": "storage_byte_hours","type": "integer","mode": "REQUIRED"},
    {"name": "filename","type": "string","mode": "REQUIRED"}
    ]
    
  2. Vorverarbeiten Sie die Speicherzugriffs-Logdateien basierend auf dem neuen Schema, bevor Sie sie in BigQuery laden.

    Die folgenden Befehle können beispielsweise in einer Linux-, macOS- oder Windows-Umgebung (Cygwin) verwendet werden:

    gsutil cp gs://example-logs-bucket/example-bucket_storage\* .
    for f in example-bucket_storage\*; do sed -i -e "1s/$/,\"filename\"/" -e "2s/$/,\""$f"\"/" $f; done
    

    Mit dem gsutil-Befehl werden die Dateien in Ihr Arbeitsverzeichnis kopiert. Der zweite Befehl geht die Log-Dateien durch und fügt der Beschreibungszeile (erste Zeile) die Information "filename" sowie der Datenzeile (zweite Zeile) den eigentlichen Dateinamen hinzu. Hier sehen Sie ein Beispiel einer geänderten Log-Datei:

    "bucket","storage_byte_hours","filename"
    "example-bucket","5532482018","example-bucket_storage_2014_01_05_08_00_00_021fd_v0"
    
  3. Beim Laden der Speicherzugriffslogs in BigQuery laden Sie Ihre lokal geänderten Logs unter Verwendung des angepassten Schemas.

    for f in example-bucket_storage\*; \
    do ./bq.py load --skip_leading_rows=1 storageanalysis.storage $f ./cloud_storage_storage_schema_custom.json; done
    

Logs in BigQuery abfragen

Sobald die Logs in BigQuery geladen sind, können Sie die Zugriffslogs abfragen, um Informationen zu Ihren protokollierten Buckets zu erhalten. Das folgende Beispiel zeigt, wie Sie das bq-Tool in einem Szenario einsetzen, in dem Sie Zugriffs-Logs für einen Bucket über mehrere Tage zur Verfügung haben und Sie diese, wie unter Logs in BigQuery laden erklärt, geladen haben. Die unten stehenden Abfragen können Sie auch mit dem BigQuery-Browsertool ausführen.

  1. Wechseln Sie im bq-Tool in den interaktiven Modus.

    $ bq shell
    
  2. Fragen Sie die Speicherlogtabelle ab.

    Die folgende Abfrage zeigt beispielsweise, wie sich die Speichernutzung eines protokollierten Buckets im Zeitverlauf ändert. Es wird davon ausgegangen, dass Sie die Speicherzugriffslogs geändert haben, wie unter Zugriffslogschema ändern beschrieben, und dass die Logdateien "logstorage*" heißen.

    project-name>SELECT SUBSTRING(filename, 13, 10) as day, storage_byte_hours/24 as size FROM [storageanalysis.storage] ORDER BY filename LIMIT 100
    

    Beispielausgabe der Abfrage:

    Waiting on bqjob_r36fbf5c164a966e8_0000014379bc199c_1 ... (0s) Current status: DONE
    +------------+----------------------+
    |    day     |         size         |
    +------------+----------------------+
    | 2014_01_05 | 2.3052008408333334E8 |
    | 2014_01_06 | 2.3012297245833334E8 |
    | 2014_01_07 | 3.3477797120833334E8 |
    | 2014_01_08 | 4.4183686058333334E8 |
    +-----------------------------------+
    

    Falls Sie das Schema nicht geändert haben und das Standardschema verwenden, können Sie die folgende Abfrage ausführen:

    project-name>SELECT storage_byte_hours FROM [storageanalysis.storage] LIMIT 100
    
  3. Fragen Sie die Nutzungs-Log-Tabelle ab.

    Die folgende Abfrage zeigt beispielsweise, wie die Anfragemethoden, die Clients für den Zugriff auf Ressourcen im protokollierten Bucket verwenden, zusammengefasst werden.

    project-name>SELECT cs_method, COUNT(\*) AS count FROM [storageanalysis.usage] GROUP BY cs_method
    

    Beispielausgabe der Abfrage:

    Waiting on bqjob_r1a6b4596bd9c29fb_000001437d6f8a52_1 ... (0s) Current status: DONE
    +-----------+-------+
    | cs_method | count |
    +-----------+-------+
    | PUT       |  8002 |
    | GET       | 12631 |
    | POST      |  2737 |
    | HEAD      |  2173 |
    | DELETE    |  7290 |
    +-----------+-------+
    
  4. Beenden Sie die interaktive Shell des bq-Tools.

    project-name> quit
    

Logging deaktivieren

gsutil

In gsutil deaktivieren Sie das Logging mit dem Befehl logging:

gsutil logging set off gs://example-bucket

Führen Sie die Anfrage logging get aus, um zu prüfen, ob das Logging erfolgreich deaktiviert wurde:

gsutil logging get gs://example-bucket

Wenn das Logging deaktiviert ist, wird Folgendes zurückgegeben:

gs://example-bucket/ has no logging configuration.

XML API

In der Cloud Storage-XML API deaktivieren Sie das Logging, indem Sie eine PUT-Anfrage an die Logging-Konfiguration des Buckets senden, wie im folgenden Beispiel gezeigt:

PUT /example-bucket?logging HTTP/1.1
Host: storage.googleapis.com

<Logging/>

JSON API

In der Cloud Storage JSON API deaktivieren Sie das Logging, indem Sie eine PATCH-Anfrage an die Logging-Konfiguration des Buckets senden, wie im folgenden Beispiel gezeigt:

PATCH /example-bucket?logging HTTP/1.1
Host: storage.googleapis.com

{
 "logging": null
}

Format der Zugriffs- und Speicherlogs

Die Zugriffs- und Speicher-Logs können zahllose Informationen enthalten. Die folgenden Tabellen zeigen, welche Informationen Sie darin finden.

Zugriffslogfelder:

Feld Typ Beschreibung
time_micros Integer Die Zeit, in der die Anfrage abgeschlossen wurde, in Mikrosekunden seit der Unixzeit.
c_ip String Die IP-Adresse, von der die Anfrage gesendet wurde. Das Präfix "c" gibt an, dass es sich um Informationen über den Client handelt.
c_ip_type Integer Die Art der IP-Adresse im Feld "c_ip":
  • Der Wert 1 weist auf eine IPV4-Adresse hin.
  • Der Wert 2 steht für eine IPV6-Adresse.
c_ip_region String Reserviert für zukünftige Verwendungen.
cs_method String Die HTTP-Methode der Anfrage. Das Präfix "cs" gibt an, dass diese Informationen vom Client an den Server gesendet wurden.
cs_uri String Der URI der Anfrage.
sc_status Integer Der HTTP-Statuscode, den der Server als Antwort gesendet hat. Das Präfix "sc" gibt an, dass diese Information vom Server an den Client gesendet wurde.
cs_bytes Integer Die Anzahl der in der Anfrage gesendeten Byte.
sc_bytes Integer Die Anzahl der in der Antwort gesendeten Byte.
time_taken_micros Integer Die Zeit für das Verarbeiten der Anfrage in Mikrosekunden ab dem Zeitpunkt, als das erste Byte empfangen wurde, bis zum Senden der Antwort. Bei fortsetzbaren Uploads hängt der Endpunkt von der Antwort auf die letzte Upload-Anfrage ab, die Teil des fortsetzbaren Uploads war.
cs_host String Der Host in der ursprünglichen Anfrage.
cs_referer String Die HTTP-Verweis-URL für die Anfrage.
cs_user_agent String Der User-Agent der Anfrage. Bei Anfragen durch die Lebenszyklusverwaltung lautet der Wert GCS Lifecycle Management.
s_request_id String Die Anfragekennung.
cs_operation String Die Cloud Storage-Operation, z. B. GET_Object
cs_bucket String Der in der Anfrage angegebene Bucket. Bei einer Anfrage zum Auflisten von Buckets kann der Wert null sein.
cs_object String Das in der Anfrage angegebene Objekt. Es kann null sein.

Speicherlogfelder:

Feld Typ Beschreibung
bucket String Der Name des Buckets.
storage_byte_hours Integer Durchschnittliche Größe des Buckets in Byte-Stunden über einen Zeitraum von 24 Stunden. Die Gesamtgröße erhalten Sie, indem Sie die Byte-Stunden durch 24 teilen.