Solucionar problemas del lenguaje de las consultas de Logging

En este documento se explican los problemas habituales que pueden surgir al usar el lenguaje de consulta de Logging.

Problemas de sintaxis

Si tienes problemas con las expresiones de tus consultas, comprueba lo siguiente:

  • Tu consulta cumple las reglas de sintaxis, con paréntesis y comillas coincidentes.

  • Los nombres de los campos de entrada de registro están escritos correctamente.

  • Las operaciones booleanas se escriben en mayúsculas (AND, OR y NOT).

  • Asegúrate de usar NULL_VALUE para representar los valores nulos de JSON.

  • Las expresiones booleanas como restricciones globales o como el lado derecho de las comparaciones deben incluirse entre paréntesis para mayor claridad. Por ejemplo, las dos consultas siguientes parecen iguales, pero no lo son:

    insertId = "ABC-1" OR "ABC-2"  -- ERROR!?
    insertId = ("ABC-1" OR "ABC-2")
    
  • El texto sin comillas no debe contener caracteres especiales. En caso de duda, añade comillas dobles. Por ejemplo, en el siguiente caso, la primera comparación no es válida porque se ha insertado el operador de subcadena (:). La comparación debe escribirse entre comillas:

    insertId = abc:def  -- ILLEGAL!
    insertId = "abc:def"
    
  • Google Cloud CLI requiere que la consulta esté entre comillas dobles. Para usar comillas dobles para escapar caracteres especiales con el comando gcloud logging, encierra toda la consulta entre comillas simples:

    gcloud logging read 'resource.type=gce_instance AND jsonPayload.message="Stopped Unattended Upgrades Shutdown."'
    gcloud logging read 'timestamp>="2020-06-17T21:00:00Z"'
    

  • Cuando filtras por un campo asociado al tipo de mensaje Any, se recorre automáticamente el campo value. Por lo tanto, no incluyas value en la consulta.

    Por ejemplo, el campo Status de un mensaje AuditLog tiene un campo details de tipo google.protobuf.Any. Para consultar el campo details, omite el campo value al especificar el filtro:

    • Qué debes hacer

      protoPayload.status.details.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"
      
    • Qué no debes hacer

      protoPayload.status.details.value.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"