Guía de Logging

Media CDN registra cada solicitud HTTP entre el cliente y el perímetro en Cloud Logging. Por lo general, los registros se entregan casi en tiempo real. Esto incluye la posibilidad de realizar consultas en Logging y exportarse a Cloud Storage y Pub/Sub.

Las entradas de registro contienen los siguientes tipos de información:

  • Información general que se muestra en la mayoría de los registros de Google Cloud, como la gravedad, el ID del proyecto, el número del proyecto y la marca de tiempo
  • Los campos de registro de HttpRequest
  • Metadatos adicionales sobre la solicitud dentro de structPayload, que incluyen lo siguiente:

    • ASN del cliente
    • Datos de ubicación del cliente
    • ID (ciudad) de las memorias caché que se usaron para cumplir con la respuesta
    • nombre de host de SNI de TLS
    • Versión usada de TLS

Campos específicos de la caché

El objeto jsonPayload de un registro de Media CDN contiene metadatos específicos sobre cómo la Media CDN entrega un objeto, si el objeto se almacenó en caché y cualquier estado de error encontrado.

Estos campos, así como los valores de ejemplo, se muestran en la siguiente tabla.

Campo Valor de ejemplo Detalles
backendInitialLatency 0.126644940s

La duración que tarda el backend en responder a una solicitud al principio. Se mide desde que la CDN termina de enviar la solicitud al origen mediante proxy hasta que la CDN comience a recibir bytes de respuesta del origen.

Este campo solo aparece en los registros del relleno de caché de un recurso EdgeCacheOrigin.

backendLatency 0.126666342s

La duración que tarda el backend en responder por completo a una solicitud. Se mide desde el momento en que la CDN termina de enviar la solicitud al proxy hasta que se reciba la respuesta completa del backend.

Este campo solo aparece en los registros del relleno de caché de un recurso EdgeCacheOrigin.

cacheId MAA-123456 El código IATA (aeropuerto) de la ciudad más cercana a la caché y un identificador opaco de la instancia de caché. Si se requieren varios niveles de almacenamiento en caché para entregar la solicitud debido a un error de caché completo o parcial, se proporciona la cadena de ubicaciones de caché, por ejemplo, del-234567, bom-345678, sin-456789, donde la caché más a la derecha es la más cercana al usuario.
cacheKeyFingerprint f63925711b0dd8a9ff861cd303774e6e

Una huella digital opaca de la clave de caché. Las solicitudes que se asignan a la misma clave de caché, por ejemplo, las solicitudes en las que los parámetros de consulta no se incluyen o el host no está incluido, deben tener la misma huella digital.

Si la cantidad total de solicitudes es similar a la cantidad total de huellas digitales únicas, puede indicar que las claves de caché son demasiado específicas.

cacheMode USE_ORIGIN_HEADERS El cdnPolicy.cacheMode configurado en la ruta que coincidió con esta solicitud.
cacheStatus

Cache hit: hit

Full cache miss: fetch, miss, miss

El estado de la caché en cada nodo de la caché entre el usuario y el escudo de origen, donde el valor más a la derecha representa la caché más cercana al usuario.
clientAsn El ASN (número de sistema autónomo), basado en la dirección IP del cliente que se conecta.
clientCity Mountain View

Nombre de la ciudad desde la que se originó la solicitud, por ejemplo, Mountain View, California.

Esto también se puede agregar a los encabezados de solicitud y respuesta, y duplica la variable de encabezado client_city.

clientRegionCode US

El país (o región) asociado a la dirección IP del cliente. Este es un código de región CLDR de Unicode, como US o FR. En la mayoría de los países, estos códigos corresponden directamente a los códigos ISO-3166-2.

Esto también se puede agregar a los encabezados de solicitud y respuesta, y duplica la variable de encabezado client_region.

enforcedSecurityPolicy La política de seguridad perimetral de Google Cloud Armor que se aplica a la solicitud del cliente. Esto incluye información adicional sobre el nombre, la prioridad y la acción que se realizó.
httpTtfb 0.157228207s La duración que transcurre desde que el proxy comienza a recibir bytes de solicitud hasta que se envía el primer byte de la respuesta (no se recibe).
latency 0.157415635s El período que transcurre desde que el proxy comienza a recibir bytes de solicitud hasta que termina de escribir la respuesta en el cliente.
location El encabezado Location en la respuesta.
metroIataCode MAA El código IATA (aeropuerto) de la ciudad más cercana al proxy.
origin El recurso EdgeCacheOrigin del que se envió la respuesta.
originalRequestId 19d92668-3948-49d8-9244-25f8252043e4 El identificador único asignado a la solicitud que generó esta respuesta en un principio. Se propaga solo si es diferente de request_id para las respuestas almacenadas en caché.
originIp La dirección IP que se usa para comunicarse con el recurso EdgeCacheOrigin desde el que se envió la respuesta mediante proxy.
proxyRegionCode US El país (o región) en el que se encuentra el proxy. Este es un código de región CLDR de Unicode, como US o FR. En la mayoría de los países, estos códigos corresponden directamente a los códigos ISO-3166-2.
rangeHeader El encabezado Range en la solicitud.
requestId 4bde6381-cd17-47e1-8c2a-1aaa424a1156 El identificador único que el proxy asignó a la solicitud.
tlsCipherSuite 009C El conjunto de algoritmos de cifrado negociado durante el protocolo de enlace TLS. El valor son cuatro dígitos hexadecimales definidos por el registro del conjunto de algoritmos de cifrado TLS de IANA, por ejemplo, 009C para TLS_RSA_WITH_AES_128_GCM_SHA256. Este valor está vacío para las conexiones de cliente no encriptadas.
tlsSniHostname Indicación del nombre del servidor (como se define en RFC 6066), si el cliente la proporciona durante el protocolo de enlace de TLS o QUIC. El nombre de host se pasa a minúsculas y se quita cualquier punto final.
tlsVersion TLS 1.3 Versión de TLS negociada entre el cliente y la CDN durante el protocolo de enlace SSL. Los valores posibles son TLS 1, TLS 1.1, TLS 1.2 y TLS 1.3.

