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 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, en el siguiente, 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"
La CLI de Google Cloud 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 en un campo asociado al tipo de mensaje
Any
, el campovalue
se recorre automáticamente. Por lo tanto, no incluyasvalue
en la consulta.Por ejemplo, el campo
Status
en un mensajeAuditLog
tiene un campodetails
que es del tipogoogle.protobuf.Any
. Para consultar el campodetails
, omite el campovalue
cuando especifiques el filtro:Sugerencia
protoPayload.status.details.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"
Qué no debes hacer
protoPayload.status.details.value.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"