Soluciona problemas del lenguaje de consulta de Logging

En este documento, se explican los problemas comunes que puedes encontrar cuando usas el lenguaje de consulta de Logging.

Problemas de sintaxis

Si tienes problemas con las expresiones de tus consultas avanzadas, verifica que se cumplan las siguientes cuestiones:

  • Tu consulta obedece a las reglas de sintaxis; los paréntesis y las comillas coinciden.

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

  • Las operaciones booleanas están en letras mayúsculas (AND, OR, NOT).

  • Asegúrate de usar [NULL_VALUE][json-null] para representar valores nulos de JSON.

  • Las expresiones booleanas, como las restricciones globales o como el lado derecho de las comparaciones están entre paréntesis para mayor claridad. Por ejemplo, las dos consultas siguientes parecen ser 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 ningún carácter especial. Si tienes dudas, agrega comillas dobles. Por ejemplo, la primera comparación a continuación es ilegal debido al operador de substring incorporado (:). 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. Si quieres usar comillas dobles para escapar los caracteres especiales mediante el comando gcloud logging, en su lugar, 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 un campo asociado con el tipo de mensaje Any, el campo value se desvía automáticamente. Por lo tanto, no incluyas value en la consulta.

    Por ejemplo, el campo Status en un mensaje AuditLog tiene un campo details que es del tipo google.protobuf.Any. Para consultar el campo details, omite el campo value cuando especifiques el filtro:

    • Qué debes hacer

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

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