Resolver problemas na linguagem de consulta do Logging

Neste documento, explicamos problemas comuns que podem ser encontrados ao usar a linguagem de consulta do Logging.

Problemas de sintaxe

Se você tiver problemas com as expressões de suas consultas, verifique o seguinte:

  • Sua consulta obedece às regras de sintaxe, com parênteses correspondentes e aspas.

  • Os nomes dos campos de entrada de registro estão escritos corretamente.

  • As operações booleanas estão em maiúsculas (AND, OR, NOT).

  • Verifique se você está usando [NULL_VALUE][json-null] para representar valores nulos JSON.

  • As expressões booleanas como restrições globais ou como o lado direito das comparações precisam estar entre parênteses para maior clareza. Por exemplo, as duas consultas abaixo têm a mesma aparência, mas não são:

    insertId = "ABC-1" OR "ABC-2"  -- ERROR!?
    insertId = ("ABC-1" OR "ABC-2")
    
  • Com texto sem aspas, não pode haver nenhum caractere especial. Em caso de dúvida, adicione aspas duplas. Por exemplo, a primeira comparação abaixo é ilegal por causa do operador de substring incorporado (:). A comparação precisa ser escrita com aspas:

    insertId = abc:def  -- ILLEGAL!
    insertId = "abc:def"
    
  • A Google Cloud CLI exige que a consulta esteja entre aspas duplas. Para usar aspas duplas com a finalidade de fazer o escape de caracteres especiais usando o comando gcloud logging, agrupe a consulta inteira com aspas simples:

    gcloud logging read 'resource.type=gce_instance AND jsonPayload.message="Stopped Unattended Upgrades Shutdown."'
    gcloud logging read 'timestamp>="2020-06-17T21:00:00Z"'
    

  • Quando você está filtrando em um campo associado ao tipo de mensagem Any, o campo value é percorrido automaticamente. Portanto, não inclua value na consulta.

    Por exemplo, o campo Status em uma mensagem AuditLog tem um campo details do tipo google.protobuf.Any. Para consultar o campo details, omita o campo value ao especificar o filtro:

    • O que fazer

      protoPayload.status.details.conditionNotMet.userVisibleMessage =~ "Specified reservation.*"
      
    • O que não fazer

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