Você está lendo a documentação do Apigee Edge.
Acesse a
documentação da Apigee X. info
Vídeos
Assista aos vídeos a seguir para saber mais sobre como resolver erros internos do servidor 500.
| Vídeo | Descrição |
|---|---|
| Introdução | Apresenta os erros internos do servidor 500 e as possíveis causas. Também demonstra um erro interno do servidor 500 em tempo real, além de etapas para solucionar e resolver o erro. |
| Processar erros de frase de destaque do serviço e de extração de variáveis | Demonstra dois erros internos do servidor 500 causados por políticas de frase de destaque do serviço e de extração de variáveis e mostra como solucionar e resolver esses erros. |
| Processar erros de política do JavaScript | Mostra um erro interno do servidor 500 causado por uma política do JavaScript e as etapas para solucionar e resolver esse erro. |
| Processar falhas de servidores de back-end | Mostra exemplos de erros internos do servidor 500 causados por uma falha no servidor de back-end e mostra as etapas para resolver os erros. |
Sintoma
O aplicativo cliente recebe um código de status HTTP 500 com a mensagem "Erro interno do servidor" como resposta para chamadas de API. O erro interno do servidor 500 pode ser causado por um erro durante a execução de qualquer política no Edge ou por um erro no servidor de destino/back-end.
O código de status HTTP 500 é uma resposta de erro genérica. Isso significa que o servidor encontrou uma condição inesperada que o impediu de atender à solicitação. Esse erro geralmente é retornado pelo servidor quando nenhum outro código de erro é adequado.
Mensagens de erro
Você pode receber a seguinte mensagem de erro:
HTTP/1.1 500 Internal Server Error
Em alguns casos, você pode observar outra mensagem de erro com mais detalhes. Confira um exemplo de mensagem de erro:
{
"fault":{
"detail":{
"errorcode":"steps.servicecallout.ExecutionFailed"
},
"faultstring":"Execution of ServiceCallout callWCSAuthServiceCallout failed. Reason: ResponseCode 400 is treated as error"
}
}Causas possíveis
O erro interno do servidor 500 pode ser gerado devido a várias causas diferentes. No Edge, as causas podem ser classificadas em duas categorias principais com base em onde o erro ocorreu:
| Causa | Detalhes | Etapas detalhadas de solução de problemas fornecidas para |
| Erro de execução em uma política do Edge | Uma política no proxy de API pode falhar por algum motivo. | Usuários do Edge Private e Public Cloud |
| Erro no servidor de back-end | O servidor de back-end pode falhar por algum motivo. | Usuários do Edge Private e Public Cloud |
Erro de execução em uma política do Edge
Uma política no proxy de API pode falhar por algum motivo. Esta seção explica como solucionar o problema se o erro interno do servidor 500 ocorrer durante a execução de uma política.
Diagnóstico
Etapas de diagnóstico para usuários do Private e Public Cloud
Se você tiver a sessão de trace da interface para o erro, faça o seguinte:
- Verifique se o erro foi causado pela execução de uma política. Consulte Determinar a origem do problema para mais detalhes.
- Se o erro ocorreu durante a execução da política, continue. Se o erro foi causado pelo servidor de back-end, acesse Erro no servidor de back-end.
- Selecione a solicitação de API que está falhando com o erro interno do servidor 500 no trace.
- Examine a solicitação e selecione a política específica que falhou ou o fluxo chamado "Erro" que segue imediatamente a política com falha no trace.
- Para mais detalhes sobre o erro, confira o campo "error" na seção "Propriedades" ou o conteúdo do erro.
- Usando os detalhes coletados sobre o erro, tente determinar a causa dele.
Etapas de diagnóstico apenas para usuários do Private Cloud
Se você não tiver a sessão de trace da interface, faça o seguinte:
- Verifique se o erro ocorreu durante a execução de uma política. Consulte Determinar a origem do problema para mais detalhes.
- Se o erro foi causado pela execução da política, continue. Se o erro ocorreu durante a execução da política, continue. Se o erro foi causado pelo servidor de back-end, acesse Erro no servidor de back-end.
- Use os registros de acesso do NGINX, conforme explicado em Determinar a origem do problema, para determinar a política com falha no proxy de API e também o ID exclusivo da mensagem de solicitação.
- Verifique os registros do processador de mensagens
(
/opt/apigee/var/log/edge-message-processor/logs/system.log) e pesquise o ID exclusivo da mensagem de solicitação. - Se você encontrar o ID exclusivo da mensagem de solicitação, verifique se é possível receber mais informações sobre a causa da falha.
Resolução
Se você determinou a causa do problema com a política, tente corrigir o problema corrigindo a política e reimplantando o proxy.
Os exemplos a seguir ilustram como determinar a causa e a resolução de diferentes tipos de problemas.
Se você precisar de mais ajuda para solucionar o erro interno do servidor 500 ou suspeitar que seja um problema no Edge, entre em contato com o suporte da Apigee.
Exemplo 1: falha na política de frase de destaque do serviço devido a um erro no back-end do servidor
Se a chamada para o servidor de back-end falhar na política de frase de destaque do serviço com algum erro, como 4XX ou 5XX, ela será tratada como erro interno do servidor 500.
- Confira um exemplo em que o serviço de back-end falha com um erro 404 na política de frase de destaque do serviço. A seguinte mensagem de erro é enviada ao usuário final:
{ "fault": { "detail": { "errorcode":"steps.servicecallout.ExecutionFailed" },"faultstring":"Execution of ServiceCallout service_callout_v3_store_by_lat_lon failed. Reason: ResponseCode 404 is treated as error" } } } - A seguinte sessão de trace da interface mostra o código de status 500 causado por um erro na política de frase de destaque do serviço:

