Memecahkan masalah tombol fitur

Panduan ini memberikan langkah-langkah untuk mendiagnosis dan menyelesaikan masalah umum terkait tombol fitur App Lifecycle Manager.

Evaluasi SDK dan runtime

OpenFeature API dirancang agar panggilan evaluasi flag tidak menampilkan pengecualian yang tidak tertangani, melainkan menampilkan nilai default jika terjadi error evaluasi.

Gejala: Flag menampilkan nilai default yang aman

Jika layanan flag tidak dapat dijangkau, penyedia tidak tersedia, atau flag salah dikonfigurasi, SDK akan menampilkan nilai default yang diperlukan yang disediakan dalam kode Anda.

Penyelesaian:

  1. Verifikasi koneksi antara penyedia OpenFeature dan endpoint saasconfig.googleapis.com.
  2. Periksa error autentikasi. Pastikan akun layanan runtime aplikasi Anda memiliki peran roles/saasconfig.viewer.
  3. Pastikan FLAGD_SOURCE_PROVIDER_ID sudah benar.

Gejala: Hasil evaluasi yang tidak terduga

Jika flag tidak menampilkan varian yang diharapkan:

Penyelesaian:

  1. Periksa kondisi CEL dan konteks evaluasi Anda.
  2. Jika atribut yang diperlukan tidak ada dalam konteks selama pemeriksaan kondisi, mesin evaluasi akan melewati aturan spesifik tersebut.
  3. Jika atribut tidak ada selama alokasi berbasis persentase, evaluasi akan menampilkan INVALID_CONTEXT.

Memecahkan masalah sinkronisasi template Berfokus pada Aplikasi dan peluncuran konsol

Jika Anda melakukan aktivasi ke tombol fitur menggunakan template komposit Application Design Center dan konsol Google Cloud , gunakan langkah-langkah berikut untuk menyelesaikan masalah sinkronisasi dan peluncuran template.

Gejala: Jenis unit tidak dibuat setelah menghubungkan template komposit App Design Center

Jika tab Unit kinds di penawaran SaaS Anda tetap kosong setelah Anda menghubungkan template gabungan:

Penyelesaian:

  1. Pastikan setiap template aplikasi standar yang disematkan dan template aplikasi komposit induk telah ditambahkan ke katalog di Application Design Center sebelum mengimpor template komposit ke penawaran SaaS Anda.
  2. Pastikan agen layanan App Lifecycle Manager (service-PROJECT_NUMBER@gcp-sa-saasservicemgmt.) memiliki peran roles/saasservicemgmt.serviceAgent di project Anda.
  3. Periksa halaman detail penawaran SaaS di konsol Google Cloud atau jalankan gcloud beta app-lifecycle-manager saas describe SAAS_OFFERING_ID --location=global untuk memeriksa status sinkronisasi template.

Ganti kode berikut:

  • PROJECT_NUMBER: nomor project Google Cloud Anda.
  • SAAS_OFFERING_ID: ID penawaran SaaS Anda.

Gejala: Peluncuran tanda di konsol tidak mengupdate unit yang dibuat dari template standar

Jika peluncuran flag selesai di konsol Google Cloud , tetapi unit yang dibuat dari template standar tidak menerima konfigurasi flag yang diperbarui:

Penyelesaian:

  1. Pastikan unit tersebut termasuk dalam jenis unit yang ditargetkan, berada di region yang disertakan dalam peluncuran, dan cocok dengan unitFilter yang dikonfigurasi pada jenis peluncuran.
  2. Pastikan FLAGD_SOURCE_PROVIDER_ID di aplikasi Anda cocok dengan jalur resource konfigurasi tombol fitur lengkap unit (projects/PROJECT_ID/locations/LOCATION/featureFlagsConfigs/UNIT_ID).

Ganti kode berikut:

  • PROJECT_ID: Project ID Google Cloud Anda.
  • LOCATION: region unit Anda.
  • UNIT_ID: ID unit Anda.

Memantau peluncuran

Memantau peluncuran tombol fitur melibatkan verifikasi status orkestrasi (apakah peluncuran selesai?) dan responsivitas aplikasi (apakah biner mengambil tombol?).

Status orkestrasi peluncuran

Sistem memantau rasio keberhasilan operasi secara real-time.

Penjedaan otomatis

Untuk mencegah konfigurasi yang salah menjangkau seluruh fleet Anda, sistem akan otomatis menjeda peluncuran jika tingkat kegagalan di suatu lokasi melebihi anggaran error yang dikonfigurasi pada jenis peluncuran (errorBudget.allowedCount atau errorBudget.allowedPercentage, seperti batas 10% per lokasi).

Memeriksa statistik ringkasan

Gunakan perintah describe untuk melihat jumlah kegagalan gabungan dan menentukan apakah peluncuran berstatus PAUSED atau FAILED.

gcloud beta app-lifecycle-manager rollouts describe ROLLOUT_ID --location=global

Memfilter update unit yang gagal

Setelah mengonfirmasi adanya kegagalan, Anda harus menemukan unit tertentu yang tidak mendapatkan update. Gunakan filter ini untuk mengisolasi hanya update flag yang gagal di region tertentu:

gcloud beta app-lifecycle-manager unit-operations list \
    --location=LOCATION \
    --filter="state:UNIT_OPERATION_STATE_FAILED AND flag_update:*"

Mendiagnosis akar masalah

