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 kutip yang cocok.

  • Nama kolom entri log Anda dieja dengan benar.

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

  • Pastikan Anda menggunakan NULL_VALUE untuk merepresentasikan nilai null JSON.

  • Ekspresi boolean sebagai batasan global atau sebagai sisi kanan perbandingan harus diapit tanda kurung untuk kejelasan. Misalnya, dua kueri berikut terlihat sama, tetapi tidak:

    insertId = "ABC-1" OR "ABC-2"  -- ERROR!?
    insertId = ("ABC-1" OR "ABC-2")
    
  • Teks tanpa tanda kutip tidak boleh berisi karakter khusus apa pun. Jika ragu, tambahkan tanda kutip ganda. Misalnya, dalam contoh berikut, perbandingan pertama tidak sah karena operator substring tersemat (:). Perbandingan harus ditulis dengan tanda kutip:

    insertId = abc:def  -- ILLEGAL!
    insertId = "abc:def"
    
  • Google Cloud CLI mengharuskan kueri 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 pada 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.*"