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
para representar los 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 siguientes dos consultas 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, en el siguiente ejemplo, la primera comparació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
, se recorre automáticamente el campovalue
. Por lo tanto, no incluyasvalue
en la consulta.Por ejemplo, el campo
Status
en un mensajeAuditLog
tiene un campodetails
que es de tipogoogle.protobuf.Any
. Para consultar el campodetails
, omite el campovalue
cuando especifiques el filtro:Qué hacer
protoPayload.status.details.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"
Qué no debes hacer
protoPayload.status.details.value.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"