Memecahkan masalah upgrade bucket untuk menggunakan Observability Analytics

Dengan mengupgrade bucket log untuk menggunakan Observability Analytics, Anda dapat menjalankan kueri SQL untuk menganalisis data log yang disimpan di bucket tersebut. Jika upgrade bucket log gagal atau terhenti, Anda dapat menggunakan dokumen ini untuk mendiagnosis dan menyelesaikan error validasi sinkron, error penyediaan asinkron, dan operasi yang diblokir. Untuk mengetahui informasi tentang cara mengupgrade bucket log, lihat Mengupgrade bucket untuk menggunakan Observability Analytics.

Tentang proses upgrade

Cloud Logging menggunakan proses dua langkah saat Anda mengeluarkan perintah untuk mengupgrade bucket log agar dapat menggunakan Observability Analytics:

  1. Validasi sinkron: Logging memvalidasi parameter perintah. Jika validasi gagal, perintah akan langsung menampilkan error.
  2. Penyediaan asinkron: Jika validasi berhasil, Logging akan memulai operasi yang berjalan lama dan biasanya selesai dalam waktu 10 menit.

Upgrade bucket log adalah operasi yang diaudit. Untuk memeriksa status operasi yang berjalan lama atau menemukan detail error, Anda dapat memeriksa operasi menggunakan metode Operations.GetOperation, atau Anda dapat membuat kueri log audit.

Status bucket log selama upgrade

Jika validasi sinkron permintaan upgrade berhasil, Logging akan mengubah status bucket log dari ACTIVE menjadi UPDATING dan memulai operasi yang berjalan lama. Setelah operasi selesai, status bucket log akan kembali ke ACTIVE.

Anda dapat menentukan status bucket log saat ini dengan menjalankan perintah gcloud logging buckets describe:

gcloud logging buckets describe LOG_BUCKET_ID \
  --location=LOCATION_ID \
  --project=PROJECT_ID

Sebelum Anda menjalankan perintah, lakukan penggantian berikut:

  • PROJECT_ID: ID project Anda.
  • LOCATION_ID: Lokasi bucket Anda.
  • LOG_BUCKET_ID: ID bucket Anda.

Kolom lifecycleState dalam respons menunjukkan status bucket:

description: Default bucket
lifecycleState: ACTIVE
name: projects/PROJECT_ID/locations/LOCATION_ID/buckets/LOG_BUCKET_ID
retentionDays: 30

Di konsol Google Cloud , saat bucket log dalam status UPDATING:

  • Di halaman Logs Storage, kolom Observability Analytics available menampilkan Upgrading… saat operasi yang berjalan lama aktif (atau Not eligible for upgrade jika konsol tidak dapat mengambil status operasi).
  • Di panel Edit bucket dan panel Upgrade log bucket, opsi untuk mengupgrade bucket dinonaktifkan dan tooltip mencantumkan There are no pending updates sebagai persyaratan yang tidak terpenuhi.

Pertimbangan perimeter Kontrol Layanan VPC

Upgrade bucket log di dalam perimeter Kontrol Layanan VPC dapat gagal karena API diblokir oleh perimeter atau karena konfigurasi lintas project.

API yang harus diizinkan oleh perimeter

Untuk mengupgrade bucket log yang berada di dalam perimeter Kontrol Layanan VPC, perimeter tidak boleh membatasi layanan berikut:

  • logging.googleapis.com
  • cloudkms.googleapis.com: Diperlukan untuk mengupgrade bucket log yang menggunakan kunci enkripsi yang dikelola pelanggan (CMEK).

Membatasi layanan ini akan menyebabkan perilaku berikut:

  • logging.googleapis.com restricted: Perintah upgrade akan langsung gagal dengan error PERMISSION_DENIED, dan bucket log Anda tetap dalam status ACTIVE.

    Penyelesaian: Update perimeter untuk mengizinkan API yang tercantum di awal bagian ini, lalu coba lagi perintah tersebut.

  • cloudkms.googleapis.com dibatasi: Untuk bucket log yang dilindungi CMEK, operasi yang berjalan lama akan gagal dengan error INTERNAL dan bucket log Anda akan kembali ke status ACTIVE.

    Penyelesaian: Update perimeter untuk mengizinkan API yang tercantum di awal bagian ini, lalu coba lagi perintah tersebut.

