O Service Mesh (ASM) oferece configurações de observabilidade para logs, métricas e rastreamento. Use o console do ASM para personalizar essas definições nos níveis global, de namespace ou de carga de trabalho específica. Defina o formato de saída de log, adicione dimensões de métrica, ative ou desative métricas específicas e configure a porcentagem de amostragem de rastreamento. Este tópico descreve como utilizar as Configurações de Observabilidade.
Pré-requisitos
É necessária uma instância do ASM versão 1.17.2.35 ou posterior. Para mais informações, consulte Criar uma instância do ASM ou Atualizar uma instância do ASM.
Escopos
|
Tipo |
Descrição |
|
Global |
Uma configuração global suporta definições para logs, métricas e rastreamento. Existe apenas uma configuração global e ela não pode ser excluída. As configurações de rastreamento são suportadas apenas no escopo global. |
|
Namespace |
Permite criar uma configuração de observabilidade dedicada para um namespace. Cada namespace pode ter apenas uma configuração de observabilidade no nível de namespace. |
|
Personalizado |
Uma configuração personalizada utiliza um seletor de rótulo para definir seu escopo. Cada carga de trabalho pode ser selecionada por, no máximo, uma configuração personalizada. |
Procedimento
Global
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Na página Observability Settings, clique em aba Global. Configure logs, métricas e rastreamento conforme necessário e clique em Submission.
Clique em links da tabela a seguir para visualizar descrições detalhadas das configurações.
Seção de configuração
Descrição
Namespace
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Na página Observability Settings, clique em aba Namespace e em Create. Selecione o Namespace desejado, configure logs e métricas conforme necessário e clique em Create.
Clique em links da tabela a seguir para visualizar descrições detalhadas das configurações.
Seção de configuração
Descrição
Custom
Faça login no console do ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha .
-
Na página Observability Settings, clique em aba Custom, selecione o Namespace desejado e clique em Create. Insira um Name e um Label selector, configure logs e métricas conforme necessário e clique em Create.
Clique em links da tabela a seguir para visualizar descrições detalhadas das configurações.
Seção de configuração
Descrição
Configurações de log
As configurações de log incluem ativar ou desativar a saída de log de acesso, definir o formato de saída de log, personalizar o formato de log e filtrar logs.
Saída de log de acesso
-
Na seção Log Settings, ative ou desative a chave Enable Log Output conforme necessário.
Ao ativar esta opção, os sidecars ou gateways no plano de dados enviam logs de acesso para a saída padrão (stdout) do contêiner.
Ao desativar esta opção, os sidecars ou gateways no plano de dados param de enviar logs para a stdout do contêiner.
-
Visualize os logs na stdout do contêiner sidecar do plano de dados.
Os exemplos a seguir mostram como visualizar logs de acesso usando kubectl.
-
Execute o comando a seguir para visualizar os logs do sidecar:
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1 -
Execute o comando a seguir para visualizar os logs do gateway de entrada:
kubectl -n istio-system logs istio-ingressgateway-6cff9b6b58-r**** --tail 1
-
-
(Opcional) Visualize os logs de acesso no console do Container Service for Kubernetes.
Se você utiliza um cluster do Alibaba Cloud Container Service for Kubernetes (ACK), também é possível visualizar os logs de acesso no console do ACK.
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em nome do seu cluster. No painel de navegação à esquerda, clique em .
Na página Pods, clique em nome do pod desejado e, em seguida, clique em aba Logs na parte inferior da página para visualizar os logs de acesso.
Formato de saída de log
Este recurso requer uma instância do ASM versão 1.20.6.36 ou posterior. Para mais informações sobre como atualizar uma instância, consulte Atualizar uma instância do ASM.
Na seção Log Settings, defina Log Output Format como JSON ou TEXT conforme necessário.
Se você selecionar JSON, os logs de acesso serão enviados para a stdout do contêiner como strings JSON.
Se você selecionar TEXT, os logs de acesso serão enviados para a stdout do contêiner como strings de texto simples.
Formato de log personalizado
-
Na seção Log Settings, selecione campos, modifique as informações de campos personalizados ou clique em ícone
na parte inferior da lista de campos de log para adicionar um novo campo.A personalização do formato de log só é possível quando a chave Enable Log Output está ativada. Na seção Log Format, os campos de log selecionados por padrão são obrigatórios e não podem ser desmarcados. Os valores dos campos de log podem ser obtidos de cabeçalhos de solicitação, cabeçalhos de resposta ou valores internos do Envoy.
Por exemplo, para registrar o cabeçalho de solicitação
accept-encoding, defina accessLogFormat key como accept-encoding, Type como Request Properties e accessLogFormat value como Accept-Encoding. O modelo de formato para um cabeçalho de solicitação é%REQ(HEADER_NAME)%(por exemplo,%REQ(:AUTHORITY)%), para um cabeçalho de resposta é%RESP(HEADER_NAME)%(por exemplo,%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%) e para um atributo interno do Envoy é%ATTRIBUTE_NAME%(por exemplo,%REQUEST_DURATION%). -
Execute o comando a seguir para visualizar os logs dos componentes do plano de dados na malha de serviço.
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1|grep accept-encoding --color=autoO log de acesso agora exibe o valor do cabeçalho Accept-Encoding adicionado na etapa 1.
Filtragem de logs
Na seção Log Settings, selecione Enable Log Filter para ativar a filtragem de logs e insira uma expressão de filtragem na caixa de texto. Os logs de acesso são gerados apenas para solicitações que correspondem à expressão.
Por exemplo, para registrar apenas solicitações que atendam à condição Response Http Status >= 400, use a expressão response.code >= 400. Para mais informações, consulte Expressões CEL e campos comuns.
Expressões CEL e campos comuns
As expressões de filtragem de logs são expressões padrão da Common Expression Language (CEL). A tabela a seguir lista os campos comuns para expressões CEL. Para mais informações, consulte a documentação oficial do CEL e do Envoy.
|
Atributo |
Tipo |
Descrição |
|
request.path |
string |
O caminho da solicitação. |
|
request.url_path |
string |
O caminho da solicitação sem a string de consulta. |
|
request.host |
string |
A parte do host da URL. |
|
request.method |
string |
O método da solicitação. |
|
request.headers |
map<string, string> |
Todos os cabeçalhos de solicitação, indexados por seus nomes em minúsculas. |
|
request.useragent |
string |
O valor do cabeçalho User-Agent. |
|
request.time |
timestamp |
O momento em que o primeiro byte da solicitação é recebido. |
|
request.id |
string |
O ID da solicitação. |
|
request.protocol |
string |
O protocolo da solicitação. Valores válidos: |
|
request.query |
string |
A string de consulta da URL da solicitação. |
|
response.code |
int |
O código de status HTTP da resposta. |
|
response.code_details |
string |
Detalhes sobre o código de resposta. |
|
response.grpc_status |
int |
O código de status gRPC na resposta. |
|
response.headers |
map<string, string> |
Todos os cabeçalhos de resposta, indexados por seus nomes em minúsculas. |
|
response.size |
int |
O tamanho do corpo da resposta em bytes. |
|
response.total_size |
int |
O tamanho total da mensagem de resposta em bytes, incluindo o corpo e os cabeçalhos. |
Configurações de métrica
As configurações de métrica incluem ativar ou desativar a geração de métricas e configurar dimensões de métrica.
Geração de métricas
As métricas são categorizadas como métricas do lado do cliente e métricas do lado do servidor.
Métricas do lado do cliente: Métricas geradas quando um sidecar atua como cliente para iniciar solicitações. As métricas de gateway também são categorizadas como métricas do lado do cliente.
Métricas do lado do servidor: Métricas geradas quando um sidecar atua como servidor para receber solicitações.
-
Na seção Metric Settings, na coluna Client-Side Metrics ou Server-Side Metrics, marque ou desmarque a caixa de seleção Enabled de uma métrica conforme necessário.
Se uma métrica estiver ativada, o sidecar ou gateway do plano de dados expõe essa métrica através do caminho
/stats/prometheusna porta 15020.Se uma métrica estiver desativada, ela não será exposta na porta e no caminho especificados.
-
Execute o comando a seguir para visualizar as métricas expostas por um sidecar ou gateway.
Use o kubectl para executar um comando curl dentro do contêiner sidecar ou gateway para acessar o caminho
/stats/prometheusna porta local 15020 e visualizar as métricas exportadas.kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus|head -n 10Saída de exemplo:
# TYPE istio_agent_cert_expiry_seconds gauge istio_agent_cert_expiry_seconds{resource_name="default"} 46725.287654548 # HELP istio_agent_endpoint_no_pod Endpoints without an associated pod. # TYPE istio_agent_endpoint_no_pod gauge istio_agent_endpoint_no_pod 0 # HELP istio_agent_go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE istio_agent_go_gc_duration_seconds summary istio_agent_go_gc_duration_seconds{quantile="0"} 5.0149e-05 istio_agent_go_gc_duration_seconds{quantile="0.25"} 9.8807e-05 ......
Dimensões de métrica
As dimensões de métrica fornecem informações contextuais ricas. Use essas dimensões para filtrar métricas alvo no Prometheus. Por exemplo, utilize a dimensão source_app para filtrar métricas de solicitações de uma aplicação cliente específica.
Editar dimensões padrão
Siga estas etapas para editar as dimensões padrão:
Na seção Metric Settings, na coluna Client-Side Metrics ou Server-Side Metrics, clique em Edit dimension para uma métrica ativada.
Na caixa de diálogo Customize CLIENT dimension configuration ou Customize SERVER dimension configuration, marque ou desmarque as caixas de seleção das dimensões a serem exportadas e clique em Confirm.
Por exemplo, se nenhuma dimensão estiver desativada, execute um comando curl dentro do contêiner sidecar ou gateway para acessar o caminho /stats/prometheus na porta local 15020 e visualizar as métricas exportadas.
kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus
Tomando como exemplo a métrica istio_request_bytes_sum (que corresponde à métrica REQUEST_SIZE no console), observe que ela inclui todas as dimensões por padrão.
istio_request_bytes_sum{reporter="destination",source_workload="istio-ingressgateway",source_canonical_service="unknown",source_canonical_revision="latest",source_workload_namespace="istio-system",source_principal="spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway",source_app="istio-ingressgateway",source_version="unknown",source_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",destination_workload="httpbin",destination_workload_namespace="default",destination_principal="spiffe://cluster.local/ns/default/sa/httpbin",destination_app="httpbin",destination_version="v1",destination_service="httpbin.default.svc.cluster.local",destination_canonical_service="httpbin",destination_canonical_revision="v1",destination_service_name="httpbin",destination_service_namespace="default",destination_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",request_protocol="http",response_code="200",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls"} 18000
Se você modificar a métrica padrão REQUEST_SIZE do lado do servidor para reter apenas a dimensão response_code e então acessar o caminho /stats/prometheus, verá que a métrica agora inclui apenas a dimensão response_code.
istio_request_bytes_sum{response_code="200"} 16550
Adicionar dimensões personalizadas
Siga estas etapas para adicionar dimensões personalizadas:
Na seção Metric Settings, na coluna Client-Side Metrics ou Server-Side Metrics, clique em Edit dimension para uma métrica ativada.
Na caixa de diálogo Customize CLIENT dimension configuration ou Customize SERVER dimension configuration, sob a opção Custom Dimensions, edite o nome e o valor da dimensão e clique em Confirm.
Por exemplo, se você editar a métrica REQUEST_SIZE do lado do servidor e adicionar uma dimensão personalizada com o nome request_path e valor request.path, a métrica exportada incluirá a dimensão personalizada request_path ao acessar o caminho /stats/prometheus.
istio_request_bytes_sum{response_code="200",request_path="/spec.json"} 5800
Reduza o consumo de memória do Envoy e do Prometheus removendo dimensões padrão desnecessárias. No entanto, como a maioria das dimensões costuma ser útil, a seção Metric Settings exibe apenas as dimensões que você removeu explicitamente.
Configurações de rastreamento
As configurações de rastreamento incluem porcentagem de amostragem e tags personalizadas. Para construir cadeias de chamadas completas, o rastreamento exige configurações de relatório consistentes em todos os serviços. Endpoints de relatório ou taxas de amostragem inconsistentes podem levar a rastreamentos incompletos. Por esse motivo, versões do ASM anteriores à 1.24.6.83 não permitem configurações de rastreamento no nível de namespace ou de carga de trabalho. A partir da versão 1.24.6.83, o ASM suporta a modificação de recursos Telemetry usando a API do Kubernetes para habilitar configurações de rastreamento nos níveis de namespace e de carga de trabalho. Para mais informações sobre como configurar recursos Telemetry, consulte Telemetry CRD.
Porcentagem de amostragem
Personalize a porcentagem de amostragem para rastreamento, que determina a porcentagem de solicitações para as quais os rastreamentos são gerados. Um valor de 0 desativa o rastreamento.
Tags personalizadas
Personalize as tags anexadas aos spans de rastreamento reportados. Na seção Tracing Analysis Settings, clique em Add Custom Tags e configure o Name, o Type e o Value.
Os tipos válidos incluem Valor Fixo, Cabeçalho de Solicitação e Variável de Ambiente. A tabela a seguir descreve cada tipo e fornece exemplos.
|
Tipo |
Descrição |
Configuração de exemplo |
|
Fixed Value |
O valor da tag é fixado na string que você especificar. |
|
|
Request Header |
A tag utiliza o valor de um cabeçalho de solicitação especificado. Se o cabeçalho não existir na solicitação, o valor padrão será usado. Por exemplo, obtenha o valor da tag do cabeçalho |
|
|
Environment Variable |
A tag utiliza o valor de uma variável de ambiente especificada da carga de trabalho. Se a variável de ambiente não existir na carga de trabalho, o valor padrão será usado. Por exemplo, obtenha o valor da tag da variável de ambiente |
|