Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Observabilidade de tráfego: Gerencie o tráfego de LLM com ASM

Última atualização: Jun 28, 2026

Além dos recursos de roteamento de tráfego de LLM descritos no tópico anterior, o ASM aprimora a observabilidade para cenários de LLM. Este tópico explica como usar o log de acesso e as métricas de monitoramento do ASM para observar informações de requisições de LLM.

Importante

Para demonstrar todos os recursos, este tópico pressupõe que você concluiu todas as etapas em Roteamento de tráfego: Use o ASM para gerenciar eficientemente o tráfego de LLM. Caso tenha concluído apenas a Etapa 1 e a Etapa 2 daquele tópico, ainda é possível enviar requisições de teste com os comandos da Etapa 2. Os comandos para visualizar dados de observabilidade são os mesmos apresentados neste tópico.

Etapa 1: Observe requisições de LLM com logs de acesso

Configure o log de acesso

O ASM aprimora o registro de logs para requisições de LLM. Para visualizar essas informações no log de acesso, atualize o formato do log de acesso personalizado. Para mais informações, consulte log de acesso personalizado do plano de dados.

  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. Nas configurações globais de Log Settings, adicione os três campos a seguir.

    Conteúdo de texto:

    request_model				FILTER_STATE(wasm.asm.llmproxy.request_model:PLAIN)
    request_prompt_tokens			FILTER_STATE(wasm.asm.llmproxy.request_prompt_tokens:PLAIN)
    request_completion_tokens		FILTER_STATE(wasm.asm.llmproxy.request_completion_tokens:PLAIN)

    Definição dos campos:

    • request_model: Modelo efetivamente usado na requisição de LLM atual, como qwen-turbo ou qwen1.5-72b-chat.

    • request_prompt_tokens: Quantidade de tokens de entrada da requisição.

    • request_completion_tokens: Quantidade de tokens de saída da requisição.

    A maioria dos provedores de serviços de LLM cobra com base no uso de tokens. Esses dados permitem rastrear requisições que consomem tokens e identificar os modelos utilizados.

Verificação

  1. Com o kubeconfig do seu cluster ACK, execute separadamente os dois comandos abaixo.

    kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
    --header 'Content-Type: application/json' \
    --data '{
        "messages": [
            {"role": "user", "content": "Please introduce yourself"}
        ]
    }'
    kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
    --header 'Content-Type: application/json' \
    --header 'user-type: subscriber' \
    --data '{
        "messages": [
            {"role": "user", "content": "Please introduce yourself"}
        ]
    }'
  2. Execute o comando a seguir para visualizar o log de acesso.

    kubectl logs deployments/sleep -c istio-proxy | tail -2

    Saída esperada:

    {"bytes_received":"85","bytes_sent":"617","downstream_local_address":"47.93.xxx.xx:80","downstream_remote_address":"192.168.34.235:39066","duration":"7640","istio_policy_status":"-","method":"POST","path":"/compatible-mode/v1/chat/completions","protocol":"HTTP/1.1","request_id":"d0e17f66-f300-411a-8c32-xxxxxxxxxxxxx","requested_server_name":"-","response_code":"200","response_flags":"-","route_name":"-","start_time":"2024-07-12T03:20:03.993Z","trace_id":"-","upstream_cluster":"outbound|80||dashscope.aliyuncs.com","upstream_host":"47.93.xxx.xx:443","upstream_local_address":"192.168.34.235:38476","upstream_service_time":"7639","upstream_response_time":"7639","upstream_transport_failure_reason":"-","user_agent":"curl/8.8.0","x_forwarded_for":"-","authority_for":"dashscope.aliyuncs.com","request_model":"qwen1.5-72b-chat","request_prompt_tokens":"3","request_completion_tokens":"55"}
    {"bytes_received":"85","bytes_sent":"809","downstream_local_address":"47.93.xxx.xx:80","downstream_remote_address":"192.168.34.235:41090","duration":"2759","istio_policy_status":"-","method":"POST","path":"/compatible-mode/v1/chat/completions","protocol":"HTTP/1.1","request_id":"d89faada-6af3-4ac3-b4fd-xxxxxxxxxxxxx","requested_server_name":"-","response_code":"200","response_flags":"-","route_name":"vip-route","start_time":"2024-07-12T03:20:30.854Z","trace_id":"-","upstream_cluster":"outbound|80||dashscope.aliyuncs.com","upstream_host":"47.93.xxx.xx:443","upstream_local_address":"192.168.34.235:38476","upstream_service_time":"2759","upstream_response_time":"2759","upstream_transport_failure_reason":"-","user_agent":"curl/8.8.0","x_forwarded_for":"-","authority_for":"dashscope.aliyuncs.com","request_model":"qwen-turbo","request_prompt_tokens":"11","request_completion_tokens":"90"}
  3. Após a formatação, o conteúdo do log fica assim:

    {
        "duration": "7640",
        "response_code": "200",
        "authority_for": "dashscope.aliyuncs.com",  --Actual LLM provider accessed
        "request_model": "qwen1.5-72b-chat",    	--Model used by the current request
        "request_prompt_tokens": "3",		--Number of input tokens for the current request
        "request_completion_tokens": "55"		--Number of output tokens for the current request
    }
    {
      "duration": "2759",
      "response_code": "200",
      "authority_for": "dashscope.aliyuncs.com",  --Actual LLM provider accessed
      "request_model": "qwen-turbo",    	      --Model used by the current request
      "request_prompt_tokens": "11",	      --Number of input tokens for the current request
      "request_completion_tokens": "90"	      --Number of output tokens for the current request 
    }

