Service Mesh (ASM) integra-se ao Managed Service for OpenTelemetry para ajudar você a identificar gargalos de desempenho em aplicações distribuídas. Visualize dados de rastreamento, exiba topologias de rastros, analise dependências da aplicação e contabilize requisições.
Informações básicas
O rastreamento distribuído traça o perfil e monitora aplicações, especialmente aquelas construídas com arquitetura de microsserviços. Os proxies sidecar em uma instância do ASM geram e enviam spans automaticamente. No entanto, as aplicações precisam propagar os cabeçalhos HTTP adequados para correlacionar corretamente os spans em um único rastro. A aplicação deve coletar determinados cabeçalhos de cada requisição recebida e encaminhá-los para todas as requisições de saída acionadas por essa requisição de entrada. O OpenTelemetry oferece suporte a diferentes propagadores, cada um utilizando cabeçalhos distintos. A seção a seguir lista os propagadores compatíveis e seus respectivos cabeçalhos.
Propagadores B3
x-request-idx-b3-traceidx-b3-spanidx-b3-parentspanidx-b3-sampledx-b3-flagsx-ot-span-context
Propagadores W3C Trace Context
traceparenttracestate
Instâncias do ASM da versão V1.18.0.124 ou anteriores usam propagadores B3 por padrão. Instâncias do ASM com versões posteriores à V1.18.0.124 utilizam propagadores W3C Trace Context como padrão.
Pré-requisitos
Você ativou o Managed Service for OpenTelemetry. Para obter informações sobre faturamento, consulte Regras de faturamento.
Uma instância do ASM foi criada e o Managed Service for OpenTelemetry está habilitado para ela. Para mais detalhes, consulte Coletar dados de rastreamento do ASM para o Managed Service for OpenTelemetry.
Uma aplicação está implantada em um cluster ACK adicionado à instância do ASM. Consulte Implantar uma aplicação em um cluster ACK adicionado a uma instância do ASM para mais informações.
Descrição da aplicação de exemplo
Na aplicação de exemplo Bookinfo, o serviço productpage (implementado em Python) utiliza bibliotecas OpenTracing para extrair os cabeçalhos necessários das requisições HTTP no formato de propagação B3.
def getForwardHeaders(request):
headers = {}
# x-b3-*** headers can be populated using the opentracing span
span = get_current_span()
carrier = {}
tracer.inject(
span_context=span.context,
format=Format.HTTP_HEADERS,
carrier=carrier)
headers.update(carrier)
# ...
incoming_headers = ['x-request-id']
# ...
for ihdr in incoming_headers:
val = request.headers.get(ihdr)
if val is not None:
headers[ihdr] = val
return headers
O serviço reviews (implementado em Java) também emprega cabeçalhos HTTP no formato de propagação B3.
@GET
@Path("/reviews/{productId}")
public Response bookReviewsById(@PathParam("productId") int productId,
@HeaderParam("end-user") String user,
@HeaderParam("x-request-id") String xreq,
@HeaderParam("x-b3-traceid") String xtraceid,
@HeaderParam("x-b3-spanid") String xspanid,
@HeaderParam("x-b3-parentspanid") String xparentspanid,
@HeaderParam("x-b3-sampled") String xsampled,
@HeaderParam("x-b3-flags") String xflags,
@HeaderParam("x-ot-span-context") String xotspan) {
if (ratings_enabled) {
JsonObject ratingsResponse = getRatings(Integer.toString(productId), user, xreq, xtraceid, xspanid, xparentspanid, xsampled, xflags, xotspan);
Exemplo de acesso
Insira uma URL no formato http://{endereço IP do gateway de entrada}/productpage na barra de endereços do navegador e pressione Enter. Você será direcionado à página da aplicação Bookinfo.
Visualizar aplicações
A página Applications do console do Managed Service for OpenTelemetry exibe métricas essenciais de todas as aplicações monitoradas, incluindo o número de requisições e erros do dia atual, além do status de integridade. Configure rótulos para as aplicações para filtrá-las posteriormente.
Faça login no console do Managed Service for OpenTelemetry.
No painel de navegação à esquerda, clique em Applications. Na parte superior da página, selecione a região desejada.
Visualizar detalhes da aplicação
A página Application Details apresenta métricas principais, topologia de chamadas e rastros da aplicação em cada servidor onde ela está implantada.
Faça login no console do Managed Service for OpenTelemetry.
No painel de navegação à esquerda, clique em Applications. Selecione a região alvo na parte superior da página e clique no nome da aplicação correspondente.
-
No painel de navegação à esquerda, clique em Application Details. Na lista de máquinas à esquerda, clique em All ou em uma máquina identificada pelo endereço IP.
Na aba Overview, visualize a topologia de chamadas e as métricas de desempenho essenciais. Na aba Traces, confira a lista de rastros da aplicação na máquina selecionada, ordenada por duração em ordem decrescente. A página lista no máximo 100 rastros. Clique na aba Traces para ver a lista de registros de rastreamento. O painel esquerdo fornece métricas de ordenação como Response Time, Requests e Errors, além de filtros de instância. A lista à direita exibe informações de cada span, como Start Time, Span Name, Host/IP, Duration, Status e traceid. Filtre os registros usando a caixa de entrada Duration greater than e a caixa de seleção Exception. Clique em View logs para consultar os detalhes de log da chamada correspondente.
Visualizar o gráfico de cascata de um rastro
O gráfico de cascata de um rastro mostra o horário de geração do log, status, endereço IP ou nome do servidor, nome do serviço e linha do tempo.
Na página Application Details, clique na aba Traces e selecione o Trace ID do rastro desejado.
-
Na página Traces exibida, visualize o gráfico de cascata do rastro.
NotaO campo IP Address pode exibir um endereço IP ou o nome da máquina, dependendo da configuração de visualização na página Application Settings. Para mais detalhes, consulte Gerenciar aplicações e tags.
Passe o ponteiro sobre o nome de um serviço para ver suas informações, incluindo duração, hora de início, tags e eventos de log. Para mais informações, consulte Detalhes da aplicação.
O topo da página de detalhes do rastro exibe um resumo com hora de início, duração total, quantidade de aplicações, profundidade do rastro e número total de spans. Abaixo do resumo, a lista de spans usa recuo para mostrar a hierarquia de chamadas entre serviços. As colunas incluem Span Name, Timeline (uma barra azul indicando a porcentagem de tempo consumido), Application Name, Start Time, IP Address e Status.
Perguntas frequentes
Por que não consigo visualizar as informações de rastro após coletar dados de rastreamento para o Managed Service for OpenTelemetry no console do ASM?
-
Verifique os logs de envio de rastros.
Obtenha o arquivo kubeconfig do cluster e use o kubectl para se conectar a ele. Para mais informações, consulte Obter o arquivo kubeconfig de um cluster e usar o kubectl para se conectar ao cluster.
-
Execute o comando abaixo para visualizar os logs de envio de rastros dos pods relacionados ao deployment tracing-on-external-zipkin no namespace istio-system:
kubectl logs "$(kubectl get pods -n istio-system -l app=tracing -o jsonpath='{.items[0].metadata.name}')" -n istio-system -c nginxSe o valor de
statusno log de saída do Nginx for406, significa que a requisição POST para/api/v2/spansretornou um código de status HTTP 406.remote_addr:192.168.26.98 time_local:17/Aug/2021:08:15:17 +0000 method:POST uri:/api/v2/spans host:zipkin status:406 bytes_sent:1146 referer:- useragent:- forwardedfor:192.168.26.98 request_time:0.012 upstream_response_time:0.011 remote_addr:192.168.26.98 time_local:17/Aug/2021:08:15:17 +0000 method:POST uri:/api/v2/spans host:zipkin status:406 bytes_sent:1146 referer:- useragent:- forwardedfor:192.168.26.98 request_time:0.012 upstream_response_time:0.013
-
Consulte a cota de requisições de serviço por dia e a quantidade real de requisições do dia anterior.
Faça login no console do Managed Service for OpenTelemetry.
-
No painel de navegação à esquerda, clique em Cluster Configurations para verificar a cota de requisições e a contagem de ontem.
No painel Quota configuration, o campo Configuration quota mostra o valor atual da cota em unidades de 10.000 requisições. A contagem real de requisições de ontem aparece entre parênteses no título do painel. Caso a quantidade de requisições de ontem ultrapasse a cota configurada, aumente a cota.
Quando a contagem real de requisições do dia anterior excede a cota diária configurada, os dados reportados são descartados.
-
Altere a cota de requisições de serviço por dia.
Se a contagem diária real de requisições superar a cota diária, os dados reportados serão descartados e nenhuma informação de rastro será exibida. Aumente a cota diária para um valor superior à contagem real de requisições diárias para resolver esse problema.
No painel de navegação à esquerda do console do Managed Service for OpenTelemetry, clique em Cluster Configurations.
Na aba Cluster Configurations, na área Quota configuration, altere o valor de Configuration quota para um número maior que a contagem de requisições de serviço. Em seguida, clique em Save.
Na caixa de diálogo Prompt, clique em OK.
Por que o traceid muda após a requisição ser processada pelo gateway de entrada ou sidecar?
Esse problema ocorre quando os cabeçalhos de propagação na requisição da sua aplicação estão incompletos, fazendo com que o proxy sidecar os regenere. Para usar um traceid personalizado, inclua pelo menos x-b3-traceid e x-b3-spanid no formato de propagação B3, ou pelo menos um cabeçalho traceparent no formato de propagação W3C Trace Context.