Neste guia, mostramos as etapas para diagnosticar e resolver problemas comuns com as flags de recurso do App Lifecycle Manager.
Avaliação do SDK e do ambiente de execução
A API OpenFeature foi projetada para que as chamadas de avaliação de flag não gerem exceções não processadas e, em vez disso, retornem o valor padrão se ocorrer um erro de avaliação.
Sintoma: a flag retorna um valor padrão seguro
Se o serviço de flag estiver inacessível, o provedor estiver indisponível ou a flag estiver configurada incorretamente, o SDK vai retornar o valor padrão obrigatório fornecido no código.
Resolução:
- Verifique a conexão entre o provedor do OpenFeature e o endpoint
saasconfig.googleapis.com. - Verifique se há erros de autenticação. Verifique se a conta de serviço do ambiente de execução do aplicativo tem o papel
roles/saasconfig.viewer. - Verifique se
FLAGD_SOURCE_PROVIDER_IDestá correto.
Sintoma: resultados de avaliação inesperados
Se uma flag não estiver retornando a variante esperada:
Resolução:
- Verifique as condições da CEL e o contexto de avaliação.
- Se um atributo obrigatório estiver ausente do contexto durante uma verificação de condição, o mecanismo de avaliação vai pular essa regra específica.
- Se um atributo estiver ausente durante uma alocação baseada em porcentagem,
a avaliação vai retornar
INVALID_CONTEXT.
Resolver problemas de sincronização de modelos centrados em apps e lançamentos do console
Se você integrar as flags de recurso usando os modelos compostos do Application Design Center e o console do Google Cloud , siga as etapas abaixo para resolver problemas de sincronização e lançamento de modelos.
Sintoma: os tipos de unidade não são criados após a conexão de um modelo composto do App Design Center
Se a guia Tipos de unidade na sua oferta de SaaS permanecer vazia depois que você conectar um modelo composto:
Resolução:
- Verifique se cada modelo de aplicativo padrão incorporado e o modelo de aplicativo composto pai foram adicionados ao catálogo no Application Design Center antes de importar o modelo composto para sua oferta de SaaS.
- Verifique se o agente de serviço do App Lifecycle Manager
(
service-PROJECT_NUMBER@gcp-sa-saasservicemgmt.) tem o papelroles/saasservicemgmt.serviceAgentno seu projeto. - Verifique a página de detalhes da oferta de SaaS no console do Google Cloud ou execute
gcloud beta app-lifecycle-manager saas describe SAAS_OFFERING_ID --location=globalpara inspecionar o status de sincronização do modelo.
Substitua:
- PROJECT_NUMBER: o número do projeto do Google Cloud .
- SAAS_OFFERING_ID: o ID da sua oferta de SaaS.
Sintoma: o lançamento da flag no console não atualiza uma unidade criada com base em um modelo padrão
Se o lançamento de uma flag for concluído no console do Google Cloud , mas uma unidade criada com base em um modelo padrão não receber a configuração atualizada da flag:
Resolução:
- Verifique se a unidade pertence ao tipo de unidade segmentado, se está em uma região
incluída no lançamento e se corresponde a qualquer
unitFilterconfigurado no tipo de lançamento. - Confirme se
FLAGD_SOURCE_PROVIDER_IDno aplicativo corresponde ao caminho completo do recurso de configuração da flag de recurso da unidade (projects/PROJECT_ID/locations/LOCATION/featureFlagsConfigs/UNIT_ID).
Substitua:
- PROJECT_ID: o ID do projeto Google Cloud .
- LOCATION: a região da unidade.
- UNIT_ID: o ID da unidade.
Monitorar lançamentos
O monitoramento do lançamento de uma flag de recurso envolve a verificação do estado de orquestração (o lançamento foi concluído?) e da integridade do aplicativo (o binário detectou a flag?).
Estado de orquestração do lançamento
O sistema monitora a taxa de sucesso das operações em tempo real.
Pausa automática
Para evitar que uma configuração com falha chegue a toda a frota, o sistema pausa automaticamente um lançamento se a taxa de falha em um local exceder a margem de erro configurada no tipo de lançamento (errorBudget.allowedCount ou errorBudget.allowedPercentage, como um limite de 10% por local).
Verificar as estatísticas resumidas
Use o comando describe para ver a contagem de falhas agregadas e determinar se
o lançamento é PAUSED ou FAILED.
gcloud beta app-lifecycle-manager rollouts describe ROLLOUT_ID --location=global
Filtrar atualizações de unidade com falha
Depois de confirmar que há falhas, você precisa encontrar as unidades específicas que não receberam a atualização. Use este filtro para isolar apenas as atualizações de sinalização com falha em uma região específica:
gcloud beta app-lifecycle-manager unit-operations list \
--location=LOCATION \
--filter="state:UNIT_OPERATION_STATE_FAILED AND flag_update:*"
Diagnosticar a causa raiz
Para cada operação com falha, é possível recuperar uma mensagem de erro detalhada fornecida pelo mecanismo de atuação no campo conditions (message e reason) e errorCategory (ou inspecionar stateMessage no recurso de lançamento).
gcloud beta app-lifecycle-manager unit-operations describe OPERATION_ID --location=LOCATION
Substitua:
- ROLLOUT_ID: o ID do lançamento.
- LOCATION: a região da operação de unidade.
- OPERATION_ID: o ID da operação de unidade.
Unidade sem configurações
Nesta seção, descrevemos como a fixação de unidade pode impedir que uma unidade receba configurações de flag de recurso e como recuperar a unidade.
Noções básicas sobre a fixação de unidades
A fixação congela uma unidade na versão atual, impedindo que ela seja atualizada por lançamentos automatizados ou manuais. Uma unidade fixada é explicitamente excluída das operações de lançamento até que o período de fixação expire ou ela seja desafixada manualmente.
Configuração ausente das unidades fixadas
Um cenário crítico ocorre quando uma unidade é fixada durante o lançamento de uma flag de recurso. A fixação bloqueia todas as atualizações, o que significa que a unidade ignora a operação FlagUpdate necessária para receber a configuração.
Sintoma: depois que a unidade é desfixada e atualizada para um binário que exige flags de recurso, o aplicativo não é inicializado ou entra em um loop de repetição infinito, o que leva a falhas nas sondagens de prontidão e reinicializações contínuas do contêiner.
Causa raiz: enquanto a unidade estava fixada, os lançamentos atualizaram o campo defaultFlagRevisions do recurso de tipo de unidade pai, mas a unidade fixada pulou a operação FlagUpdate e não recebeu nenhuma configuração ativa.
Comandos de diagnóstico
Use os comandos a seguir para inspecionar as operações de atualização de flag com falha e o status da unidade.
1. Listar operações de sinalização com falha
Para encontrar unidades que não foram atualizadas, filtre as operações de unidade pelo estado UNIT_OPERATION_STATE_FAILED e pelo tipo flag_update.
gcloud beta app-lifecycle-manager unit-operations list \
--location="LOCATION" \
--filter="state:UNIT_OPERATION_STATE_FAILED AND flag_update:*"
2. Filtrar especificamente por lançamentos de sinalizações com falha
Para identificar atualizações de sinalização com falha em toda a frota ou em uma unidade específica, adicione uma condição para o estado 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. Inspecionar o motivo da falha
Use o comando describe para inspecionar o campo conditions (message e reason) e errorCategory.
gcloud beta app-lifecycle-manager unit-operations describe "OPERATION_ID" --location="LOCATION"
4. Verificar as condições da unidade
Também é possível verificar o estado atual de uma unidade diretamente. Se um lançamento de flag estiver falhando ou a última operação tiver resultado em um erro, a lista conditions da unidade vai conter uma entrada com type: TYPE_OPERATION_ERROR.
gcloud beta app-lifecycle-manager units describe "UNIT_ID" --location="LOCATION"
Substitua:
- LOCATION: a região da unidade ou operação de unidade.
- UNIT_ID: o ID da unidade.
- OPERATION_ID: o ID da operação de unidade.
Mitigação manual
Para recuperar uma unidade fixada que não recebeu as atualizações de flag, aplique as revisões de flag padrão do tipo de unidade mãe.
Aplicar revisões de flag padrão do tipo de unidade
Se uma unidade não tiver a configuração porque foi fixada durante um ou mais lançamentos, você poderá recuperá-la redefinindo manualmente a unidade para o valor de referência atual definido no tipo de unidade.
Liberar a unidade (se estiver fixada):
gcloud beta app-lifecycle-manager units update "UNIT_ID" \ --location="LOCATION" \ --maintenance-pinned-until-time=""Recupere as revisões padrão do tipo de unidade pai:
gcloud beta app-lifecycle-manager unit-kinds describe "UNIT_KIND_ID" \ --location="LOCATION" \ --format="value(defaultFlagRevisions.join(','))"Crie um novo
FlagReleasecontendo essas revisões:gcloud beta app-lifecycle-manager flags releases create "recovery-release-1" \ --location="LOCATION" \ --unit-kind="UNIT_KIND_ID" \ --revisions="REVISIONS"Inicie manualmente uma operação de unidade
FlagUpdatepara aplicar a versão de recuperação: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"
Substitua:
- UNIT_ID: o ID da unidade a ser recuperada.
- LOCATION: a região da unidade.
- UNIT_KIND_ID: o ID do tipo de unidade pai.
- REVISIONS: a lista separada por vírgulas de nomes de recursos de revisão de flag padrão retornados na etapa 2.
- PROJECT_ID: o ID do projeto Google Cloud .