O Alibaba Cloud Service Mesh (ASM) oferece recursos de rastreamento prontos para uso para aplicações na malha de services. No entanto, para obter um rastreamento de ponta a ponta que inclua aplicações externas se comunicando com services na malha, é necessário usar o Managed Service for OpenTelemetry para unificar os rastros de chamadas. Este guia mostra como usar o Managed Service for OpenTelemetry para rastrear uma requisição de uma aplicação externa para uma aplicação dentro de uma instância do ASM, criando um único rastro de chamada unificado.
Pré-requisitos
Crie uma instância do Service Mesh (ASM) e adicione o cluster do ACK à instância. Para mais informações, consulte {{XREF_0}} e {{XREF_1}}.
Implante um gateway de entrada na instância do ASM para permitir o acesso às aplicações na malha. Para mais informações, consulte {{XREF_2}}.
Instale o Python 2.7 e prepare um ambiente para executar a aplicação de exemplo fora da malha.
Ative o Managed Service for OpenTelemetry. Para mais informações, consulte {{XREF_3}}.
Observações
Este guia implanta uma aplicação Python chamada ExternalProxy. Essa aplicação executa um servidor HTTP. Acessar o caminho raiz do ExternalProxy chama o service
productpageda aplicação Bookinfo em execução dentro da malha de services.Este guia usa o Managed Service for OpenTelemetry como backend de rastreamento. Se você usar um sistema de rastreamento autogerenciado compatível com o Zipkin, exponha seu endpoint de relatórios para a aplicação externa. Em seguida, pule a seção {{XREF_4}} e vá diretamente para {{XREF_5}}, usando o endpoint do seu sistema como endereço de relatórios.
Etapa 1: Implantar a aplicação Bookinfo na malha
-
Execute o comando a seguir para implantar a aplicação Bookinfo no cluster da sua instância do ASM.
Baixe o arquivo YAML da aplicação Bookinfo no GitHub.
kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f bookinfo.yaml -
Execute o comando a seguir para implantar o VirtualService da aplicação Bookinfo.
Baixe o arquivo YAML do VirtualService no GitHub.
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f virtual-service-all-v1.yaml -
Execute o comando a seguir para implantar o DestinationRule da aplicação Bookinfo.
Baixe o arquivo YAML do DestinationRule no Github.
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f destination-rule-all.yaml -
Execute o comando a seguir para implantar o Gateway da aplicação Bookinfo.
Baixe o arquivo YAML do Gateway no GitHub.
kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f bookinfo-gateway.yaml
Etapa 2: Obter o endpoint do OpenTelemetry
Faça login no Managed Service for OpenTelemetry console. No painel de navegação à esquerda, clique em Overview.
Na página Overview, clique na aba Access process e, em seguida, clique em View access point information.
-
Visualize o endpoint.
-
Na parte superior da página, selecione a região de destino.
Selecione a região onde o cluster do ACK para a aplicação Bookinfo está implantado. Caso contrário, os dados de rastreamento não poderão ser correlacionados.
-
Na aba Access point information, ative a opção Show token. Escolha um endpoint de rede pública ou privada com base no local onde a sua aplicação ExternalProxy está implantada.
Como o ExternalProxy relata dados usando a API v1 do Zipkin, é necessário um endpoint v1. Clique na aba Zipkin e encontre o endpoint apropriado na tabela. Normalmente, usa-se um endpoint v2. No entanto, para cenários específicos como integrações com Istio ou Molten, um endpoint v1 é obrigatório. Ao usar o componente Sleuth, a URL base não deve incluir
/api/v2/spans.
-
Etapa 3: Implantar a aplicação ExternalProxy fora da malha
O proxy sidecar encaminha todas as partes de uma requisição recebida, incluindo os cabeçalhos HTTP e o corpo da requisição, para o service upstream. Isso significa que os cabeçalhos relacionados ao rastreamento também são encaminhados.
Para garantir a propagação do contexto de rastro, a sua aplicação deve encaminhar os cabeçalhos de rastreamento necessários em suas requisições de saída, seguindo as práticas padrão da comunidade.
-
Salve o código a seguir como um arquivo chamado ExternalProxy.py no ambiente de execução da sua aplicação externa.
Substitua
{XTRACE_ZIPKIN_V1_ENDPOINT}pelo endpoint da etapa anterior. Se você estiver relatando para um sistema de rastreamento autogerenciado, use o endpoint de relatórios dele.-
Substitua
{INGRESS_GATE_WAY_IP}pelo endereço IP do gateway de entrada do seu cluster do ACK.
-
Execute o comando a seguir para iniciar a aplicação ExternalProxy.
python ExternalProxy.py* Serving Flask app "main" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 317-792-686 -
Execute o comando a seguir para enviar uma requisição para a aplicação ExternalProxy.
curl localhost:5000Saída esperada:
OK
Etapa 4: Visualizar as informações de rastro
Faça login no Managed Service for OpenTelemetry console.
No painel de navegação à esquerda, clique em Applications. Selecione a região na parte superior da página e, em seguida, clique em ExternalProxy na lista de aplicações.
-
No painel de navegação à esquerda, clique em Application details. Clique na aba Traces e, em seguida, clique em um Trace ID e visualize os detalhes do rastro da chamada.
Um rastro de chamada completo é formado entre a aplicação externa, ExternalProxy, e a aplicação Bookinfo na malha. A parte superior da página de detalhes do rastro exibe informações de resumo, incluindo Start time, Duration, Services, Depth e Total spans. Abaixo do resumo, uma visualização em árvore mostra a relação hierárquica de cada span. As colunas incluem Span name, Timeline, Service name, Start time, IP address e Status. Neste exemplo, o rastro da chamada começa em
external-proxy, passa porproductpagee, em seguida, chama os servicesdetails,reviewseratingsem sequência. Alguns spans, como o span de limitação de taxaahas_rate_limit_cluster, podem aparecer com um status de erro.