Memecahkan masalah tombol fitur

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

Evaluasi SDK dan Runtime

OpenFeature API dirancang untuk keamanan maksimum dan tidak akan pernah menampilkan error yang menyebabkan aplikasi Anda error.

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 Anda dan endpoint saasconfig.googleapis.com.
  2. Periksa error autentikasi. Pastikan akun layanan memiliki roles/saasconfig.viewer.
  3. Pastikan FLAGD_SOURCE_PROVIDER_ID sudah benar.

Gejala: Hasil evaluasi yang tidak diharapkan

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 tertentu tersebut.
  3. Jika atribut tidak ada selama alokasi berbasis persentase, evaluasi akan menampilkan INVALID_CONTEXT.

Memantau Peluncuran

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

Status orkestrasi peluncuran

Sistem memantau tingkat keberhasilan operasi secara real-time.

Penjedaan otomatis

Untuk mencegah konfigurasi "rusak" menjangkau seluruh fleet Anda, sistem akan otomatis menjeda peluncuran jika tingkat kegagalan melebihi Anggaran Error (default 10% per lokasi).

Memeriksa statistik ringkasan

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

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

Memfilter update unit yang gagal

Setelah mengonfirmasi bahwa kegagalan ada, Anda harus menemukan unit tertentu yang tidak mendapatkan update. Gunakan filter ini untuk mengisolasi hanya update flag yang gagal di wilayah 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 disediakan oleh mesin aktuasi. Baca kolom state_message.

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

Konfigurasi Unit Tidak Ada

Memahami Penyematan Unit

Penyematan 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 unit tersebut dilepas sematannya secara manual.

Konfigurasi Tidak Ada dari Unit yang Disematkan

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

Gejala: Setelah unit dilepas sematannya dan diupgrade ke biner yang memerlukan flag fitur, aplikasi gagal diinisialisasi atau memasuki loop percobaan ulang tanpa batas, yang menyebabkan probe kesiapan gagal dan container terus dimulai ulang.

Akar Masalah: default_flag_revisions UnitKind tidak diupdate saat unit disematkan, sehingga unit tidak memiliki konfigurasi aktif.

Perintah Diagnostik

1. Mencantumkan Operasi Flag yang Gagal

Untuk menemukan unit yang tidak mendapatkan 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 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.

# Find all failed operations for a specific unit
gcloud beta app-lifecycle-manager unit-operations list \
    --location="LOCATION" \
    --filter="unit:UNIT_ID AND state:UNIT_OPERATION_STATE_FAILED"

3. Memeriksa Alasan Kegagalan

Gunakan perintah describe untuk membaca state_message.

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

4. Memeriksa Kondisi Unit

Anda juga dapat memeriksa status unit saat ini secara langsung. Jika peluncuran flag saat ini gagal atau operasi terakhir menghasilkan error, hal ini akan tercermin dalam status. Kondisi dengan jenis operationError.

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

Mitigasi Manual

Menerapkan Revisi Flag Default UnitKind

Jika unit tidak memiliki konfigurasinya karena disematkan selama satu atau beberapa peluncuran, Anda dapat memulihkannya dengan mereset unit secara manual ke baseline saat ini yang ditentukan dalam UnitKind-nya.

  1. Lepas sematan unit (jika disematkan).
  2. Ambil revisi default dari UnitKind induk.
  3. Buat FlagRelease baru yang berisi revisi tersebut.
  4. Mulai operasi unit FlagUpdate secara manual untuk menerapkan rilis pemulihan.
# 1. Unpin
gcloud beta app-lifecycle-manager units update "UNIT_ID" \
    --location="LOCATION" \
    --maintenance-pinned-until-time=""

# 2. Retrieve default revisions
gcloud beta app-lifecycle-manager unit-kinds describe "UNIT_KIND_ID" \
    --location="global" \
    --format="value(defaultFlagRevisions)"

# 3. Create recovery release
gcloud beta app-lifecycle-manager flags releases create "recovery-release-1" \
    --location="global" \
    --unit-kind="UNIT_KIND_ID" \
    --revisions="REVISIONS"

# 4. Initiate manual update
gcloud beta app-lifecycle-manager unit-operations create "recovery-op" \
    --unit="UNIT_ID" \
    --flag-release="recovery-release-1" \
    --location="global"