Ejemplo de una entrada de registro

A continuación, se proporciona una entrada de registro de ejemplo de una respuesta entregada desde la caché:

{
  "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"
}

Para reducir el volumen de registros y los cargos generales de Logging, los registros se pueden muestrear o filtrar de manera opcional según sea necesario. También puedes enrutar registros a Pub/Sub o BigQuery para analizarlos en Google Cloud o mediante las herramientas de análisis de registros existentes.

Habilitar registros

Logging está inhabilitado de forma predeterminada para minimizar los datos almacenados. Los registros se enrutan, se filtran y se almacenan en Logging.

Para habilitar el registro de un servicio específico de Media CDN, haz lo siguiente:

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

Para inhabilitar el registro:

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

Para obtener el estado actual del registro en un servicio, ejecuta este comando:

gcloud edge-cache services describe YOUR_SERVICE

El resultado es similar a este:

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

Registros de muestra

En volúmenes grandes de solicitudes, es posible que prefieras realizar muestras de los registros en lugar de capturar un registro para cada solicitud y depender de las métricas para la supervisión y la investigación proactivas.

Si solo transfieres y almacenas registros para el 10% de tus solicitudes, puedes establecer logConfig.sampleRate en 0.1.

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

El registro debe estar habilitado para cambiar la tasa de muestreo.

La tasa de muestreo, a menos que se especifique lo contrario, se establece de forma predeterminada en 1.0 (100%), que registra todas las solicitudes para el servicio configurado.

Registros de consultas

Para consultar registros, puedes usar el Explorador de registros en la consola de Google Cloud o Google Cloud CLI.

Para ver los registros en la consola de Google Cloud, filtra por tipo de recurso de Media CDN y (de forma opcional) por nombre de proyecto y servicio.

En la siguiente consulta de registro se muestran los registros de todos tus servicios de Media CDN:

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

Para filtrar los registros asociados con un proyecto y recurso EdgeCacheService específicos, puedes extender esta consulta:

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

Para hacer coincidir los nombres parciales o usar expresiones regulares, consulta la documentación sobre la sintaxis de registros.

Ejemplo: Identifica errores de caché

Una solicitud de un objeto puede ser un error de caché y provoca un relleno de caché por varios motivos:

  • Un TTL que es demasiado corto
  • Una clave de caché demasiado específica
  • Muy pocas solicitudes para permanecer almacenadas en caché

Para identificar errores de caché, puedes filtrar los registros en el Explorador de registros.

En la siguiente consulta de registro, se muestran las solicitudes que pueden almacenarse en caché (buscadas), pero que requieren un relleno del origen:

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

Si necesitas filtrar por una URL específica, puedes filtrar en el campo httpRequest.requestUrl:

httpRequest.requestUrl = "URL"

Para filtrar parte de la URL, como el componente de la ruta de acceso, usa el operador has:

# `:` 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")

Si deseas obtener más información sobre la sintaxis integral de Logging para la coincidencia y el filtrado, consulta la documentación de consultas avanzadas de registros.

Políticas de retención

Logging admite la configuración de políticas de retención personalizadas, que se incluyen por receptor.

Filtra los registros almacenados

Para filtrar registros antes de almacenarlos (por ejemplo, solo capturar campos pertinentes a fin de reducir el volumen de registro total que necesitas almacenar y consultar), puedes configurar reglas de exclusión de registros, que permiten Debes definir una consulta (filtro) que incluya o excluya campos antes del almacenamiento.

También puedes configurar varios filtros, por ejemplo, si se capturan todas las solicitudes de error de caché o todas las solicitudes de un nombre de host específico, y solo se toma una muestra de todos los registros.

Exporta registros

Puedes exportar registros desde Logging si consultas la documentación de la descripción general de las exportaciones de registros, en el que se abarcan los siguientes temas:

  • Cómo exportar registros a Cloud Storage o BigQuery
  • Exporta a Pub/Sub y consume mediante Cloud Functions o servicios externos
  • Agregación de registros en varios proyectos

Media CDN se integra directamente a Logging.

¿Qué sigue?