Memecahkan masalah bahasa kueri Logging

Dokumen ini menjelaskan masalah umum yang mungkin Anda alami saat menggunakan bahasa kueri Logging.

Masalah sintaksis

Jika Anda mengalami masalah dengan ekspresi kueri, periksa hal berikut:

  • Kueri Anda mematuhi aturan sintaksis, dengan tanda kurung dan tanda petik yang cocok.

  • Nama kolom entri log Anda sudah dieja dengan benar.

  • Operasi Boolean menggunakan huruf besar (AND, OR, NOT).

  • Pastikan Anda menggunakan [NULL_VALUE][json-null] untuk merepresentasikan nilai null JSON.

  • Ekspresi Boolean sebagai batasan global atau sebagai sisi kanan perbandingan harus diberi tanda kurung agar lebih jelas. Misalnya, dua kueri di bawah ini terlihat sama, tetapi tidak:

    insertId = "ABC-1" OR "ABC-2"  -- ERROR!?
    insertId = ("ABC-1" OR "ABC-2")
    
  • Teks yang tidak dikutip tidak boleh berisi karakter khusus. Jika ragu, tambahkan tanda kutip ganda. Misalnya, perbandingan pertama di bawah ini ilegal karena operator substring yang disematkan (:). Perbandingannya harus ditulis dengan tanda kutip:

    insertId = abc:def  -- ILLEGAL!
    insertId = "abc:def"
    
  • Google Cloud CLI mengharuskan kueri ditulis dalam tanda kutip ganda. Untuk menggunakan tanda kutip ganda guna meng-escape karakter khusus menggunakan perintah gcloud logging, gabungkan seluruh kueri dengan tanda kutip tunggal:

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

  • Saat Anda memfilter kolom yang terkait dengan jenis pesan Any, kolom value akan otomatis dilalui. Oleh karena itu, jangan sertakan value dalam kueri.

    Misalnya, kolom Status dalam pesan AuditLog memiliki kolom details yang berjenis google.protobuf.Any. Untuk membuat kueri kolom details, hapus kolom value saat menentukan filter:

    • Anjuran

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

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