Logging-Anleitung

Media CDN protokolliert jede HTTP-Anfrage zwischen dem Client und dem Edge-Netzwerk in Cloud Logging. Logs werden in der Regel nahezu in Echtzeit gesendet. Dazu gehört, dass die Daten in Logging abgefragt und in Cloud Storage und Pub/Sub exportiert werden können.

Folgende Informationen sind in Ihnen enthalten:

  • Allgemeine Informationen, die in Google Cloud-Logs angezeigt werden, wie Wichtigkeit, Projekt-ID, Projektnummer und den Zeitstempel.
  • HttpRequest-Logfelder
  • Zusätzliche Metadaten zur Anfrage innerhalb von StructPayload, einschließlich:

    • Client-ASN
    • Clientstandortdaten
    • ID (Stadt) der Caches, die zum Ausführen der Antwort verwendet werden
    • TLS SNI-Hostname
    • Verwendete TLS-Version

Cache-spezifische Felder

Das jsonPayload-Objekt eines Media CDN-Logs enthält Metadaten, die angeben, wie Media CDN ein Objekt bereitstellt, ob das Objekt im Cache gespeichert wurde und welche Fehlerzustände aufgetreten sind.

Diese Felder sowie Beispielwerte sind in der folgenden Tabelle aufgeführt.

Feld Beispielwert Details
backendInitialLatency 0.126644940s

Die Dauer, die das Back-End benötigt, um auf eine Anfrage zu antworten. Gemessen ab dem Zeitpunkt, an dem das CDN die Weiterleitung der Anfrage an den Ursprung beendet hat, bis das CDN beginnt, Antwortbytes vom Ursprung zu empfangen.

Dieses Feld erscheint in den Logs nur, wenn der Cache von einer EdgeCacheOrigin-Ressource gefüllt wird.

backendLatency 0.126666342s

Die Dauer, die das Back-End benötigt, um vollständig auf eine Anfrage zu antworten. Gemessen ab dem Zeitpunkt, an dem das CDN die Weiterleitung der Anfrage an den Ursprung beendet hat, bis das CDN die vollständige Antwort vom Back-End erhalten hat.

Dieses Feld erscheint in den Logs nur, wenn der Cache von einer EdgeCacheOrigin-Ressource gefüllt wird.

cacheId MAA-123456 Der IATA-Code (Flughafencode) der dem Cache nächstgelegenen Stadt und eine intransparente Kennzeichnung der Cache-Instanz. Wenn mehrere Cache-Ebenen erforderlich sind, um die Anforderung aufgrund eines vollständigen oder teilweisen Cache-Fehlers zu bedienen, wird die Kette der Cache-Speicherorte angegeben, z. B. del-234567, bom-345678, sin-456789, wobei der Cache ganz rechts dem Nutzer am nächsten ist.
cacheKeyFingerprint f63925711b0dd8a9ff861cd303774e6e

Ein intransparenter Fingerabdruck des Cache-Schlüssels. Anfragen, die demselben Cache-Schlüssel zugeordnet sind, z. B. Anfragen, bei denen Suchparameter nicht enthalten sind oder nicht der Host enthalten ist, sollten denselben Fingerabdruck haben.

Wenn die Gesamtzahl der Anfragen der Gesamtzahl der Fingerabdrücke ähnelt, kann dies darauf hindeuten, dass Ihre Cache-Schlüssel zu spezifisch sind.

cacheMode USE_ORIGIN_HEADERS Der cdnPolicy.cacheMode, der auf der Route konfiguriert wurde, die dieser Anfrage entspricht.
cacheStatus

Cache hit: hit

Full cache miss: fetch, miss, miss

Der Cache-Status an jedem Cache-Knoten zwischen dem Nutzer und dem Ursprungsschild, wobei der Wert ganz rechts den Cache darstellt, der dem Nutzer am nächsten ist.
clientAsn Die ASN (autonome Systemnummer), die auf der IP-Adresse des verbindenden Clients basiert.
clientCity Mountain View