O ASM integra-se ao SLS. Ao coletar e armazenar esses logs de acesso, você observa chamadas de LLM no nível de requisição, define regras de alerta personalizadas e cria painéis informativos. Para mais informações, consulte Ativar coleta de logs do plano de dados.

Etapa 2: Adicione métricas para consumo de tokens

Enquanto o log de acesso fornece informações detalhadas, as métricas de monitoramento oferecem uma visão de alto nível. O proxy de malha do ASM exporta o consumo de tokens no nível de carga de trabalho como métricas de monitoramento, permitindo observar o uso de tokens de uma carga de trabalho em tempo real.

O ASM adiciona duas novas métricas:

  • asm_llm_proxy_prompt_tokens: Quantidade de tokens de entrada.

  • asm_llm_proxy_completion_tokens: Quantidade de tokens de saída.

Por padrão, essas duas métricas possuem as seguintes dimensões:

  • llmproxy_source_workload: Nome da carga de trabalho que envia a requisição.

  • llmproxy_source_workload_namespace: Namespace onde a origem da requisição está localizada.

  • llmproxy_destination_service: Provedor de destino.

  • llmproxy_model: Modelo da requisição atual.

Modifique a configuração da carga de trabalho para gerar novas métricas

Esta etapa usa o deployment sleep no namespace default como exemplo.

  1. Use o arquivo kubeconfig do seu cluster ACK para criar um arquivo chamado asm-llm-proxy-bootstrap-config.yaml.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: asm-llm-proxy-bootstrap-config
    data:
      custom_bootstrap.json: |
        "stats_config": {
          "stats_tags":[
            {
            "tag_name": "llmproxy_source_workload",
            "regex": "(\\|llmproxy_source_workload=([^|]*))"
            },
            {
              "tag_name": "llmproxy_source_workload_namespace",
              "regex": "(\\|llmproxy_source_workload_namespace=([^|]*))"
            },
            {
              "tag_name": "llmproxy_destination_service",
              "regex": "(\\|llmproxy_destination_service=([^|]*))"
            },
            {
              "tag_name": "llmproxy_model",
              "regex": "(\\|llmproxy_model=([^|]*))"
            }
          ]
        }
  2. Execute o comando a seguir para criar um ConfigMap chamado asm-llm-proxy-bootstrap-config.

    kubectl apply -f asm-llm-proxy-bootstrap-config.yaml
  3. Execute o comando a seguir para modificar o deployment sleep e adicionar uma anotação ao pod.

    kubectl patch deployment sleep -p '{"spec":{"template":{"metadata":{"annotations":{"sidecar.istio.io/bootstrapOverride":"asm-llm-proxy-bootstrap-config"}}}}}'

Verificação

  1. Execute separadamente os dois comandos a seguir para enviar requisições de teste.

    kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
    --header 'Content-Type: application/json' \
    --data '{
        "messages": [
            {"role": "user", "content": "Please introduce yourself"}
        ]
    }'
    kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
    --header 'Content-Type: application/json' \
    --header 'user-type: subscriber' \
    --data '{
        "messages": [
            {"role": "user", "content": "Please introduce yourself"}
        ]
    }'
  2. Execute o comando a seguir para visualizar as métricas do Prometheus exportadas pelo sidecar da aplicação sleep.

    kubectl exec deployments/sleep -it -c istio-proxy -- curl localhost:15090/stats/prometheus | grep llmproxy

    Saída esperada:

    asm_llm_proxy_completion_tokens{llmproxy_source_workload="sleep",llmproxy_source_workload_namespace="default",llmproxy_destination_service="dashscope.aliyuncs.com",llmproxy_model="qwen1.5-72b-chat"} 72
    asm_llm_proxy_completion_tokens{llmproxy_source_workload="sleep",llmproxy_source_workload_namespace="default",llmproxy_destination_service="dashscope.aliyuncs.com",llmproxy_model="qwen-turbo"} 85
    asm_llm_proxy_prompt_tokens{llmproxy_source_workload="sleep",llmproxy_source_workload_namespace="default",llmproxy_destination_service="dashscope.aliyuncs.com",llmproxy_model="qwen1.5-72b-chat"} 3
    asm_llm_proxy_prompt_tokens{llmproxy_source_workload="sleep",llmproxy_source_workload_namespace="default",llmproxy_destination_service="dashscope.aliyuncs.com",llmproxy_model="qwen-turbo"} 11

    A saída confirma que o sidecar exporta as métricas, cada uma incluindo quatro dimensões padrão.

    O ASM integra-se ao ARMS. Para análises e visualizações mais detalhadas, configure regras de coleta para enviar essas métricas ao Managed Service for Prometheus. Para mais informações, consulte Coletar métricas de monitoramento no Managed Service for Prometheus.