Untuk setiap operasi yang gagal, Anda dapat mengambil pesan error mendetail yang diberikan oleh mesin aktuasi di kolom conditions (message dan reason) dan errorCategory (atau memeriksa stateMessage pada resource peluncuran).

gcloud beta app-lifecycle-manager unit-operations describe OPERATION_ID --location=LOCATION

Ganti kode berikut:

  • ROLLOUT_ID: ID peluncuran.
  • LOCATION: region operasi unit.
  • OPERATION_ID: ID operasi unit.

Konfigurasi unit tidak ada

Bagian ini menjelaskan cara penyematan unit dapat mencegah unit menerima konfigurasi tombol fitur dan cara memulihkan unit.

Memahami penyematan unit

Penyematan akan membekukan unit pada rilis saat ini, sehingga mencegahnya diupdate oleh peluncuran otomatis atau manual. Unit yang disematkan secara eksplisit dikecualikan dari operasi peluncuran hingga periode penyematannya berakhir atau dilepas sematannya secara manual.

Konfigurasi tidak ada dari unit yang disematkan

Skenario kritis terjadi saat unit disematkan selama peluncuran tombol fitur. Penyematan memblokir semua update, yang berarti unit akan melewati operasi FlagUpdate yang diperlukan untuk menerima konfigurasinya.

Gejala: Setelah unit dilepas pinnya dan diupgrade ke biner yang memerlukan tombol fitur, aplikasi gagal melakukan inisialisasi atau memasuki loop percobaan ulang tanpa batas, yang menyebabkan pemeriksaan kesiapan gagal dan container terus dimulai ulang.

Penyebab utama: Saat unit disematkan, peluncuran memperbarui kolom defaultFlagRevisions resource jenis unit induk, tetapi unit yang disematkan melewati operasi FlagUpdate dan tidak menerima konfigurasi aktif.

Perintah diagnostik

Gunakan perintah berikut untuk memeriksa operasi update flag yang gagal dan status unit.

1. Mencantumkan operasi flag yang gagal

Untuk menemukan unit yang melewatkan update, filter operasi unit untuk status UNIT_OPERATION_STATE_FAILED dan jenis flag_update.

gcloud beta app-lifecycle-manager unit-operations list \
    --location="LOCATION" \
    --filter="state:UNIT_OPERATION_STATE_FAILED AND flag_update:*"

2. Memfilter secara khusus untuk peluncuran flag yang gagal

Untuk menentukan update flag yang gagal di seluruh fleet atau untuk unit tertentu, tambahkan kondisi untuk status UNIT_OPERATION_STATE_FAILED.

gcloud beta app-lifecycle-manager unit-operations list \
    --location="LOCATION" \
    --filter="unit:UNIT_ID AND state:UNIT_OPERATION_STATE_FAILED AND flag_update:*"

3. Memeriksa alasan kegagalan

Gunakan perintah describe untuk memeriksa kolom conditions (message dan reason) serta errorCategory.

gcloud beta app-lifecycle-manager unit-operations describe "OPERATION_ID" --location="LOCATION"

4. Periksa kondisi unit

Anda juga dapat memeriksa status unit saat ini secara langsung. Jika peluncuran flag gagal atau operasi terakhir menghasilkan error, daftar conditions unit akan berisi entri dengan type: TYPE_OPERATION_ERROR.

gcloud beta app-lifecycle-manager units describe "UNIT_ID" --location="LOCATION"

Ganti kode berikut:

  • LOCATION: region unit atau operasi unit.
  • UNIT_ID: ID unit.
  • OPERATION_ID: ID operasi unit.

Mitigasi manual

Untuk memulihkan unit yang disematkan yang melewatkan update flag, terapkan revisi flag default dari jenis unit induknya.

Menerapkan revisi flag default jenis unit

Jika konfigurasi unit hilang karena disematkan selama satu atau beberapa peluncuran, Anda dapat memulihkannya dengan mereset unit secara manual ke dasar pengukuran saat ini yang ditentukan dalam jenis unitnya.

  1. Lepas pin unit (jika disematkan):

    gcloud beta app-lifecycle-manager units update "UNIT_ID" \
        --location="LOCATION" \
        --maintenance-pinned-until-time=""
    
  2. Ambil revisi default dari jenis unit induk:

    gcloud beta app-lifecycle-manager unit-kinds describe "UNIT_KIND_ID" \
        --location="LOCATION" \
        --format="value(defaultFlagRevisions.join(','))"
    
  3. Buat FlagRelease baru yang berisi revisi tersebut:

    gcloud beta app-lifecycle-manager flags releases create "recovery-release-1" \
        --location="LOCATION" \
        --unit-kind="UNIT_KIND_ID" \
        --revisions="REVISIONS"
    
  4. Mulai operasi unit FlagUpdate secara manual untuk menerapkan rilis pemulihan:

    gcloud beta app-lifecycle-manager unit-operations create "recovery-op" \
        --unit="UNIT_ID" \
        --flag-update="projects/PROJECT_ID/locations/LOCATION/flagReleases/recovery-release-1" \
        --location="LOCATION"
    

Ganti kode berikut:

  • UNIT_ID: ID unit yang akan dipulihkan.
  • LOCATION: region unit.
  • UNIT_KIND_ID: ID jenis unit induk.
  • REVISIONS: daftar nama resource revisi flag default yang dipisahkan koma yang ditampilkan di langkah 2.
  • PROJECT_ID: Project ID Google Cloud Anda.