Der Name der Stadt, aus der die Anfrage stammt, z. B. Mountain View, Kalifornien.

Er kann auch den Anfrage- und Antwortheadern hinzugefügt werden und spiegelt die Headervariable client_city wider.

clientRegionCode US

Das Land oder die Region, das bzw. die der IP-Adresse des Clients zugeordnet ist. Dies ist ein Unicode-CLDR-Regionscode wie US oder FR. Für die meisten Länder entsprechen diese Codes den ISO-3166-2-Codes.

Er kann auch den Anfrage- und Antwortheadern hinzugefügt werden und spiegelt die Headervariable client_region wider.

enforcedSecurityPolicy Die Google Cloud Armor-Edge-Sicherheitsrichtlinie, die auf die Anfrage des Clients angewendet wurde. Dazu gehören zusätzliche Informationen über den Namen der Richtlinie, die Priorität und die ergriffene Maßnahme.
httpTtfb 0.157228207s Die Dauer ab dem Zeitpunkt, an dem der Proxy beginnt, Anfragebyte zu empfangen, bis das erste Byte der Antwort gesendet (nicht empfangen) wird.
latency 0.157415635s Die Dauer ab dem Zeitpunkt, an dem der Proxy beginnt, Anfragebytes zu empfangen, bis er die Antwort an den Client geschrieben hat.
location Der Header Location in der Antwort.
metroIataCode MAA Der IATA-Code (Flughafencode) der Stadt, die dem Proxy am nächsten liegt.
origin Die Ressource EdgeCacheOrigin, von der die Antwort weitergeleitet wurde.
originalRequestId 19d92668-3948-49d8-9244-25f8252043e4 Die eindeutige Kennung, die der Anfrage zugewiesen wurde, die ursprünglich diese Antwort erzeugt hat. Wird nur ausgefüllt, wenn sie sich von der request_id für im Cache gespeicherte Antworten unterscheidet.
originIp Die IP-Adresse, mit der die Ressource EdgeCacheOrigin kontaktiert wird, von der die Antwort weitergeleitet wurde.
proxyRegionCode US Das Land (oder die Region), in dem sich der Proxy befindet. Dies ist ein Unicode-CLDR-Regionscode wie US oder FR. Für die meisten Länder entsprechen diese Codes den ISO-3166-2-Codes.
rangeHeader Der Header Range in der Anfrage.
requestId 4bde6381-cd17-47e1-8c2a-1aaa424a1156 Die eindeutige Kennung, die der Anfrage vom Proxy zugewiesen ist.
tlsCipherSuite 009C Die Cipher Suite, die während des TLS-Handshakes ausgehandelt wird. Der Wert besteht aus vier Hexadezimalziffern, die von der IANA TLS Cipher Suite Registry definiert werden, z. B. 009C für TLS_RSA_WITH_AES_128_GCM_SHA256. Bei unverschlüsselten Clientverbindungen ist dieser Wert leer.
tlsSniHostname Angabe des Servernamens (wie in RFC 6066 definiert), falls vom Client während des TLS- oder QUIC-Handshake angegeben. Der Hostname wird in Kleinbuchstaben konvertiert und alle nachgestellten Punkte werden entfernt.
tlsVersion TLS 1.3 Die TLS-Version, die während des SSL-Handshakes zwischen dem Client und dem CDN ausgehandelt wird. Mögliche Werte sind TLS 1, TLS 1.1, TLS 1.2 und TLS 1.3.

Beispiel für einen Logeintrag

Im Folgenden finden Sie ein Beispiel für einen Logeintrag für eine Antwort, die aus dem Cache bereitgestellt wird:

