O Service Mesh (ASM) oferece configurações de observabilidade para logs, métricas e rastreamento. No console do ASM, personalize essas definições nos níveis global, de namespace ou específico para workloads. 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 usar 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 Crie uma instância do ASM ou Upgrade an ASM instance.
Escopos
|
Tipo |
Descrição |
|
Global |
A 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 nesse nível. |
|
Personalizado |
Uma configuração personalizada utiliza um seletor de rótulos para definir seu escopo. Cada workload pode ser selecionado 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 ver 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 ver 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 ver 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, personalizar o formato do 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 com 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ê usa um cluster do Alibaba Cloud Container Service for Kubernetes (ACK), também pode 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, na 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 Upgrade an ASM instance.
Na seção Log Settings, defina o Log Output Format como JSON ou TEXT conforme necessário.
Se selecionar JSON, os logs de acesso serão enviados para a stdout do contêiner como strings JSON.
Se 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 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 requisição, cabeçalhos de resposta ou valores internos do Envoy.
Por exemplo, para registrar o cabeçalho de requisição
accept-encoding, defina a accessLogFormat key como accept-encoding, o Type como Request Properties e o accessLogFormat value como Accept-Encoding. O modelo de formato para um cabeçalho de requisiçã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 service.
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 requisições que correspondem à expressão.
Por exemplo, para registrar apenas requisições que atendam à condição Response Http Status >= 400, use a expressão response.code >= 400. Para mais informações, consulte CEL expressions and common fields.
Expressões CEL e campos comuns
As expressões de filtragem de logs seguem o padrão Common Expression Language (CEL). A tabela a seguir lista os campos comuns para expressões CEL. Para mais detalhes, consulte a documentação oficial do CEL e do Envoy.
|
Atributo |
Tipo |
Descrição |
|
request.path |
string |
O caminho da requisição. |
|
request.url_path |
string |
O caminho da requisição sem a string de consulta. |
|
request.host |
string |
A parte do host da URL. |
|
request.method |
string |
O método da requisição. |
|
request.headers |
map<string, string> |
Todos os cabeçalhos da requisiçã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 requisição é recebido. |
|
request.id |
string |
O ID da requisição. |
|
request.protocol |
string |
O protocolo da requisição. Valores válidos: |
|
request.query |
string |
A string de consulta da URL da requisiçã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 corpo e cabeçalhos. |
Configurações de métricas
As configurações de métricas incluem ativar ou desativar a geração de métricas e configurar dimensões de métricas.
Geração de métricas
As métricas dividem-se em métricas do lado do cliente e métricas do lado do servidor.
Métricas do lado do cliente: Geradas quando um sidecar atua como cliente para iniciar requisições. Métricas de gateway também se enquadram nesta categoria.
Métricas do lado do servidor: Geradas quando um sidecar atua como servidor para receber requisiçõ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.
Quando uma métrica está ativada, o sidecar ou gateway do plano de dados expõe essa métrica pelo caminho
/stats/prometheusna porta 15020.Quando uma métrica está desativada, ela não fica 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 do sidecar ou gateway, acessando o caminho
/stats/prometheusna porta local 15020 para ver 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étricas
As dimensões de métricas fornecem informações contextuais ricas. Use essas dimensões para filtrar métricas-alvo no Prometheus. Por exemplo, use a dimensão source_app para filtrar métricas de requisições originadas de uma aplicação cliente específica.
Edite 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 do 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 (correspondente à 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 REQUEST_SIZE padrão do lado do servidor para manter apenas a dimensão response_code e 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, na 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
É possível reduzir 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 services. Endpoints de relatório ou taxas de amostragem inconsistentes podem resultar em 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 workload. A partir da versão 1.24.6.83, o ASM suporta a modificação de recursos Telemetry via API do Kubernetes para habilitar configurações de rastreamento nos níveis de namespace e workload. 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 requisiçõ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 Requisição e Variável de Ambiente. A tabela a seguir descreve cada tipo e fornece exemplos.
|
Tipo |
Descrição |
Exemplo de configuração |
|
Fixed Value |
O valor da tag é fixado na string especificada. |
|
|
Request Header |
A tag utiliza o valor de um cabeçalho de requisição especificado. Se o cabeçalho não existir na requisiçã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 do workload. Se a variável de ambiente não existir no workload, o valor padrão será usado. Por exemplo, obtenha o valor da tag da variável de ambiente |
|