Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Configuração de observabilidade do ASM

Última atualização: Jun 28, 2026

O ASM oferece recursos de observabilidade para logs, métricas e rastreamento. Use o console do ASM para personalizar essas configurações no escopo global, de namespace ou de carga de trabalho específica. Por exemplo, configure o formato de saída de log, defina dimensões de métrica, ative ou desative métricas específicas e defina a porcentagem de amostragem para rastreamento.

Pré-requisitos

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

Escopo

Descrição

Global

As configurações globais aplicam-se a logs, métricas e rastreamento. O sistema permite apenas uma configuração global, que não pode ser excluída. As definições de rastreamento só podem ser configuradas no escopo global.

Namespace

Crie configurações de observabilidade dedicadas para um namespace. Cada namespace admite apenas uma configuração de observabilidade nesse nível.

Personalizado

Utilize um seletor de carga de trabalho para definir o escopo de uma configuração personalizada. Cada carga de trabalho pode pertencer a apenas uma configuração personalizada.

Procedimento

Global

  1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha Observability Management Center > Observability Settings.

  3. Na página Observability Settings, clique em aba Global. Configure os parâmetros de logs, métricas e rastreamento conforme necessário e clique em Submission.

    Para descrições detalhadas das configurações, consulte as seções a seguir.

    Área

    Descrição

    Configurações de log

    Configurações de métricas

    Configurações de rastreamento

Namespace

  1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha Observability Management Center > Observability Settings.

  3. Na página Observability Settings, clique em aba Namespace e, em seguida, clique em Create. Selecione o Namespace desejado, configure os parâmetros de logs e métricas conforme necessário e clique em Create.

    Para descrições detalhadas das configurações, consulte as seções a seguir.

    Área

    Descrição

    Configurações de log

    Configurações de métricas

Personalizado

  1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  2. Na página Mesh Management, clique em nome da instância do ASM. No painel de navegação à esquerda, escolha Observability Management Center > Observability Settings.

  3. 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 os parâmetros de logs e métricas conforme necessário e clique em Create.

    Para descrições detalhadas das configurações, consulte as seções a seguir.

    Área

    Descrição

    Configurações de log

    Configurações de métricas

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 e filtrar logs.

Saída de log de acesso

  1. Na seção Log Settings, ative ou desative a chave Enable Log Output conforme necessário.

    • Se ativada, os sidecars ou gateways do plano de dados enviam logs de acesso para a saída padrão do contêiner.

    • Se desativada, os sidecars ou gateways do plano de dados param de enviar logs para a saída padrão do contêiner.

  2. Visualize os logs na saída padrão do contêiner sidecar do plano de dados.

    Os exemplos a seguir mostram como visualizar logs de acesso usando kubectl.

    1. Execute o comando a seguir para visualizar os logs do sidecar.

      kubectl logs <Pod-name> -c istio-proxy --tail 1

      Exemplo de saída

      {
          "authority_for":"47.110.XX.XXX",
          "bytes_received":"0",
          "bytes_sent":"22382",
          "downstream_local_address":"192.168.0.29:80",
          "downstream_remote_address":"221.220.XXX.XXX:0",
          "duration":"80",
          "istio_policy_status":"-",
          "method":"GET",
          "path":"/static/favicon.ico",
          "protocol":"HTTP/1.1",
          "request_id":"0f2cf829-3da5-4810-a618-08d9745d****",
          "requested_server_name":"outbound_.8000_._.httpbin.default.svc.cluster.local",
          "response_code":"200",
          "response_flags":"-",
          "route_name":"default",
          "start_time":"2023-06-30T04:00:36.841Z",
          "trace_id":"-",
          "upstream_cluster":"inbound|80||",
          "upstream_host":"192.168.0.29:80",
          "upstream_local_address":"127.0.X.X:55879",
          "upstream_response_time":"79",
          "upstream_service_time":"79",
          "upstream_transport_failure_reason":"-",
          "user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.X.X Safari/537.36",
          "x_forwarded_for":"221.220.XXX.XXX"
      }
    2. Execute o comando a seguir para visualizar os logs do gateway de entrada.

      kubectl -n istio-system logs <ingress-gateway-Pod-name> --tail 1

      Exemplo de saída

      {
          "authority_for":"47.110.XX.XXX",
          "bytes_received":"0",
          "bytes_sent":"22382",
          "downstream_local_address":"192.168.0.63:80",
          "downstream_remote_address":"221.220.XXX.XXX:64284",
          "duration":"81",
          "istio_policy_status":"-",
          "method":"GET",
          "path":"/static/favicon.ico",
          "protocol":"HTTP/1.1",
          "request_id":"0f2cf829-3da5-4810-a618-08d9745d****",
          "requested_server_name":"-",
          "response_code":"200",
          "response_flags":"-",
          "route_name":"httpbin",
          "start_time":"2023-06-30T04:00:36.841Z",
          "trace_id":"-",
          "upstream_cluster":"outbound|8000||httpbin.default.svc.cluster.local",
          "upstream_host":"192.168.0.29:80",
          "upstream_local_address":"192.168.0.63:36140",
          "upstream_response_time":"81",
          "upstream_service_time":"81",
          "upstream_transport_failure_reason":"-",
          "user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.X.X Safari/537.36",
          "x_forwarded_for":"221.220.XXX.XXX"
      }
  3. (Opcional) Visualize os logs de acesso no console do ACK.

    Caso utilize um cluster ACK, também é possível visualizar os logs de acesso no console do ACK.

    1. Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.

    2. Na página Clusters, clique em nome do seu cluster. No painel de navegação à esquerda, clique em Workloads > Pods.

    3. 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 o log de acesso.

