Soluciona problemas del lenguaje de consulta de Logging

En este documento, se explican algunos problemas habituales que pueden surgir al utilizar 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 JSON valores nulos.

  • 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, el las siguientes dos consultas se ven 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, a continuación, la primera comparación ilegal debido al operador de substring incorporado (:). La comparación debe tener escrito entre comillas:

    insertId = abc:def  -- ILLEGAL!
    insertId = "abc:def"
    
  • Google Cloud CLI requiere 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 Any tipo de mensaje, el campo value se desvía automáticamente. Por lo tanto, no incluyas value en la consulta.

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

    • Qué debes hacer

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

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