503 Serviço indisponível - NoActiveTargets

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Vídeos

Veja os vídeos a seguir para mais informações sobre os erros 503:

Video Descrição
Resolver problemas e resolver o erro "503 Service Available - NoActiveDestinations" Saiba mais sobre:
  • Importância dos servidores de destino e dos monitores de integridade
  • Solução de problemas e resolução de um erro 503 Service Available - NoActiveTargets em tempo real

Sintoma

O aplicativo cliente recebe o código de status de resposta HTTP 503 com a mensagem Service Invalid e o código de erro NoActiveDestination para as solicitações de proxy de API.

Mensagem de erro

Você verá a seguinte resposta de erro:

HTTP/1.1 503 Service Unavailable
  

Você verá a seguinte mensagem de erro na resposta HTTP:

{
   "fault": {
      "faultstring": "The Service is temporarily unavailable",
      "detail": {
           "errorcode": "messaging.adaptors.http.flow.NoActiveTargets"
       }
    }
}
  

Causas possíveis

A resposta HTTP 503 Service Unused com o código de erro NoActiveDestination normalmente é observada quando você usa um ou mais servidores de destino na configuração de endpoint de destino no seu proxy de API.

A tabela a seguir lista as possíveis causas da resposta 503 Service Indisponível com o código de erro NoActiveTargets:

Causa Descrição Quem pode executar as etapas de solução de problemas
O servidor de destino está desativado O servidor de destino especificado na configuração do endpoint de destino está desativado. Usuários de nuvens públicas e privadas de borda
Erros de conexão devido à resolução incorreta de DNS A resolução DNS do servidor de destino resultou em endereços IP inválidos, o que gerou erros de conexão. Usuários da nuvem privada do Edge
Erros de conexão Problemas de rede ou conectividade impedem que o cliente se conecte ao servidor. Usuários da nuvem privada do Edge
Alias de host de destino incorreto O host do servidor de destino especificado está incorreto ou tem caracteres indesejados (como um espaço). Usuários de nuvens públicas e privadas de borda
Falhas do handshake de SSL Falha no handshake de TLS/SSL entre o cliente e o servidor. Usuários de nuvens públicas e privadas de borda
Falhas na verificação de integridade As verificações de integridade configuradas para conferir a integridade do servidor de destino podem falhar por algum motivo. Usuários da nuvem privada do Edge

Causa: o servidor de destino está desativado

Se todos os servidores de destino especificados na configuração do endpoint de destino estiverem desativados, você vai receber a resposta 503 Service Unused com o código de erro NoActiveTargets.