Konfigurasi CMEK lintas perimeter

Anda tidak dapat menggunakan aturan ingress atau egress berbasis identitas untuk memberikan akses lintas perimeter ke kunci Cloud Key Management Service jika bucket log dan kunci Cloud KMS Anda berada di perimeter Kontrol Layanan VPC yang berbeda.

Untuk konfigurasi ini, jika aturan ingress Anda hanya menentukan identitas akun layanan Logging, hal berikut akan terjadi:

  • Penyediaan asinkron gagal dengan error INTERNAL dan bucket log Anda kembali ke status ACTIVE.
  • Log audit kebijakan untuk project Cloud KMS mencatat kegagalan tersebut. Log audit ini menunjukkan bahwa metode google.cloud.kms.v1.KeyManagementService.Encrypt gagal dengan pelanggaran traffic masuk NO_MATCHING_ACCESS_LEVEL dan menunjukkan bahwa metode tersebut ditujukan untuk akun layanan enkripsi BigQuery.

Penyelesaian: Dalam aturan ingress yang mengizinkan akses ke perimeter Cloud KMS, tetapkan identityType ke ANY_IDENTITY dan tentukan project yang berisi bucket log sebagai resource sumber:

- ingressFrom:
    identityType: ANY_IDENTITY
    sources:
    - resource: projects/PROJECT_NUMBER
  ingressTo:
    operations:
    - serviceName: cloudkms.googleapis.com
      methodSelectors:
      - method: '*'
    resources:
    - projects/KMS_PROJECT_NUMBER

Pada contoh sebelumnya, ganti kode berikut:

  • PROJECT_NUMBER: Nomor project dari project yang berisi bucket log.
  • KMS_PROJECT_NUMBER: Nomor project dari project yang berisi kunci Cloud KMS.

Jika Anda juga menentukan aturan egress, aturan tersebut juga harus menetapkan identityType: ANY_IDENTITY.

Membuat kueri log audit untuk mendapatkan informasi kegagalan

Kueri di bagian ini dapat membantu Anda menemukan entri log yang melaporkan kegagalan saat mengupdate atau mengupgrade bucket log. Kueri ini digunakan dengan Logs Explorer.

Di konsol Google Cloud , buka halaman Logs Explorer:

Buka Logs Explorer

Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Logging.

Membuat kueri untuk semua update atau upgrade bucket yang gagal dalam sebuah project

