In diesem Leitfaden finden Sie Schritte zur Diagnose und Behebung häufiger Probleme mit App Lifecycle Manager-Funktions-Flags.
SDK- und Laufzeitbewertung
Die OpenFeature API ist auf maximale Sicherheit ausgelegt und löst niemals einen Fehler aus, der Ihre Anwendung zum Absturz bringt.
Symptom: Flag gibt sicheren Standardwert zurück
Wenn der Flag-Dienst nicht erreichbar ist, der Anbieter nicht verfügbar ist oder das Flag falsch konfiguriert ist, gibt das SDK den erforderlichen Standardwert zurück, der in Ihrem Code angegeben ist.
Lösung:
- Prüfen Sie die Verbindung zwischen Ihrem OpenFeature-Anbieter und dem
saasconfig.googleapis.com-Endpunkt. - Auf Authentifizierungsfehler prüfen. Prüfen Sie, ob das Dienstkonto
roles/saasconfig.viewerhat. - Prüfen Sie, ob
FLAGD_SOURCE_PROVIDER_IDkorrekt ist.
Symptom: Unerwartete Bewertungsergebnisse
Wenn ein Flag nicht die erwartete Variante zurückgibt:
Lösung:
- Überprüfen Sie die Bedingungen für die CEL und den Kontext der Bewertung.
- Wenn während einer Bedingungsprüfung ein erforderliches Attribut im Kontext fehlt, überspringt die Auswertungs-Engine die entsprechende Regel.
- Wenn bei einer prozentualen Zuweisung ein Attribut fehlt, wird
INVALID_CONTEXTzurückgegeben.
Rollouts überwachen
Beim Monitoring eines Funktions-Flag-Rollouts müssen sowohl der Orchestrierungsstatus (wurde der Rollout abgeschlossen?) als auch die Anwendungsintegrität (hat das Binärprogramm das Flag übernommen?) geprüft werden.
Status der Roll-out-Orchestrierung
Das System überwacht die Erfolgsrate von Vorgängen in Echtzeit.
Automatisches Pausieren
Damit eine „fehlerhafte“ Konfiguration nicht auf alle Geräte übertragen wird, wird die Bereitstellung automatisch pausiert, wenn die Fehlerrate das Fehlerbudget überschreitet (standardmäßig 10% pro Standort).
Zusammenfassende Statistiken ansehen
Mit dem Befehl describe können Sie die Gesamtzahl der Fehler aufrufen und feststellen, ob das Roll-out PAUSED oder FAILED ist.
gcloud beta app-lifecycle-manager rollouts describe ROLLOUT_ID --location=global
Fehlgeschlagene Geräte-Updates filtern
Sobald Sie bestätigt haben, dass Fehler vorliegen, müssen Sie die spezifischen Einheiten finden, bei denen das Update nicht durchgeführt wurde. Mit diesem Filter können Sie nur die fehlgeschlagenen Flag-Aktualisierungen in einer bestimmten Region herausfiltern:
gcloud beta app-lifecycle-manager unit-operations list \
--location=LOCATION \
--filter="state:UNIT_OPERATION_STATE_FAILED AND flag_update:*"
Ursache ermitteln
Für jeden fehlgeschlagenen Vorgang können Sie eine detaillierte Fehlermeldung der Ausführungs-Engine abrufen. Lesen Sie das Feld state_message.
gcloud beta app-lifecycle-manager unit-operations describe OPERATION_ID --location=LOCATION
Fehlende Konfigurationen für Einheiten
Einheiten anpinnen
Durch das Anpinnen wird eine Einheit auf dem aktuellen Release eingefroren. Sie wird dann nicht mehr durch automatische oder manuelle Roll-outs aktualisiert. Eine angepinnte Einheit wird explizit von Rollout-Vorgängen ausgeschlossen, bis der Zeitraum für das Anpinnen abläuft oder sie manuell entfernt wird.
Fehlende Konfiguration in angepinnten Einheiten
Ein kritischer Fall tritt ein, wenn eine Einheit während der Einführung eines Funktions-Flags angepinnt wird. Durch das Anpinnen werden alle Updates blockiert. Das bedeutet, dass das Gerät den FlagUpdate-Vorgang überspringt, der zum Empfangen der Konfiguration erforderlich ist.
Symptom:Nachdem das Gerät entkoppelt und auf eine Binärdatei aktualisiert wurde, für die Feature-Flags erforderlich sind, kann die Anwendung nicht initialisiert werden oder gerät in eine Endlosschleife mit Wiederholungsversuchen. Dies führt zu fehlgeschlagenen Bereitschaftsprüfungen und kontinuierlichen Containerneustarts.
Hauptursache:Die default_flag_revisions von UnitKind wurden nicht aktualisiert, während die Einheit angepinnt war. Daher hat die Einheit keine aktive Konfiguration.
Diagnosebefehle
1. Fehlgeschlagene Meldevorgänge auflisten
Wenn Sie Einheiten finden möchten, die nicht aktualisiert wurden, filtern Sie die Einheitenoperationen nach dem Status UNIT_OPERATION_STATE_FAILED und dem Typ flag_update.
gcloud beta app-lifecycle-manager unit-operations list \
--location="LOCATION" \
--filter="state:UNIT_OPERATION_STATE_FAILED AND flag_update:*"
2. Nach fehlgeschlagenen Flag-Roll-outs filtern
Wenn Sie fehlgeschlagene Flag-Updates in Ihrer Flotte oder für eine bestimmte Einheit ermitteln möchten, fügen Sie eine Bedingung für den Status UNIT_OPERATION_STATE_FAILED hinzu.
# 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. Grund für den Fehler prüfen
Verwenden Sie den Befehl describe, um state_message zu lesen.
gcloud beta app-lifecycle-manager unit-operations describe "OPERATION_ID" --location="LOCATION"
4. Gerätezustand prüfen
Sie können auch den aktuellen Status einer Einheit direkt prüfen. Wenn ein Flag-Rollout derzeit fehlschlägt oder der letzte Vorgang zu einem Fehler geführt hat, wird dies im Status angezeigt. Bedingungen vom Typ operationError.
gcloud beta app-lifecycle-manager units describe "UNIT_ID" --location="LOCATION"
Manuelle Problembehebung
Standard-Flag-Versionen für UnitKind anwenden
Wenn die Konfiguration einer Einheit fehlt, weil sie während eines oder mehrerer Roll-outs angepinnt wurde, können Sie sie wiederherstellen, indem Sie die Einheit manuell auf die aktuelle Baseline zurücksetzen, die in ihrem UnitKind definiert ist.
- Lösen Sie die Einheit los, falls sie angepinnt ist.
- Standardrevisionen aus der übergeordneten UnitKind abrufen.
- Erstellen Sie einen neuen FlagRelease, der diese Überarbeitungen enthält.
- Manuell einen FlagUpdate-Vorgang starten, um die Wiederherstellungsversion anzuwenden.
# 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"