Diagnóstico

  1. Determine o nome do servidor de destino que está sendo usado na configuração específica do endpoint de destino do proxy de API com falha usando uma das seguintes maneiras:
    1. Se houver apenas um endpoint de destino, verifique esse endpoint específico.
    2. Se houver vários endpoints de destino e você não souber qual deles desativou o servidor de destino, siga as etapas abaixo:
      1. Ative a sessão de rastreamento, faça a chamada da API e reproduza o problema - 503 Serviço indisponível.
      2. No trace, navegue até Target Request Flow Started e determine o nome do endpoint de destino, conforme mostrado abaixo:
      3. Determinar o nome do endpoint de destino a partir do trace

  2. Depois de identificar o endpoint de destino, consiga o nome do servidor de destino usado na configuração do endpoint de destino, conforme mostrado no exemplo abaixo:
    <TargetEndpoint name="default">>
      <HTTPTargetConnection>
        <LoadBalancer>
          <Server name="demo-target" />
        </LoadBalancer>
        <Path>/test</Path>
      </HTTPTargetConnection>
    </TargetEndpoint>
          

    No exemplo acima, há um único servidor de destino chamado demo-target.

  3. Confira a definição de cada um dos servidores de destino usados no endpoint de destino usando a IU do Edge ou a chamada da API Edge.

    interface do Edge

    Para ver a definição usando a interface do usuário do Edge:

    1. Acesse Administrador > Ambientes > Servidores de destino.
    2. Selecione o ambiente em que a falha ocorre.
    3. Pesquise o nome específico do servidor de destino para conferir a definição do servidor de destino.

      Por exemplo, digite o nome do servidor de destino demo-target e você vai ver sua definição conforme mostrado abaixo:

      Nome do servidor de destino e status ativado/desativado

      O servidor de destino demo-target tem um alias de host, uma porta # e o SSL está ativado. No entanto, o servidor de destino está desativado , o que é indicado pelo esmaecimento do elemento ATIVADO.

    API Edge

    Para acessar a definição usando a API Edge:

    Use a API Get TargetServer para receber a definição do servidor de destino.

    Saída da definição do servidor de destino

    <TargetServer name="demo-target">
      <Host>demo-target.apigee.net</Host>
      <Port>443</Port>
      <IsEnabled>false</IsEnabled>
      <SSLInfo>
          <Enabled>true</Enabled>
      </SSLInfo>
    </TargetServer>
              

    A saída da API Apigee mostra que o servidor de destino demo-target está desativado porque o elemento IsEnabled está definido como falso.

    Como o servidor de destino está desativado, o processador de mensagens vai enviar 503 Service Invalid com o código de erro NoActiveTargets imediatamente como uma resposta ao cliente.

Resolução

Verifique se os servidores de destino específicos usados na configuração do endpoint de destino do seu proxy de API estão sempre ativados.

interface do Edge

  1. Acesse Administrador > Ambientes > Servidores de destino.
  2. Selecione o ambiente em que a falha ocorre.
  3. Procure o nome específico do servidor de destino para receber a definição dele.
  4. Selecione o servidor de destino específico e clique em Editar.
  5. Marque a caixa de seleção Ativado.
  6. Clique em Atualizar.

API Edge

Use Atualizar uma API do servidor de destino para atualizar a definição do servidor de destino e garantir que IsEnabled esteja definido como true no payload da solicitação da API, conforme mostrado abaixo:

<TargetServer name="demo-target">
  <Host>demo-target.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
      <Enabled>true</Enabled>
  </SSLInfo>
</TargetServer>
        

Se o problema persistir, acesse Precisa de informações de diagnóstico.

Diagnosticar problemas usando o monitoramento de APIs

O Monitoramento de APIs permite isolar áreas problemáticas rapidamente para diagnosticar erros, desempenho e latência, bem como a origem delas, como apps de desenvolvedores, proxies de API, destinos de back-end ou a plataforma da API.

Consulte um exemplo de cenário que demonstra como solucionar problemas de 5xx com suas APIs usando o API Monitoring. Por exemplo, é possível configurar um alerta para receber uma notificação quando o número de falhas messaging.adaptors.http.flow.NoActiveTargets exceder um limite específico.

É necessário coletar informações de diagnóstico

Se o problema persistir mesmo depois de seguir as instruções acima, colete as seguintes informações de diagnóstico. Entre em contato e compartilhe com o suporte da Apigee:

  1. Se você é usuário da nuvem pública, forneça as seguintes informações:
    1. Nome da organização
    2. Nome do ambiente
    3. Nome de proxy da API
    4. Concluir o comando curl para reproduzir o erro
    5. Arquivo de rastreamento que contém as solicitações com o erro "503 Service Indisponível" com o código de erro NoActiveTargets
  2. Se você é um usuário da nuvem privada, forneça as seguintes informações:
    1. Mensagem de erro concluída observada
    2. Nome do ambiente
    3. Pacote de proxy de API
    4. Arquivo de rastreamento que contém as solicitações com o erro "503 Service Indisponível" com o código de erro NoActiveTargets
    5. Registros de acesso do NGINX

      (/opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log)

    6. Registros do processador de mensagens

      (/opt/apigee/var/log/edge-message-processor/logs/system.log)