- Neste exemplo, a propriedade "error" lista o motivo da falha da política de frase de destaque do serviço como "ResponseCode 404 is treated as error". Esse erro pode ocorrer se o recurso acessado pelo URL do servidor de back-end na política de frase de destaque do serviço não estiver disponível.
- Verifique a disponibilidade do recurso no servidor de back-end. Ele pode não estar disponível temporariamente/permanentemente ou pode ter sido movido para outro local.
Resolução do exemplo 1
- Verifique a disponibilidade do recurso no servidor de back-end. Ele pode não estar disponível temporariamente/permanentemente ou pode ter sido movido para outro local.
- Corrija o URL do servidor de back-end na política de frase de destaque do serviço para apontar para um recurso válido e existente.
- Se o recurso estiver temporariamente indisponível, tente fazer a solicitação de API quando o recurso estiver disponível.
Exemplo 2: falha na política de extração de variáveis
Vamos agora analisar outro exemplo, em que o erro interno do servidor 500 é causado por um erro na política de extração de variáveis, e como solucionar e resolver o problema.
- O trace a seguir na sessão da interface mostra o código de status 500 devido a um erro na política de extração
de variáveis:

- Selecione a política de extração de variáveis com falha, role para baixo e confira a seção "Conteúdo
do erro" para mais detalhes:

- O conteúdo do erro indica que a variável"serviceCallout.oamCookieValidationResponse" não está disponível na política de extração de variáveis. Como o nome da variável indica, ela precisa conter a resposta da política de frase de destaque do serviço anterior.
- Selecione a política de frase de destaque do serviço no trace. Talvez você descubra que a variável "serviceCallout.oamCookieValidationResponse" não foi definida. Isso indica que a chamada para o serviço de back-end falhou, resultando em uma variável de resposta vazia.
- Embora a política de frase de destaque do serviço tenha falhado, a execução das políticas após a política de frase de destaque do serviço continua porque a flag "continueOnError" na política de frase de destaque do serviço está definida como "true", conforme mostrado abaixo:
<ServiceCallout async="false" continueOnError="true" enabled="true" name="Callout.OamCookieValidation"> <DisplayName>Callout.OamCookieValidation</DisplayName> <Properties /> <Request clearPayload="true" variable="serviceCallout.oamCookieValidationRequest"> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </Request> <Response>serviceCallout.oamCookieValidationResponse</Response> <HTTPTargetConnection> <Properties /> <URL>http://{Url}</URL> </HTTPTargetConnection> </ServiceCallout>
- Anote o ID exclusivo da mensagem "X-Apigee.Message-ID" para essa solicitação de API específica do trace, da seguinte maneira:
- Selecione a fase "Dados do Analytics registrados" na solicitação.
- Role para baixo e anote o valor de X-Apigee.Message-ID.