{
  "insertId": "617fa16e-0000-2ac9-9993-d4f547fe67d4@a1",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.cloud.edgecache.v1.EdgeCacheLogEntry",
    "tlsVersion": "TLS 1.3",
    "tlsCipherSuite": "009C", // hex digits for the cipher negotiated
    "cacheId": "maa-132eed13faa13",
    "clientAsn": "9299", // AS the client is associated with
    "origin": "example_origin",
    "clientRegionCode": "IN",
    "metroIataCode": "bom",
    "clientCity": "Mumbai", // City name, in English
    "latency": "0.005105200s",
    "proxyStatus": "Google-Edge-Cache",
    "httpTtfb": "0.005056080s",
    "cacheMode": "FORCE_CACHE_ALL",
    "cacheKeyFingerprint": "c360ac18849b6336",
    "cacheStatus": "hit,stale",
    "enforcedSecurityPolicy": {
      "outcome": "ACCEPT",
      "configuredAction": "ACCEPT",
      "name": "example_policy",
      "priority": 1000
    },
    "originalRequestId": "19d92668-3948-49d8-9244-25f8252043e5",
    "proxyRegionCode": "IN",
    "requestId": "4bde6381-cd17-47e1-8c2a-1aaa424a1156",
    "originIp": "74.125.128.128"
  },
  "httpRequest": {
    "requestMethod": "GET",
    "requestUrl": "https://example.com/image.jpg",
    "requestSize": "3545",
    "status": 200,
    "responseSize": "3716",
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
    "remoteIp": "62.36.0.43",
    "protocol": "HTTP/2"
  },
  "resource": {
    "type": "edgecache.googleapis.com/EdgeCacheRouteRule",
    "labels": {
      "matched_path": "/",
      "path_matcher_name": "routes",
      "service_name": "example_service",
      "resource_container": "projects/123456789",
      "location": "global",
      "route_destination": "projects/123456789/locations/global/edgeCacheOrigins/example_origin",
      "route_type": "ORIGIN"
    }
  },
  "timestamp": "2022-11-19T00:24:13.695328200Z",
  "logName": "projects/my-project/logs/edgecache.googleapis.com%2Fedge_cache_request",
  "receiveTimestamp": "2022-11-19T00:24:16.715871645Z"
}

Sie können die Logs optional nach Bedarf erfassen oder filtern, um das Logvolumen und die allgemeinen Logging-Gebühren zu reduzieren. Sie können Logs auch zur Analyse in Google Cloud an Pub/Sub oder BigQuery weiterleiten oder Ihre vorhandenen Log-Analysetools verwenden.

Logs aktivieren

Logging ist standardmäßig deaktiviert, um die gespeicherten Daten zu minimieren. Logs werden weitergeleitet, gefiltert und in Logging gespeichert.

So aktivieren Sie das Logging für einen bestimmten Media CDN-Dienst:

gcloud edge-cache services update YOUR_SERVICE \
    --enable-logging \
    --logging-sample-rate=1.0

So deaktivieren Sie das Logging:

gcloud edge-cache services update YOUR_SERVICE \
    --no-enable-logging

So rufen Sie den aktuellen Status des Loggings für einen Dienst ab:

gcloud edge-cache services describe YOUR_SERVICE

Die Ausgabe sieht in etwa so aus:

...
logConfig:
  enable: true
  sampleRate: 1.0
...

Beispiellogs

Bei einem großen Anfragevolumen sollten Sie lieber Stichproben aus den Logs nehmen, als für jede Anfrage ein Log zu erstellen, und sich für das proaktive Monitoring und die Prüfung auf Messwerte verlassen.

Wenn Sie Logs nur für 10 % Ihrer Anfragen aufnehmen und speichern möchten, können Sie die logConfig.sampleRate auf 0.1 setzen.

gcloud edge-cache services update YOUR_SERVICE \
    --enable-logging \
    --logging-sample-rate=0.1

Logging muss aktiviert sein, um die Abtastrate zu ändern.

Die Abtastrate beträgt, sofern nicht anders angegeben, standardmäßig den Wert 1.0 (100 %), wodurch jede Anfrage für den konfigurierten Dienst protokolliert wird.

Abfragelogs