Formato de saída de log

Nota

Este recurso requer uma instância do ASM versão 1.20.6.36 ou posterior. Para obter 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.

  • Ao selecionar JSON, os logs de acesso são enviados para a saída padrão do contêiner como strings JSON.

  • Ao selecionar TEXT, os logs de acesso são enviados para a saída padrão do contêiner como strings de texto simples.

Formato de log personalizado

  1. Na seção Log Settings, selecione os campos a serem incluídos, modifique as informações dos campos personalizados ou clique em ícone 增加.png para adicionar um novo campo de log.

    A personalização do formato de log só é possível quando Enable Log Output está ativado. Na seção Log Format, os campos de log padrão são obrigatórios e não podem ser modificados. Os campos de log podem recuperar valores de cabeçalhos de requisição, cabeçalhos de resposta ou valores internos do Envoy.

    O exemplo a seguir mostra como imprimir o cabeçalho accept-encoding de uma requisição. Defina accessLogFormat key como accept-encoding, Type como Request Properties e accessLogFormat value como Accept-Encoding. Por exemplo, o campo interno authority_for corresponde à variável de formato %REQ(:AUTHORITY)%, e request_duration corresponde a %REQUEST_DURATION%. Para um campo personalizado como upstream_response_time, se você selecionar Response Attribute como tipo de atributo, a variável de formato será %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%. Para um campo personalizado como accept-encoding, se você selecionar Request Attribute como tipo de atributo, a variável de formato será %REQ(Accept-Encoding)%.

  2. Execute o comando a seguir para verificar nos logs dos componentes do plano de dados a presença do novo campo.

    kubectl logs <Pod-name> -c istio-proxy --tail 1|grep accept-encoding --color=auto

    Exemplo de saída

    {
        "bytes_received":"0",
        "bytes_sent":"9593",
        "downstream_local_address":"192.168.0.29:80",
        "downstream_remote_address":"69.164.XXX.XX:0",
        "duration":"2",
        "istio_policy_status":"-",
        "method":"GET",
        "path":"/",
        "protocol":"HTTP/1.1",
        "request_id":"29939dc9-62be-4ddf-acf6-32cb098d****",
        "requested_server_name":"outbound_.8000_._.httpbin.default.svc.cluster.local",
        "response_code":"200",
        "response_flags":"-",
        "route_name":"default",
        "start_time":"2023-06-30T04:18:19.734Z",
        "trace_id":"-",
        "upstream_cluster":"inbound|80||",
        "upstream_host":"192.168.0.29:80",
        "upstream_local_address":"127.0.X.X:34723",
        "upstream_service_time":"2",
        "upstream_transport_failure_reason":"-",
        "user_agent":"Mozilla/5.0 zgrab/0.x",
        "x_forwarded_for":"69.164.XXX.XX",
        "authority_for":"47.110.XX.XXX",
        "upstream_response_time":"2",
        "accept-encoding":"gzip"
    }

    A saída mostra que o cabeçalho Accept-Encoding, adicionado na Etapa 1, foi gravado no log de acesso.

Filtragem de logs

Na seção Log Settings, selecione Enable Log Filter para ativar a filtragem de logs. Em seguida, insira uma expressão de filtro de log 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 com status HTTP de resposta 400 ou superior, use a expressão response.code >= 400. Para mais informações, consulte Expressões CEL e campos comuns.

Expressões e campos CEL

As expressões de filtro de log utilizam a Common Expression Language (CEL). A tabela a seguir lista os campos comuns para expressões CEL. Para mais informações, consulte CEL e Envoy.

Atributo

Tipo

Descrição

request.path

string

O caminho da requisição.

request.url_path

string

O caminho da requisição, excluindo 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 pelo nome do cabeçalho 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 chega.

request.id

string

O ID da requisição.

request.protocol

string

O protocolo da requisição. Valores válidos: HTTP/1.0, HTTP/1.1, HTTP/2 ou HTTP/3.

request.query

string

A string de consulta na URL da requisição.

response.code

int

