Cloud Trace e Cloud Service Mesh
O Cloud Trace é um sistema de rastreio distribuído que recolhe dados de latência das aplicações e os apresenta quase em tempo real. Permite-lhe seguir um pedido de amostra através do seu sistema distribuído, observar as chamadas de rede e criar um perfil do seu sistema de ponta a ponta.
O Cloud Trace está disponível com instalações do Cloud Service Mesh nas seguintes plataformas:
- GKE no Google Cloud
- Clusters do GKE Enterprise no local se tiver instalado com a autoridade de certificação do Cloud Service Mesh
Tenha em atenção que o Cloud Trace está desativado por predefinição. Depois de ativadas, as páginas do Cloud Service Mesh na Google Cloud consola fornecem um link para os rastreios na página do Cloud Trace . Para ver informações detalhadas sobre os preços, consulte a página de preços do Cloud Trace.
Ative o Cloud Trace
Esta secção mostra-lhe como ativar o Cloud Trace.
Gerido (TD)
Esta secção mostra como ativar o Cloud Trace no Cloud Service Mesh com um plano de controlo do Cloud Service Mesh gerido.
Execute o seguinte comando para ativar o Cloud Trace:
cat <<EOF | kubectl apply -n istio-system -f - apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: enable-cloud-trace namespace: istio-system spec: tracing: - providers: - name: stackdriver EOF
Gerido (Istiod
)
Esta secção mostra como ativar o Cloud Trace no Cloud Service Mesh com o plano de controlo do Istiod gerido.
Execute o seguinte comando:
cat <<EOF | kubectl apply -f - apiVersion: v1 data: mesh: |- defaultConfig: tracing: stackdriver: {} kind: ConfigMap metadata: name: istio-release-channel namespace: istio-system EOF
em que release-channel é o seu canal de lançamento (
asm-managed
,asm-managed-stable
ouasm-managed-rapid
).Execute o seguinte comando para ver o configmap:
kubectl get configmap istio-release-channel -n istio-system -o yaml
Para verificar se o Cloud Trace está ativado, certifique-se de que as seguintes linhas aparecem na secção
mesh:
.... apiVersion: v1 data: mesh: | .... defaultConfig: tracing: stackdriver:{} ...
Reinicie os proxies.
Tenha em atenção que a configuração do rastreador faz parte da configuração de arranque do proxy, pelo que cada pod tem de ser reiniciado e reinjetado para receber a atualização do rastreador. Por exemplo, pode usar o seguinte comando para reiniciar os pods que pertencem a uma implementação:
kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME
No cluster
Esta secção mostra como ativar o Cloud Trace no Cloud Service Mesh com o plano de controlo no cluster.
Para ativar o Cloud Trace, volte a implementar o plano de controlo gerido pelo cliente através do seguinte ficheiro de sobreposição. Para mais informações acerca dos ficheiros de sobreposição, consulte o artigo Acerca dos ficheiros de sobreposição.
Predefinição
Execute o seguinte comando para ativar o Cloud Trace:
./asmcli install \
OTHER_FLAGS \
--option cloud-trace
Este comando aplica o seguinte ficheiro de sobreposição para ativar o rastreio com as opções predefinidas. Tenha em atenção que a taxa de amostragem predefinida é de 1%. Se quiser substituir o valor predefinido, tem de usar --custom-overlay
.
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
values:
global:
proxy:
tracer: stackdriver
Para ver uma lista de opções, consulte o pacote anthos-service-mesh
.
Personalizado
Pode substituir a predefinição especificando um valor tracing.sampling
. O valor tem de estar no intervalo de 0,0 a 100,0 com uma precisão de 0,01. Por exemplo, para rastrear 5 pedidos em cada 10 000,use 0, 05.
O exemplo seguinte mostra uma taxa de amostragem de 100% (que só faria para fins de demonstração ou resolução de problemas).
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
enableTracing: true
defaultConfig:
tracing:
sampling: 100
values:
global:
proxy:
tracer: stackdriver
Execute o seguinte comando para ativar o Cloud Trace:
./asmcli install \
OTHER_FLAGS \
--custom_overlay PATH_TO_FILE
Tenha em atenção que a configuração do rastreador faz parte da configuração de arranque do proxy. Por isso, os pods têm de ser reiniciados e reinjetados para receberem a atualização do rastreador. Use o seguinte comando para reiniciar os pods pertencentes a uma implementação:
kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME
Propagação do contexto de rastreio
Embora os proxies sidecar possam enviar automaticamente intervalos de rastreio, precisam de algumas sugestões para associar todo o rastreio. As aplicações têm de propagar os cabeçalhos HTTP adequados para que, quando os proxies enviam informações de intervalos, os intervalos possam ser correlacionados corretamente numa única rastreabilidade.
Para tal, uma aplicação tem de recolher e propagar os cabeçalhos adequados do pedido recebido para quaisquer pedidos enviados. A configuração do rastreio do Stackdriver do Cloud Service Mesh aceita qualquer um dos seguintes formatos de cabeçalho e propaga todos os seguintes formatos:
- B3 (
x-b3-traceid
,x-b3-spanid
,x-b3parentspanid
,x-b3-sampled
,x-b3-flags
) - W3C TraceContext (
traceparent
) - Google Cloud Trace (
x-cloud-trace-context
) - gRPC TraceBin (
grpc-trace-bin
)
Isto significa que as suas aplicações podem usar qualquer um desses formatos para propagar o contexto de rastreio, e os rastreios são gerados e definidos para o Stackdriver de forma adequada.
Exemplo
Segue-se um exemplo de um pedido HTTP-Get com um cabeçalho traceparent
no pedido original. Repare nos cabeçalhos de contexto de rastreio adicionais adicionados pelo proxy.
$ kubectl exec -it sleep-557747455f-n6flv -- curl "httpbin:8000/anything?freeform=" -H "accept: application/json" -H "Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01" -vv
* Trying 10.12.3.52:8000...
* Connected to httpbin (10.12.3.52) port 8000 (#0)
> GET /anything?freeform= HTTP/1.1
> Host: httpbin:8000
> User-Agent: curl/7.80.0-DEV
> accept: application/json
> Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< server: envoy
< date: Wed, 10 Nov 2021 20:36:04 GMT
< content-type: application/json
< content-length: 1032
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 5
<
{
"args": {
"freeform": ""
},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "application/json",
"Grpc-Trace-Bin": "AAB1Q9FeCeXWGAHU90zeEmm4AaDHmGRtdM7wAgE",
"Host": "httpbin:8000",
"Traceparent": "00-7543d15e09e5d61801d4f74cde1269b8-a0c798646d74cef0-01",
"User-Agent": "curl/7.80.0-DEV",
"X-B3-Sampled": "1",
"X-B3-Spanid": "a0c798646d74cef0",
"X-B3-Traceid": "7543d15e09e5d61801d4f74cde1269b8",
"X-Cloud-Trace-Context": "7543d15e09e5d61801d4f74cde1269b8/11585396123534413552;o=1",
"X-Envoy-Attempt-Count": "1",
"X-Forwarded-Client-Cert": "<REDACTED>"
},
"json": null,
"method": "GET",
"origin": "127.0.0.6",
"url": "http://httpbin:8000/anything?freeform="
}
Repare que, no conjunto de cabeçalhos de pedidos devolvidos, o conjunto completo de cabeçalhos trace context está presente.
Para mais exemplos de propagação dos cabeçalhos, consulte o artigo Propagação do contexto de rastreio.
Crie um rastreio a partir do cliente com um ID personalizado
Para criar um rastreio a partir de um cliente com um ID personalizado, use o comando curl
para criar um pedido com um cliente externo e forçá-lo a mostrar um rastreio. Por exemplo:
curl $URL --header "x-client-trace-id: 105445aa7843bc8bf206b12000100000"
Para mais informações sobre o x-client-trace-id
, consulte a
documentação do Envoy.
Aceda aos rastreios
Veja exemplos de rastreios de um serviço
Para ver uma amostragem de rastreios de um serviço na sua app, siga estes passos:
Aceda à página Cloud Service Mesh na Google Cloud consola.
Em Serviços, selecione o nome do serviço que quer inspecionar.
A captura de ecrã seguinte mostra um exemplo de um
frontend
serviço.Em Pedir rastreios, clique num rastreio para ver mais informações.
A captura de ecrã seguinte mostra um exemplo do subpainel de pedido de rastreio.
Ver todos os rastreios
Para ver todos os rastreios de um serviço, siga estes passos:
Aceda à página Cloud Service Mesh na Google Cloud consola.
Em Serviços, selecione o nome do serviço que quer inspecionar.
Aceda à página Métricas.
Especifique um período no menu pendente Período ou defina um período personalizado com a cronologia.
Clique em Ver rastreios.
Os rastreios de um serviço no Cloud Service Mesh contêm as seguintes informações:
- Latências de pedidos em diferentes serviços na malha.
- Propriedades do pedido HTTP, incluindo ID, URL, tamanho, latência e protocolo.
- Nome do serviço, espaço de nomes e ID da malha como parte das etiquetas
istio.canonical_service
,istio.namespace
eistio.mesh_id
, respetivamente.