- Confira o registro do processador de mensagens
(
/opt/apigee/var/log/edge-message-processor/system.log) e pesquise o ID exclusivo da mensagem anotado na etapa 6. A seguinte mensagem de erro foi observada para a solicitação de API request:2017-05-05 07:48:18,653 org:myorg env:prod api:myapi rev:834 messageid:rrt-04984fed9e5ad3551-c-wo-32168-77563 NIOThread@5 ERROR HTTP.CLIENT - HTTPClient$Context.onTimeout() : ClientChannel[C:]@149081 useCount=1 bytesRead=0 bytesWritten=0 age=3002ms lastIO=3002ms .onConnectTimeout connectAddress=mybackend.domain.com/XX.XX.XX.XX:443 resolvedAddress=mybackend.domain.com/XX.XX.XX.XX
O erro acima indica que a política de frase de destaque do serviço falhou devido a um erro de tempo limite de conexão ao se conectar ao servidor de back-end.
- Para determinar a causa do erro de tempo limite de conexão, execute o
telnet comando no servidor de back-end dos processadores de mensagens. O comando telnet
gerou o erro "Connection timed out", conforme mostrado abaixo:
telnet mybackend.domain.com 443 Trying XX.XX.XX.XX... telnet: connect to address XX.XX.XX.XX: Connection timed out
Normalmente, esse erro é observado nas seguintes circunstâncias:
- Quando o servidor de back-end não está configurado para permitir o tráfego dos processadores de mensagens do Edge Processadores.
- Se o servidor de back-end não estiver escutando na porta específica.
No exemplo ilustrado acima, embora a política de extração de variáveis tenha falhado, a causa real foi que o Edge não conseguiu se conectar ao servidor de back-end na política de frase de destaque do serviço. E a causa dessa falha foi que o servidor de back-end não estava configurado para permitir o tráfego dos processadores de mensagens do Edge.
Sua própria política de extração de variáveis vai se comportar de maneira diferente e poderá falhar por um motivo diferente. É possível solucionar o problema de maneira adequada, dependendo da causa da falha da política de extração de variáveis, verificando a mensagem na propriedade error.
Resolução do exemplo 2
- Corrija a causa do erro ou falha na política de extração de variáveis de maneira adequada.
- No exemplo ilustrado acima, a solução foi corrigir a configuração de rede para permitir o tráfego dos processadores de mensagens do Edge para o servidor de back-end. Isso foi feito por permitindo os endereços IP dos processadores de mensagens no servidor de back-end específico. Por exemplo, no Linux, é possível usar iptables para permitir o tráfego dos endereços IP do processador de mensagens no servidor de back-end.
Exemplo 3: falha na política JavaCallout
Vamos agora analisar mais um exemplo, em que o erro interno do servidor 500 é causado por um erro na política de frase de destaque Java, e como solucionar e resolver o problema.
- O trace da interface a seguir mostra o código de status 500 devido a um erro na política de frase de destaque Java:

- Selecione o fluxo chamado "Erro" seguido pela política de frase de destaque Java com falha
para receber os detalhes do erro, conforme mostrado na figura abaixo:

- Neste exemplo, a propriedade "error" na seção "Propriedades" revela que a falha é devido à senha expirada usada ao se conectar ao banco de dados Oracle na política JavaCallout. Sua própria chamada de Java vai se comportar de maneira diferente e vai preencher uma mensagem diferente na propriedade error.
- Verifique o código da política JavaCallout e confirme a configuração correta que precisa ser usada.
Resolução do exemplo 3
Corrija o código ou a configuração da chamada de Java de maneira adequada para evitar a exceção de tempo de execução. No exemplo de falha de chamada de Java ilustrado acima, é necessário usar a senha correta para se conectar ao banco de dados Oracle para resolver o problema.
Erro no servidor de back-end
Um erro interno do servidor 500 também pode se originar do servidor de back-end. Esta seção explica como solucionar o problema se o erro vier do servidor de back-end.
Diagnóstico
Etapas de diagnóstico para todos os usuários
A causa de outros erros de back-end pode variar muito. É necessário diagnosticar cada situação de forma independente.
- Verifique se o erro foi causado pelo servidor de back-end. Consulte Determinar a origem do problema para mais detalhes.
- Se o erro foi causado pelo servidor de back-end, continue. Se o erro ocorreu durante a execução da política, acesse Erro de execução na política do Edge.
- Siga as etapas abaixo, dependendo se você tem ou não acesso a uma sessão de trace para a API com falha ou se o back-end é um servidor Node.js:
Se você não tiver uma sessão de trace para a chamada de API com falha:
- Se o trace da interface não estiver disponível para a solicitação com falha, verifique os registros do servidor de back-end logs para receber detalhes sobre o erro.
- Se possível, ative o modo de depuração no servidor de back-end para receber mais detalhes sobre o erro e a causa.
Se você tiver uma sessão de trace para a chamada de API com falha:
Se você tiver uma sessão de trace, as etapas a seguir vão ajudar a diagnosticar o problema.
- Na ferramenta de trace, selecione a solicitação de API que falhou com o erro interno do servidor 500 Erro.
- Selecione a fase "Resposta recebida do servidor de destino" na solicitação de API com falha
conforme mostrado na figura abaixo:

- Confira a seção "Conteúdo da resposta" para receber detalhes sobre o erro.

- Neste exemplo, o conteúdo da resposta, que é um envelope SOAP, mostra a string de falha como "Não autorizado" mensagem. A causa mais provável desse problema é que as credenciais adequadas (nome de usuário/senha, token de acesso etc.) não são transmitidas ao servidor de back-end pelo usuário. Esse problema pode ser corrigido transmitindo as credenciais corretas ao o servidor de back-end.
Se o back-end for um servidor Node.js:
- Se o back-end for um servidor de back-end Node.js, verifique os registros do Node.js
para o proxy de API específico na interface do Edge (os usuários do Public e do Private Cloud podem
verificar os registros do Node.js). Se você for um usuário do Edge Private Cloud, você
também poderá verificar os registros do processador de mensagens
(
/opt/apigee/var/log/edge-message-processor/logs/system.log) para mais detalhes sobre o erro.
Opção de registros do NodeJS na guia "Visão geral" do proxy de API da interface do Edge

Resolução
- Depois de identificar a causa do erro, corrija o problema no servidor de back-end.
- Se for um servidor de back-end Node.js:
- Verifique se o erro é gerado pelo seu código personalizado e corrija o problema, se possível.
- Se o erro não for gerado pelo seu código personalizado ou se você precisar de ajuda, entre em contato com o suporte da Apigee.
Se você precisar de mais ajuda para solucionar o erro interno do servidor 500 ou suspeitar que seja um problema no Edge, entre em contato com o suporte da Apigee.
Determinar a origem do problema
Use um dos procedimentos a seguir para determinar se o erro interno do servidor 500 foi gerado durante a execução de uma política no proxy de API ou pelo servidor de back-end.
Usar o trace na interface
Observação: as etapas nesta seção podem ser realizadas por usuários do Public e do Private Cloud.
- Se o problema ainda estiver ativo, ative o trace na interface para a API afetada.
- Depois de capturar o trace, selecione a solicitação de API que mostra o código de resposta como 500.
- Navegue por todas as fases da solicitação de API com falha e verifique qual fase retorna
o erro interno do servidor 500:
- Se o erro for gerado durante a execução de uma política, prossiga para Erro de execução em uma política do Edge.
- Se o servidor de back-end respondeu com o erro interno do servidor 500, prossiga para Erro no servidor de back-end.
Usar o monitoramento de APIs
Observação:as etapas nesta seção só podem ser realizadas por usuários do Public Cloud.
O monitoramento de APIs permite isolar as áreas problemáticas rapidamente para diagnosticar problemas de erro, desempenho e latência e a origem delas, como aplicativos de desenvolvedor, proxies de API, destinos de back-end ou a plataforma de API.
Siga um cenário de exemplo que demonstra como solucionar problemas 5xx com suas APIs usando o monitoramento de APIs.
Por exemplo, você pode configurar um alerta para ser notificado quando o número de códigos de status 500 ou falhas steps.servicecallout.ExecutionFailed exceder um limite específico.
Usar registros de acesso do NGINX
Observação: as etapas nesta seção são apenas para usuários do Edge Private Cloud.
Você também pode consultar os registros de acesso do NGINX para determinar se o código de status 500 foi gerado durante a execução de uma política no proxy de API ou pelo servidor de back-end. Isso é particularmente útil se o problema tiver ocorrido no passado ou se o problema for intermitente e você não conseguir capturar o trace na interface. Siga as etapas abaixo para determinar essas informações nos registros de acesso do NGINX:
- Verifique os registros de acesso do NGINX (
/opt/apigee/var/log/edge-router/nginx/ <org>~ <env>.<port#>_access_log). - Pesquise se há erros 500 para o proxy de API específico durante o período específico.
- Se houver erros 500, verifique se o erro é uma política ou um erro do servidor de destino,
conforme mostrado abaixo:
Exemplo de entrada mostrando um erro de política

Exemplo de entrada mostrando um erro do servidor de destino

- Depois de identificar se é uma política ou um erro do servidor de destino:
- Prossiga para Erro de execução em uma política do Edge se for um erro de política.
- Prossiga para Erro no servidor de back-end se for um erro do servidor de destino.