Etapa 3: Adicione dimensões de LLM às métricas nativas

A malha de serviço fornece diversas métricas padrão que exibem informações detalhadas para protocolos HTTP e TCP. Essas métricas oferecem uma grande variedade de dimensões, e o ASM disponibiliza painéis nativos robustos para Prometheus baseados nelas.

No entanto, essas métricas não contêm informações sobre requisições de LLM. Para resolver isso, o ASM permite adicionar informações de requisições de LLM às métricas existentes por meio da personalização de suas dimensões.

Configure uma dimensão personalizada: model

Esta seção demonstra como adicionar a dimensão model à métrica REQUEST_COUNT.

  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. Clique em Edit Dimension para Edit dimension, selecione a aba Custom Dimension e clique em Custom Dimensions. Defina Dimension Name como model e Value como filter_state["wasm.asm.llmproxy.request_model"].

Verificação

  1. Execute separadamente os dois comandos a seguir para enviar requisições de teste.

    kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
    --header 'Content-Type: application/json' \
    --data '{
        "messages": [
            {"role": "user", "content": "Please introduce yourself"}
        ]
    }'
    kubectl exec deployment/sleep -it -- curl --location 'http://dashscope.aliyuncs.com' \
    --header 'Content-Type: application/json' \
    --header 'user-type: subscriber' \
    --data '{
        "messages": [
            {"role": "user", "content": "Please introduce yourself"}
        ]
    }'
  2. Execute o comando a seguir para visualizar as métricas do Prometheus exportadas pelo sidecar da aplicação sleep.

    kubectl exec deployments/sleep -it -c istio-proxy -- curl localhost:15090/stats/prometheus | grep istio_requests_total

    Saída esperada:

    istio_requests_total{reporter="source",source_workload="sleep",source_canonical_service="sleep",source_canonical_revision="latest",source_workload_namespace="default",source_principal="unknown",source_app="sleep",source_version="",source_cluster="cce8d2c1d1e8d4abc8d5c180d160669cc",destination_workload="unknown",destination_workload_namespace="unknown",destination_principal="unknown",destination_app="unknown",destination_version="unknown",destination_service="dashscope.aliyuncs.com",destination_canonical_service="unknown",destination_canonical_revision="latest",destination_service_name="dashscope.aliyuncs.com",destination_service_namespace="unknown",destination_cluster="unknown",request_protocol="http",response_code="200",grpc_response_status="",response_flags="-",connection_security_policy="unknown",model="qwen1.5-72b-chat"} 1
    istio_requests_total{reporter="source",source_workload="sleep",source_canonical_service="sleep",source_canonical_revision="latest",source_workload_namespace="default",source_principal="unknown",source_app="sleep",source_version="",source_cluster="cce8d2c1d1e8d4abc8d5c180d160669cc",destination_workload="unknown",destination_workload_namespace="unknown",destination_principal="unknown",destination_app="unknown",destination_version="unknown",destination_service="dashscope.aliyuncs.com",destination_canonical_service="unknown",destination_canonical_revision="latest",destination_service_name="dashscope.aliyuncs.com",destination_service_namespace="unknown",destination_cluster="unknown",request_protocol="http",response_code="200",grpc_response_status="",response_flags="-",connection_security_policy="unknown",model="qwen-turbo"} 1

    A saída confirma que a dimensão model foi adicionada à métrica istio_requests_total.

    Com essas métricas de monitoramento, é possível configurar regras de análise no ARMS para obter insights mais profundos. Por exemplo:

    • Taxa de sucesso de requisições para um modelo específico.

    • Latência média de resposta para um modelo ou provedor específico.

Conclusão

Este tópico complementa o conteúdo de Roteamento de tráfego: Use o ASM para gerenciar eficientemente o tráfego de LLM e descreve como realizar observações detalhadas e de alto nível do tráfego de LLM usando o ASM. É possível ativar recursos de observabilidade multidimensional com apenas pequenas modificações na configuração do seu cluster. O ASM aprimora continuamente suas capacidades de observabilidade para tráfego de LLM, visando oferecer soluções mais detalhadas e flexíveis.