Tous les produits
Search
Centre de documentation

Alibaba Cloud Service Mesh:Observabilité du trafic : Gérer le trafic LLM avec ASM

Dernière mise à jour :Aug 11, 2026

Outre les fonctionnalités de routage du trafic LLM décrites dans la rubrique précédente, ASM améliore l'observabilité pour les scénarios LLM. Cette rubrique explique comment utiliser le journal d'accès et les métriques de surveillance d'ASM pour observer les informations relatives aux requêtes LLM.

Important

Pour illustrer l'ensemble des fonctionnalités, cette rubrique suppose que vous avez suivi toutes les étapes décrites dans Routage du trafic : Utiliser ASM pour gérer efficacement le trafic LLM. Si vous n'avez effectué que Étape 1 et Étape 2 de cette rubrique, vous pouvez toujours envoyer des requêtes de test à l'aide des commandes de l'Étape 2. Les commandes permettant de consulter les données d'observabilité sont identiques à celles présentées dans cette rubrique.

Étape 1 : Observer les requêtes LLM à l'aide des journaux d'accès

Configurer le journal d'accès

ASM améliore la journalisation des requêtes LLM. Pour afficher ces informations dans le journal d'accès, mettez simplement à jour le format du journal d'accès personnalisé. Pour plus d'informations, consultez la section relative au journal d'accès personnalisé du plan de données.

  1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.

  2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Observability Management Center > Observability Settings.

  3. Dans la section globale Log Settings, ajoutez les trois champs suivants.

    Le contenu textuel est le suivant :

    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)

    Les champs sont définis comme suit :

    • request_model : Le modèle réellement utilisé pour la requête LLM actuelle, par exemple qwen-turbo ou qwen1.5-72b-chat.

    • request_prompt_tokens : Le nombre de jetons d'entrée (input tokens) pour la requête.

    • request_completion_tokens : Le nombre de jetons de sortie (output tokens) pour la requête.

    La plupart des fournisseurs de services LLM facturent en fonction de l'utilisation des jetons. Ces données vous permettent de suivre les requêtes consommatrices de jetons et d'identifier les modèles utilisés.

Vérification

  1. À l'aide du fichier kubeconfig de votre cluster ACK, exécutez séparément les deux commandes suivantes.

    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. Exécutez la commande suivante pour afficher le journal d'accès.

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

    Résultat attendu :

    {"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. Après mise en forme, le contenu du journal se présente comme suit :

    {
        "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 
    }

ASM est intégré à SLS. En collectant et en stockant ces journaux d'accès, vous pouvez observer les appels LLM au niveau des requêtes, définir des règles d'alerte personnalisées et créer des tableaux de bord pertinents. Pour plus d'informations, consultez la rubrique Activer la collecte des journaux du plan de données.

Étape 2 : Ajouter des métriques pour la consommation de jetons

Bien que le journal d'accès fournisse des informations détaillées, les métriques de surveillance offrent une vue d'ensemble plus large. Le proxy de maillage ASM exporte la consommation de jetons au niveau de la charge de travail sous forme de métriques de surveillance, ce qui vous permet d'observer l'utilisation des jetons d'une charge de travail en temps réel.

ASM ajoute deux nouvelles métriques :

  • asm_llm_proxy_prompt_tokens : Le nombre de jetons d'entrée.

  • asm_llm_proxy_completion_tokens : Le nombre de jetons de sortie.

Par défaut, ces deux métriques comportent les dimensions suivantes :

  • llmproxy_source_workload : Le nom de la charge de travail qui envoie la requête.

  • llmproxy_source_workload_namespace : Le namespace où se trouve la source de la requête.

  • llmproxy_destination_service : Le fournisseur de destination.

  • llmproxy_model : Le modèle pour la requête actuelle.

Modifier la configuration de la charge de travail pour générer les nouvelles métriques

Cette étape utilise le déploiement sleep dans le namespace default à titre d'exemple.

  1. Utilisez le fichier kubeconfig de votre cluster ACK pour créer un fichier nommé 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. Exécutez la commande suivante pour créer un ConfigMap nommé asm-llm-proxy-bootstrap-config.

    kubectl apply -f asm-llm-proxy-bootstrap-config.yaml
  3. Exécutez la commande suivante pour modifier le déploiement sleep et ajouter une annotation au pod.

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

Vérification

  1. Exécutez séparément les deux commandes suivantes pour envoyer des requêtes de test.

    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. Exécutez la commande suivante pour afficher les métriques Prometheus exportées par le sidecar de l'application sleep.

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

    Résultat attendu :

    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

    Le résultat confirme que le sidecar exporte les métriques, chacune incluant quatre dimensions par défaut.

    ASM est intégré à ARMS. Pour une analyse et une visualisation plus détaillées, configurez des règles de collecte afin d'envoyer ces métriques vers Managed Service for Prometheus. Pour plus d'informations, consultez la rubrique Collecter les métriques de surveillance vers Managed Service for Prometheus.

Étape 3 : Ajouter des dimensions LLM aux métriques natives

Le service mesh fournit de nombreuses métriques par défaut qui affichent des informations détaillées pour les protocoles HTTP et TCP. Ces métriques offrent une multitude de dimensions, et ASM propose des tableaux de bord Prometheus intégrés puissants basés sur celles-ci.

Toutefois, ces métriques ne contiennent pas d'informations sur les requêtes LLM. Pour remédier à cela, ASM vous permet d'ajouter des informations relatives aux requêtes LLM aux métriques existantes en personnalisant leurs dimensions.

Configurer une dimension personnalisée : model

Cette section montre comment ajouter la dimension model à la métrique REQUEST_COUNT.

  1. Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.

  2. Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Observability Management Center > Observability Settings.

  3. Cliquez sur Edit Dimension pour Edit dimension, sélectionnez l'onglet Custom Dimension et cliquez sur Custom Dimensions. Définissez Dimension Name sur model et Value sur filter_state["wasm.asm.llmproxy.request_model"].

Vérification

  1. Exécutez séparément les deux commandes suivantes pour envoyer des requêtes de test.

    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. Exécutez la commande suivante pour afficher les métriques Prometheus exportées par le sidecar de l'application sleep.

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

    Résultat attendu :

    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

    Le résultat confirme que la dimension model a été ajoutée à la métrique istio_requests_total.

    Grâce à ces métriques de surveillance, vous pouvez configurer des règles d'analyse dans ARMS pour obtenir des analyses plus poussées. Par exemple :

    • Taux de réussite des requêtes pour un modèle spécifique.

    • Latence moyenne de réponse pour un modèle ou un fournisseur spécifique.

Conclusion

Cette rubrique s'appuie sur la rubrique Routage du trafic : Utiliser ASM pour gérer efficacement le trafic LLM et décrit comment effectuer une observation granulaire et globale du trafic LLM à l'aide d'ASM. Vous pouvez activer des fonctionnalités d'observabilité multidimensionnelles avec seulement quelques modifications mineures apportées à la configuration de votre cluster. ASM améliore continuellement ses capacités d'observabilité pour le trafic LLM afin de proposer des solutions plus détaillées et flexibles.