O código de status da resposta HTTP.

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 da resposta, indexados pelo nome do cabeçalho 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.

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étrica.

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 são geradas quando um sidecar atua como cliente para iniciar requisições. Métricas de gateway também pertencem à categoria CLIENT.

  • Métricas do lado do servidor: Geradas quando um sidecar é acessado como servidor.

  1. Na seção Metric Settings, na coluna Client-Side Metrics ou Server-Side Metrics, marque ou desmarque a caixa de seleção Enabled da métrica desejada conforme necessário.

    • Se ativada, o sidecar ou gateway do plano de dados expõe a métrica através do caminho /stats/prometheus na porta 15020.

    • Se desativada, a métrica não fica exposta nesta porta.

  2. Execute o comando a seguir para visualizar as métricas expostas pelo sidecar ou gateway.

    Use o comando kubectl para executar um comando curl no contêiner Sidecar ou gateway, acessando o caminho /stats/prometheus na porta local 15020 para visualizar as métricas exportadas.

    kubectl exec <Pod-name> -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus | head -n 10

    Exemplo de saída:

    # 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 adicionam contexto, permitindo filtrar métricas no Prometheus. Por exemplo, use a dimensão source_app para filtrar métricas de requisições de uma aplicação cliente específica.

Editar dimensões padrão

Siga estas etapas para editar as dimensões padrão:

  1. Na seção Metric Settings, na coluna Client-Side Metrics ou Server-Side Metrics, clique em Edit dimension para uma métrica ativada.

  2. 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 usando kubectl para acessar o caminho /stats/prometheus local na porta 15020 e visualize as métricas exportadas.

kubectl exec <Pod-name> -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus

Considere, por exemplo, a métrica istio_request_bytes_sum, que corresponde à métrica REQUEST_SIZE no console. A saída mostra que todas as dimensões estão incluídas.

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

Modifique a métrica REQUEST_SIZE padrão do lado do servidor para manter apenas a dimensão response_code. Em seguida, execute um comando curl para visualizar as métricas exportadas do caminho /stats/prometheus. A saída mostra que apenas a dimensão response_code está incluída.

istio_request_bytes_sum{response_code="200"} 16550

Adicionar dimensões personalizadas

Siga estas etapas para adicionar dimensões personalizadas:

  1. Na seção Metric Settings, na coluna Client-Side Metrics ou Server-Side Metrics, clique em Edit dimension para uma métrica ativada.

  2. Na caixa de diálogo Customize CLIENT dimension configuration ou Customize SERVER dimension configuration, na seção Custom Dimensions, configure o nome e o valor da dimensão e clique em Confirm.

Por exemplo, edite as dimensões personalizadas para a métrica REQUEST_SIZE do lado do servidor. Adicione uma dimensão com o nome request_path e o valor request.path. Depois, execute um comando curl para visualizar as métricas exportadas do caminho /stats/prometheus. A saída mostra que a métrica agora inclui a dimensão personalizada request_path.

istio_request_bytes_sum{response_code="200",request_path="/spec.json"} 5800
Importante

Remover dimensões padrão desnecessárias para seus serviços pode reduzir o consumo de memória do Envoy e do Prometheus. No entanto, como a maioria das dimensões geralmente é necessária, a seção Metric Settings exibe apenas as dimensões removidas.

Configurações de rastreamento

Para construir um rastro completo, o rastreamento exige uma configuração de relatório consistente em toda a cadeia de chamadas. Endpoints de relatório ou porcentagens de amostragem inconsistentes podem resultar em rastros incompletos. Por esse motivo, instâncias do ASM anteriores à versão 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 do recurso Telemetry através da API do Kubernetes para implementar configurações de rastreamento nos níveis de namespace e carga de trabalho. Para mais informações sobre como configurar recursos Telemetry, consulte Descrição do CRD Telemetry.

Porcentagem de amostragem

É possível personalizar a porcentagem de amostragem para rastreamento, que representa a proporção de requisições que acionam o relatório de rastro. Um valor igual a 0 desativa o rastreamento, impedindo que qualquer requisição acione o relatório.

Tags personalizadas

Personalize as tags nos spans de rastreamento reportados. Na seção Tracing Analysis Settings, clique em Add Custom Tags e configure o Name, Type e Value.

O Tipo pode ser Valor Fixo, Cabeçalho de Requisição ou Variável de Ambiente. A tabela a seguir descreve cada tipo e fornece exemplos de configuração.

Tipo

Descrição

Exemplo

Fixed Value

Uma tag de Valor Fixo utiliza o valor especificado por você.

  • Name: env

  • Type: Fixed Value

  • Value: prod

Request Header

Uma tag de Cabeçalho de Requisição lê seu valor de um cabeçalho de requisição específico. Se o cabeçalho não estiver presente na requisição, o valor padrão será utilizado.

Por exemplo, é possível obter o valor da tag a partir do cabeçalho User-Agent. Se o cabeçalho não existir, o valor da tag será definido como o valor padrão unknown.

  • Name: useragent

  • Type: Request Header

  • Value:

    • Header name: User-Agent

    • Default value: unknown

Environment Variable

Uma tag de Variável de Ambiente lê seu valor de uma variável de ambiente específica na carga de trabalho. Se a variável de ambiente não existir na carga de trabalho, o valor padrão será utilizado.

Por exemplo, é possível obter o valor da tag a partir da variável de ambiente ENV. Se a variável de ambiente não existir, o valor da tag será definido como o valor padrão unknown.

  • Name: env

  • Type: Environment Variable

  • Value:

    • Environment Variable Name: ENV

    • Default value: unknown