En este documento, se explican los problemas habituales 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 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, 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 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 campovalue
se desvía automáticamente. Por lo tanto, no incluyasvalue
en la consulta.Por ejemplo, el
Status
en un campo AuditLog tiene un campodetails
del 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.*"