log_id("cloudaudit.googleapis.com/activity")
protoPayload.serviceName="logging.googleapis.com"
(protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucket" OR
 protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucketAsync")
severity=ERROR

Jika Anda menggunakan konsol Google Cloud untuk mengupgrade bucket log agar menggunakan Observability Analytics dan membuat set data BigQuery tertaut, gunakan kueri berikut:

log_id("cloudaudit.googleapis.com/activity")
(protoPayload.serviceName="logging.googleapis.com" OR
 protoPayload.serviceName="bigquery.googleapis.com")
(protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucket" OR
 protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucketAsync" OR
 protoPayload.methodName="google.cloud.bigquery.v2.DatasetService.InsertDataset")
severity=ERROR

Hasil kueri sebelumnya menyertakan entri log yang menunjukkan bahwa pembuatan set data BigQuery tertaut gagal. Pesan error dapat membantu Anda mengatasi penyebab kegagalan.

Membuat kueri untuk update atau upgrade bucket yang gagal untuk bucket tertentu

Sebelum menggunakan kueri berikut, lakukan penggantian berikut:

  • PROJECT_ID: ID project Anda.
  • LOCATION_ID: Lokasi bucket Anda.
  • LOG_BUCKET_ID: ID bucket Anda.
log_id("cloudaudit.googleapis.com/activity")
protoPayload.serviceName="logging.googleapis.com"
(protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucket" OR
 protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucketAsync")
protoPayload.resourceName="projects/PROJECT_ID/locations/LOCATION_ID/buckets/LOG_BUCKET_ID"
severity=ERROR

Membuat kueri untuk kegagalan operasi yang berjalan lama

log_id("cloudaudit.googleapis.com/activity")
protoPayload.serviceName="logging.googleapis.com"
protoPayload.methodName="google.logging.v2.ConfigServiceV2.UpdateBucketAsync"
operation.last=true
severity=ERROR

INVALID_ARGUMENT (3)

Pesan error yang diberikan dengan kode error INVALID_ARGUMENT (3) berisi informasi yang cukup bagi Anda untuk menyelesaikan kegagalan. Oleh karena itu, bagian ini tidak mencantumkan semua kemungkinan pesan error.

Masalah nama resource

Untuk menyelesaikan masalah terkait nama resource, teruskan nama resource bucket yang valid dalam format projects/PROJECT_ID/locations/LOCATION_ID/buckets/LOG_BUCKET_ID.

Pastikan panjang nama resource tidak melebihi batas panjang.

Masalah update mask

Pesan error yang berisi teks update_mask atau Update mask menunjukkan nilai yang tidak ada atau salah format.

Untuk mengatasi masalah ini, dalam perintah API, tentukan update_mask dan tetapkan nilainya ke "analytics_enabled".

Masalah kelayakan bucket log

  • Anda tidak dapat mengupgrade bucket log _Default yang terkunci atau bucket kustom yang terkunci. Anda dapat mengupgrade bucket _Required saat dikunci.

    Jika bucket log dikunci, pesan errornya adalah "Bucket is not eligible for an upgrade to enable analytics".

    Untuk mengatasi kegagalan ini, buat bucket baru yang mendukung analisis dan rutekan log ke bucket tersebut.

  • Anda tidak dapat mengupgrade bucket log bersamaan dengan membuat perubahan lain pada bucket. Misalnya, Anda tidak dapat mengupgrade bucket log dan memperbarui deskripsi bucket.

    Untuk mengatasi kegagalan ini, kirim permintaan UpdateBucket atau UpdateBucketAsync terpisah dengan hanya analytics_enabled di update_mask, dan perbarui kolom bucket log lainnya dalam permintaan terpisah.

  • Anda tidak dapat mengupgrade bucket log di organisasi, folder, atau akun penagihan. Anda hanya dapat mengupgrade bucket log yang induknya adalah project Google Cloud .

  • Anda tidak dapat mengupgrade bucket log yang telah diupgrade atau sedang diupgrade.

    Gunakan GetBucket atau ListOperations untuk menentukan apakah upgrade telah selesai atau sedang berlangsung.

Masalah kunci Cloud KMS

Pesan error:

  • "Not a valid key reference (wrong type): 'KMS_KEY_NAME'"
  • "Name "KMS_KEY_NAME" is missing the COMPONENT component. Expected the form projects/[PROJECT_ID]/locations/[ID]/keyRings/[ID]/cryptoKeys/[ID]"

Penyelesaian: Perbarui cmek_settings.kms_key_name bucket log ke nama resource CryptoKey Cloud KMS yang valid sebelum mengupgrade bucket. Anda harus memperbarui nama resource, bukan versi kunci, CryptoKeyVersion.

Pesan argumen tidak valid

Jika Anda melihat pesan "Request contains an invalid argument.", coba langkah berikut untuk bucket log yang mengaktifkan CMEK:

  • Pastikan akun layanan Logging yang terkait dengan konfigurasi CMEK bucket diinisialisasi.
  • Pastikan bucket memiliki periode retensi positif.

Untuk menemukan nama akun layanan, jalankan perintah berikut setelah Anda memperbarui bucket log, lokasi, dan project ID:

gcloud logging buckets describe LOG_BUCKET_ID --location=LOCATION_ID --project=PROJECT_ID

Akun layanan mungkin berada dalam project, folder, atau organisasi.

DEADLINE_EXCEEDED (4)

Gunakan UpdateBucketAsync dan lakukan polling pada operasi yang berjalan lama yang ditampilkan menggunakan metode Operations.GetOperation, atau panggil GetBucket setelah upgrade latar belakang selesai.

NOT_FOUND (5)

Untuk mengatasi kegagalan ini, coba langkah berikut:

  • Pastikan project ID atau nomor project sudah benar dan project tersebut aktif. Jika project menunggu penghapusan, pulihkan project terlebih dahulu.
  • Pastikan lokasi yang ditentukan didukung oleh Logging.
  • Pastikan ID bucket log dan lokasi ada dalam project dan bucket target bukan _CloudTrace.

PERMISSION_DENIED (7)

Error izin ditolak menunjukkan bahwa tindakan yang diminta tidak diizinkan.

Izin pengguna tidak ada

Untuk mengupgrade bucket log, pastikan pemanggil memiliki peran Identity and Access Management (IAM) yang menyertakan izin logging.buckets.update (seperti roles/logging.configWriter atau roles/logging.admin), dan pastikan tidak ada kebijakan organisasi kustom yang memblokir update.

Batasan kebijakan organisasi

Untuk mengatasi pesan error "Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: [ID]", pastikan perimeter Kontrol Layanan VPC tidak membatasi layanan logging.googleapis.com. Untuk mengetahui informasi selengkapnya, lihat Pertimbangan perimeter Kontrol Layanan VPC.

Masalah endpoint regional

Untuk mengatasi error izin ditolak saat endpoint regional ditentukan, kirim permintaan ke endpoint global (logging.googleapis.com) atau ke endpoint regional yang cocok dengan lokasi bucket log.

RESOURCE_EXHAUSTED (8)

Untuk mengatasi kegagalan ini, tunggu hingga operasi penyediaan yang sedang berlangsung selesai dan coba lagi dengan backoff eksponensial.

FAILED_PRECONDITION (9)

Untuk mengatasi kegagalan ini, coba langkah berikut:

  • Pastikan bucket log berada dalam status ACTIVE. Anda tidak dapat mengupgrade bucket log yang sedang dihapus atau sedang menjalani operasi update atau penyediaan.

    Untuk mengetahui informasi tentang cara menentukan status bucket log, lihat Status bucket log selama upgrade.

  • Anda tidak dapat mengupgrade bucket log yang terkunci.

  • Pesan umum "Precondition check failed." menunjukkan bahwa status bucket bukan ACTIVE. Tunggu hingga operasi yang sedang berlangsung selesai, lalu coba lagi upgrade.

INTERNAL (13)

Pesan error:

  • Operasi yang berjalan lama (Operations.GetOperation): "Failed to create analytics enabled bucket."
  • Cloud Audit Logs dan UpdateBucket sinkron: "Internal error encountered."

Penyelesaian: Coba langkah berikut:

  • Untuk bucket log yang mengaktifkan CMEK, pastikan kunci Cloud KMS diaktifkan, akun layanan Logging yang terkait dengan konfigurasi CMEK bucket memiliki peran roles/cloudkms.cryptoKeyEncrypterDecrypter pada kunci, kunci dapat diakses oleh BigQuery, dan tidak ada kebijakan organisasi atau perimeter Kontrol Layanan VPC yang memblokir akses Cloud KMS.

    Untuk menemukan nama akun layanan, jalankan perintah berikut:

    gcloud logging buckets describe LOG_BUCKET_ID --location=LOCATION_ID --project=PROJECT_ID
    

    Akun layanan mungkin berada dalam project, folder, atau organisasi.

  • Periksa tampilan log yang ada di bucket (logging.views.list) untuk memastikan bahwa filternya valid, dan coba lagi upgrade bucket.

  • Pastikan bucket log belum dihapus (DELETE_REQUESTED) dan tidak ada tindakan administratif yang bertentangan yang terjadi pada bucket, lalu coba lagi upgrade.

  • Coba lagi upgrade bucket log setelah set data penyimpanan BigQuery sementara atau error pembuatan indeks penelusuran teratasi, atau setelah ketersediaan layanan BigQuery, Cloud KMS, atau penyediaan downstream dipulihkan. Jika kegagalan berlanjut, hubungi Cloud Customer Care.

UNAVAILABLE (14)

Jika Anda melihat pesan "The service is currently unavailable.", coba lagi permintaan UpdateBucketAsync dengan backoff eksponensial.