Como acessar registros no Cloud Logging
As páginas do Cloud Service Mesh fornecem links para três tipos diferentes de registros no Cloud Logging: registros de aplicativos, registros de erros e de tráfego.
Como acessar registros de aplicativos
Para ver registros de aplicativos de um serviço durante um período específico, siga estas etapas:
Acesse a página do Cloud Service Mesh no console do Google Cloud.
Em Serviços, selecione o nome do serviço que você quer inspecionar.
Acesse a página Métricas.
Especifique um período no menu suspenso Período ou defina um período personalizado com a linha do tempo.
Clique em Visualizar registros do aplicativo.
Os registros de aplicativo são aqueles gerados pelo próprio código do aplicativo e são anexados ao recurso monitorado correspondente (k8s_container ou gce_instance) que o aplicativo está usando.
Como acessar registros de erros
Para ver registros de erros de um serviço durante um período específico, siga estas etapas:
No console do Google Cloud, acesse a página Cloud Service Mesh.
Em Serviços, selecione o nome do serviço que você quer inspecionar.
Acesse a página Diagnósticos.
Especifique um período no menu suspenso Período ou defina um período personalizado com a linha do tempo.
No canto superior direito da janela, clique em Abrir no Logging.
Como acessar registros de tráfego
Para ver registros de tráfego ou registros de acesso no Istio referentes a um serviço durante um período específico, siga estas etapas:
No console do Google Cloud, acesse a página Cloud Service Mesh.
Em Serviços, selecione o nome do serviço que você quer inspecionar.
Acesse a página Métricas.
Especifique um período no menu suspenso Período ou defina um período personalizado com a linha do tempo.
Em filter_list Selecionar uma opção de filtro, clique em Visualizar registros de tráfego.
O registro de tráfego é nomeado como server-accesslog-stackdriver e é anexado ao recurso monitorado correspondente (k8s_container ou gce_instance) que o serviço está usando. O registro de tráfego contém as seguintes informações:
Propriedades da solicitação HTTP, como ID, URL, tamanho, latência e cabeçalhos comuns.
Informações da carga de trabalho de origem e destino, como nome, namespace, identidade e rótulos comuns.
Se o rastreamento estiver ativado, informações de rastreamento, como amostragem, ID de rastreamento e ID de período.
Veja um exemplo de entrada de registro:
{ insertId: "1awb4hug5pos2qi" httpRequest: { requestMethod: "GET" requestUrl: "YOUR-INGRESS/productpage" requestSize: "952" status: 200 responseSize: "5875" remoteIp: "10.8.0.44:0" serverIp: "10.56.4.25:9080" latency: "1.587232023s" protocol: "http" } resource: { type: "k8s_container" labels: { location: "us-central1-a" project_id: "YOUR-PROJECT" pod_name: "productpage-v1-76589d9fdc-ptnt9" cluster_name: "YOUR-CLUSTER-NAME" container_name: "productpage" namespace_name: "default" } } timestamp: "2020-04-28T19:55:21.056759Z" severity: "INFO" labels: { destination_principal: "spiffe://cluster.local/ns/default/sa/bookinfo-productpage" response_flag: "-" destination_service_host: "productpage.default.svc.cluster.local" source_app: "istio-ingressgateway" service_authentication_policy: "MUTUAL_TLS" source_name: "istio-ingressgateway-5ff85d8dd8-mwplb" mesh_uid: "YOUR-MESH-UID" request_id: "021ce752-9001-4ac6-b6d6-3b15f5d3632" destination_namespace: "default" source_principal: "spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account" destination_workload: "productpage-v1" destination_version: "v1" source_namespace: "istio-system" source_workload: "istio-ingressgateway" destination_name: "productpage-v1-76589d9fdc-ptnt9" destination_app: "productpage" } trace: "projects/YOUR-PROJECT/traces/d4197f59b7a43e3aeff3571bac99d536" receiveTimestamp: "2020-04-29T03:07:14.362416217Z" spanId: "43226343ca2bb2b1" traceSampled: true logName: "projects/YOUR-PROJECT/logs/server-accesslog-stackdriver" receiveTimestamp: "2020-04-28T19:55:32.185229100Z" }
Interpretar a telemetria do Anthos Service Mesh
As seções a seguir explicam como verificar o status da malha e analisar as diversas telemetrias que contêm detalhes úteis para auxiliar a solução de problemas.
Interpretar as métricas do plano de controle
Ao instalar o Cloud Service Mesh com o plano de controle no cluster, por padrão, istiod
exporta métricas para a Observabilidade do Google Cloud para monitoramento.
istiod
adiciona o prefixo istio.io/control
a essas métricas e fornece insights sobre o
estado do plano de controle, como o número de proxies conectados a cada instância,
eventos de configuração, push e validações do plano de controle.
Observe ou resolva os problemas do plano de controle com as etapas a seguir.
Carregue um painel de amostra:
git clone https://github.com/GoogleCloudPlatform/monitoring-dashboard-samples && cd monitoring-dashboard-samples/dashboards && git checkout servicemesh
Instale o painel do Cloud Service Mesh:
gcloud monitoring dashboards create --config-from-file=dashboards/servicemesh/anthos-service-mesh-control-plane-monitoring.json
Procure um painel chamado
Istio Control Plane Dashboard
na lista. Para mais informações, consulte Como visualizar o painel instalado.
Para ver a lista completa de métricas disponíveis, consulte Métricas exportadas.
Diagnosticar atrasos de configuração
As etapas a seguir explicam como usar a métrica pilot_proxy_convergence_time
para diagnosticar um atraso entre uma alteração de configuração e todas as convergências de passagem.
Execute um comando shell em um pod:
kubectl exec -it $(kubectl get pod -l app=pilot -o jsonpath='{.items[0].metadata.name}' -n istio-system) -n istio-system -c istio-proxy -- curl -s
Acesse
localhost:15014
egrep
paraconvergence
nas métricas:curl http://localhost:15014/metrics | grep convergence
Interpretar os registros de acesso do Google Cloud Observability
As informações a seguir explicam como usar os registros de acesso da Observability do Google Cloud para solucionar problemas de conexão. Os registros de acesso/tráfego da Observabilidade do Google Cloud são ativados por padrão.
O Cloud Service Mesh exporta dados para os registros de acesso da Observabilidade do Google Cloud que podem ajudar a depurar os seguintes tipos de problemas:
- Fluxo de tráfego e falhas
- Roteamento de solicitação de ponta a ponta
Os registros de acesso da Observabilidade do Google Cloud são ativados por padrão para instalações do Cloud Service Mesh
no Google Kubernetes Engine. É possível ativar os registros de acesso do Google Cloud Observability
executando asmcli install
novamente. Use as mesmas opções que você
instalou originalmente, mas omita a sobreposição personalizada que desativou o Stackdriver.
Há dois tipos de registros de acesso:
Os registros de acesso ao servidor fornecem uma visão das solicitações. Eles estão localizados em
server-accesslog-stackdriver
, anexado ao recurso monitoradok8s_container
. Use a seguinte sintaxe de URL para exibir registros de acesso do lado do servidor:https://console.cloud.google.com/logs/viewer?advancedFilter=logName="projects/PROJECT_ID/logs/server-accesslog-stackdriver"&project=PROJECT_ID
Os registros de acesso do cliente fornecem uma visão das solicitações do lado do cliente. Eles estão localizados em
client-accesslog-stackdriver
, anexado ao recurso monitoradok8s_pod
. Use a seguinte sintaxe de URL para exibir registros de acesso do lado do cliente:https://console.cloud.google.com/logs/viewer?advancedFilter=logName="projects/PROJECT_ID/logs/client-accesslog-stackdriver"&project=PROJECT_ID
Os registros de acesso contêm as seguintes informações:
- Propriedades da solicitação HTTP, como ID, URL, tamanho, latência e cabeçalhos comuns.
- Informações da carga de trabalho de origem e destino, como nome, namespace, identidade e rótulos comuns.
- Informações de revisão e canônicas do serviço de origem e destino.
- Se o rastreamento estiver ativado, os registros conterão informações de rastreamento, como amostragem, ID de rastreamento e ID do período.
As informações exibidas nos registros de acesso da Observabilidade do Google Cloud têm origem nos registros de acesso do Envoy quando você os ativa na configuração do Istio. Elas contêm os seguintes cabeçalhos:
route_name
upstream_cluster
X-Envoy-Original-Path
X-Envoy-Original-Host
Este é um exemplo de entrada de registro:
{ "insertId": "1j84zg8g68vb62z", "httpRequest": { "requestMethod": "GET", "requestUrl": "http://35.235.89.201:80/productpage", "requestSize": "795", "status": 200, "responseSize": "7005", "remoteIp": "10.168.0.26:0", "serverIp": "10.36.3.153:9080", "latency": "0.229384205s", "protocol": "http" }, "resource": { "type": "k8s_container", "labels": { "cluster_name": "istio-e2e22", "namespace_name": "istio-bookinfo-1-68819", "container_name": "productpage", "project_id": "***", "location": "us-west2-a", "pod_name": "productpage-v1-64794f5db4-8xbtf" } }, "timestamp": "2020-08-13T21:37:42.963881Z", "severity": "INFO", "labels": { "protocol": "http", "upstream_host": "127.0.0.1:9080", "source_canonical_service": "istio-ingressgateway", "source_namespace": "istio-system", "x-envoy-original-path": "", "source_canonical_revision": "latest", "connection_id": "32", "upstream_cluster": "inbound|9080|http|productpage.istio-bookinfo-1-68819.svc.cluster.local", "requested_server_name": "outbound_.9080_._.productpage.istio-bookinfo-1-68819.svc.cluster.local", "destination_version": "v1", "destination_workload": "productpage-v1", "source_workload": "istio-ingressgateway", "destination_canonical_revision": "v1", "mesh_uid": "cluster.local", "source_principal": "spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account", "x-envoy-original-dst-host": "", "service_authentication_policy": "MUTUAL_TLS", "destination_principal": "spiffe://cluster.local/ns/istio-bookinfo-1-68819/sa/bookinfo-productpage", "response_flag": "-", "log_sampled": "false", "destination_service_host": "productpage.istio-bookinfo-1-68819.svc.cluster.local", "destination_name": "productpage-v1-64794f5db4-8xbtf", "destination_canonical_service": "productpage", "destination_namespace": "istio-bookinfo-1-68819", "source_name": "istio-ingressgateway-6845f6d664-lnfvp", "source_app": "istio-ingressgateway", "destination_app": "productpage", "request_id": "39013650-4e62-9be2-9d25-78682dd27ea4", "route_name": "default" }, "logName": "projects/***/logs/server-accesslog-stackdriver", "trace": "projects/***t/traces/466d77d15753cb4d7749ba5413b5f70f", "receiveTimestamp": "2020-08-13T21:37:48.758673203Z", "spanId": "633831cb1fda4fd5", "traceSampled": true }
É possível usar esse registro de várias formas:
- Integre ao Cloud Trace, um recurso opcional do Cloud Service Mesh.
- Exporte registros de tráfego para o BigQuery, em que é possível executar consultas, como selecionar todas as solicitações em mais de cinco segundos.
- Crie métricas com base em registros.
- Resolver problemas de erros
404
e503
Resolver problemas de erros 404
e 503
O exemplo a seguir explica como usar esse registro para solucionar problemas quando uma
solicitação falha com um código de resposta 404
ou 503
.
No registro de acesso do cliente, procure uma entrada como a seguinte:
httpRequest: { requestMethod: "GET" requestUrl: "://IP_ADDRESS/src/Util/PHP/eval-stdin.php" requestSize: "2088" status: 404 responseSize: "75" remoteIp: "10.168.0.26:34165" serverIp: "10.36.3.149:8080" latency: "0.000371440s" protocol: "http" }
Navegue até os rótulos na entrada de registro de acesso. Localize o campo
response_flag
como este:response_flag: "NR"
O valor
NR
é um acrônimo paraNoRoute
, o que significa que nenhuma rota foi encontrada para o destino ou não há cadeia de filtros correspondente para uma conexão downstream. Da mesma forma, também é possível usar o rótuloresponse_flag
para solucionar erros503
.Se você encontrar erros
503
nos registros de acesso de cliente e servidor, verifique se os nomes de porta definidos para cada serviço correspondem ao nome do protocolo em uso entre eles. Por exemplo, se um cliente binário golang se conectar a um servidor desse tipo usando HTTP, mas a porta for chamadahttp2
, o protocolo não fará a negociação automática corretamente.
Para mais informações, consulte sinalizações de resposta.
Interpretar registros do Envoy
Nas etapas a seguir, explicamos como usar os registros de acesso do proxy Envoy para mostrar o tráfego entre as duas extremidades de uma conexão para fins de solução de problemas.
Os registros de acesso do Envoy são úteis para diagnosticar problemas como:
- Fluxo de tráfego e falhas
- Roteamento de solicitação de ponta a ponta
Os registros de acesso não são ativados por padrão no Cloud Service Mesh e só podem ser ativados globalmente em toda a malha.
Para solucionar falhas de conexão/solicitação, gere uma atividade no aplicativo que acione uma solicitação HTTP e, em seguida, inspecione a solicitação associada nos registros de origem ou destino.
Se você acionar uma solicitação que aparecer nos registros do proxy de origem, isso
indicará que o redirecionamento do tráfego iptables
está funcionando corretamente e que o proxy
Envoy está processando o tráfego. Se houver erros nos registros, gere um dump de configuração do Envoy
e verifique a configuração do cluster envoy para garantir que ele esteja
correto. Se você vir a solicitação, mas o registro não tiver erros, verifique os
registros de proxy de destino.
Se a solicitação aparece nos registros do proxy de destino, isso indica que a malha está funcionando corretamente. Se você vir um erro, execute um dump da configuração Envoy e verifique os valores corretos para a porta de tráfego definida na configuração do listener.
Se o problema persistir após a execução das etapas anteriores, o Envoy poderá ser
negociado automaticamente com o protocolo entre o arquivo secundário e o pod do
aplicativo. Verifique se o nome da porta do serviço do Kubernetes, por exemplo, http-80
,
corresponde ao protocolo que o aplicativo usa.
Usar o Explorador de registros para consultar registros
É possível usar a interface do Explorador de registros
para consultar registros de acesso específicos. Por exemplo, para consultar todas as solicitações com
MULTUAL_TLS
ativado e usar o protocolo grpc
, anexe a seguinte consulta de registros
de acesso ao servidor:
labels.protocol="grpc" labels.service_authentication_policy="MULTUAL_TLS"
Definir uma política de registro de acesso
Para configurar a geração de registros de proxy do Cloud Service Mesh gerenciado, consulte Registros de acesso do Envoy.
Para definir uma política de registro de acesso para o Cloud Service Mesh com o plano de controle no cluster:
Crie um arquivo de sobreposição personalizada
IstioOperator
que inclua os valoresAccessLogPolicyConfig
aplicáveis para o cenário.Transmita esse arquivo para
asmcli
usando a opção--custom_overlay
para atualizar a configuração do plano de controle no cluster. Para informações sobre como executarasmcli install
com um arquivo de sobreposição personalizado, consulte Instalar com recursos opcionais.
Ver informações específicas do serviço ou da carga de trabalho
Se você tiver um problema com um serviço ou carga de trabalho específico em vez de um problema em toda a malha,
inspecione os proxies Envoy individuais e colete informações
relevantes deles. Para coletar informações sobre uma carga de trabalho específica e os proxies,
use pilot-agent
:
kubectl exec POD_NAME -c istio-proxy -- pilot-agent request GET SCOPE
No exemplo, SCOPE é um dos seguintes:
certs
: certificados dentro da instância do Envoyclusters
: clusters com o Envoy configuradoconfig_dump
: despeja a configuração do Envoylisteners
: listeners com o Envoy configuradologging
: visualizar e alterar as configurações de geração de registrosstats
: estatísticas do Envoystats/prometheus
: estatísticas do Envoy como registros do Prometheus
Visualizar estados dos soquetes do proxy
É possível examinar diretamente o estado dos soquetes do proxy Envoy usando o processo a seguir.
Exiba uma lista de soquetes estabelecidos, incluindo soquetes no estado
TIME_WAIT
, que poderão afetar negativamente a escalabilidade se a contagem for alta:kubectl exec POD_NAME -c istio-proxy -- ss -anopim
Exiba um resumo das estatísticas do soquete:
kubectl exec POD_NAME -c istio-proxy -- ss -s
Para mais informações, consulte Uma introdução ao comando ss (em inglês).
Registros istio-proxy
e istio-init
Além disso, recupere os registros istio-proxy
e analise o conteúdo deles para identificar erros
que podem sugerir a causa do problema:
kubectl logs POD_NAME -c istio-proxy
É possível fazer o mesmo para o contêiner init
:
kubectl logs POD_NAME -c istio-init
A seguir
Integração com o Cloud Trace. O Cloud Trace é um recurso opcional no Cloud Service Mesh.