Sie können Logs mithilfe des Log-Explorers in der Google Cloud Console oder der Google Cloud-Befehlszeile abfragen.

Wenn Sie Logs in der Google Cloud Console aufrufen möchten, filtern Sie nach dem Ressourcentyp „Media CDN“ und (optional) nach Projekt- und Dienstname.

Die folgende Logging-Abfrage zeigt die Logs für alle Ihre Media CDN-Dienste:

resource.type="edgecache.googleapis.com/EdgeCacheRouteRule"

Wenn Sie nach Logs filtern möchten, die mit einer bestimmten EdgeCacheService-Ressource und einem bestimmten Projekt verknüpft sind, können Sie diese Abfrage erweitern:

resource.type="edgecache.googleapis.com/EdgeCacheRouteRule"
resource.labels.resource_container="projects/12345678"
resource.labels.service_name="MY_PROJECT"

Informationen zum Abgleich mit partiellen Namen oder zur Verwendung regulärer Ausdrücke finden Sie in der Dokumentation zur Logging-Syntax.

Beispiel: Cache-Fehler identifizieren

Eine Anfrage für ein Objekt kann aus verschiedenen Gründen ein Cache-Fehler haben und eine Cache-Füllung verursachen:

  • Eine zu kurze TTL
  • Ein zu spezifischer Cache-Schlüssel
  • Zu wenige Anfragen für die Speicherung im Cache

Zum Identifizieren von Cache-Fehlern können Sie im Log-Explorer nach Logs filtern.

Die folgende Logabfrage zeigt Anfragen, die im Cache zwischengespeichert werden können (nachgeschlagen werden), aber ein Ausfüllen vom Ursprung erfordern:

resource.type="edgecache.googleapis.com/EdgeCacheRouteRule"
resource.labels.resource_container="projects/12345678"
resource.labels.service_name="MY_PROJECT"
jsonPayload.cacheStatus="miss"

Wenn Sie nach einer bestimmten URL filtern müssen, können Sie nach dem Feld httpRequest.requestUrl filtern:

httpRequest.requestUrl = "URL"

Verwenden Sie den has-Operator, um nach einem Teil der URL zu filtern, z. B. der Pfadkomponente:

# `:` is the `has` comparison operator
httpRequest.requestUrl: "/videos/1381381_1080.mp4"
# You can use `OR` or `AND` to filter on multiple values
httpRequest.requestUrl: ("https://media-test.example.com/" OR "https://canary.example.net")

Weitere Informationen zur umfassenden Syntax von Logging für den Abgleich und die Filterung finden Sie in der Dokumentation zu erweiterten Logabfragen.

Aufbewahrungsrichtlinien

Logging unterstützt die Festlegung benutzerdefinierter Aufbewahrungsrichtlinien, auch auf einer Pro-Senke-Basis.

Gespeicherte Logs filtern

Wenn Sie Logs vor dem Speichern filtern möchten, z. B. um nur relevante Felder zu erfassen, um das Gesamtvolumen der zu speichernden und abzufragenden Logs zu reduzieren, können Sie Ausschlussregeln für Logs konfigurieren, mit denen Sie eine Abfrage (Filter) definieren können, die Felder vor der Speicherung ein- oder ausschließt.

Sie können auch mehrere Filter einrichten und beispielsweise alle Cache-Fehleranfragen oder alle Anfragen für einen bestimmten Hostnamen erfassen und nur eine Stichprobe aller Logs aufnehmen.

Logs exportieren

Informationen zum Exportieren von Logs aus Logging finden Sie in der Dokumentation Übersicht über Logexporte. Diese behandelt folgende Themen:

  • Logs nach Cloud Storage oder BigQuery exportieren
  • Nach Pub/Sub exportieren und mit Cloud Functions oder externen Diensten nutzen
  • Aggregation von Logs über mehrere Projekte hinweg

Media CDN lässt sich direkt in Logging einbinden.

Nächste Schritte