Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Mise à l'échelle élastique basée sur HPA avec ARMS Application Monitoring

Dernière mise à jour :Aug 21, 2026

Lorsque le trafic API augmente soudainement, votre application doit se mettre à l'échelle suffisamment rapidement pour suivre la demande. Ce guide explique comment piloter un Horizontal Pod Autoscaler (HPA) à partir des données QPS (requêtes par seconde) en temps réel collectées par ARMS Application Monitoring. Vos pods s'adaptent ainsi à la charge réelle des requêtes, et non uniquement en fonction de l'utilisation du processeur ou de la mémoire.

Fonctionnement

ARMS Application Monitoring instrumente votre application Java et expose le nombre de requêtes par API sous forme de métriques Prometheus. Le composant ack-alibaba-cloud-metrics-adapter lit ces métriques Prometheus et les expose au HPA Kubernetes via l'API External Metrics. Le HPA ajuste ensuite le nombre de replicas de votre Deployment à la hausse ou à la baisse selon le seuil configuré.

Le flux de données complet est le suivant :

ARMS Application Monitoring collecte le nombre de requêtes par API depuis votre application Java → Alibaba Cloud Prometheus stocke les métriques → ack-alibaba-cloud-metrics-adapter convertit les données Prometheus au format de l'API External Metrics de Kubernetes → Kubernetes HPA lit la métrique et ajuste le nombre de replicas de votre Deployment.

Ce guide utilise l'application arms-springboot-demo et son endpoint /demo/queryUser/10 comme exemple pratique tout au long de la procédure.

Prérequis

Avant de commencer, assurez-vous d'avoir :

hpa

Étape 1 : Installer le composant ARMS Application Monitoring

Installez le composant ack-onepilot pour connecter votre application à ARMS Application Monitoring.

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom du cluster. Dans le volet de navigation de gauche, cliquez sur Add-ons.

  3. Recherchez ack-onepilot, configurez ses paramètres et finalisez l'installation.

Étape 2 : Accorder les autorisations d'accès à ARMS

L'autorisation requise dépend du type de votre cluster.

Pour les clusters ACK Serverless ou les applications connectées à ECI :

Effectuez l'autorisation sur la page Autorisation rapide RAM, puis redémarrez tous les pods du composant ack-onepilot.

Pour les clusters ACK standard :

Vérifiez si un jeton ARMS Addon existe dans le cluster.

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom du cluster. Dans le volet de navigation de gauche, choisissez Configurations > Secrets.

  3. En haut de la page, définissez Namespace sur kube-system et vérifiez si addon.arms.token existe.

  • Si le jeton existe : ARMS effectue automatiquement une autorisation sans mot de passe.

    Les clusters ACK managés incluent un jeton ARMS Addon par défaut. Certains clusters managés plus anciens peuvent ne pas en disposer ; dans ce cas, accordez les autorisations manuellement en suivant les étapes ci-dessous.
  • Si le jeton n'existe pas : Accordez les autorisations manuellement.

    1. Créez une stratégie personnalisée avec le contenu suivant. Consultez la rubrique Étape 1 : Créer une stratégie personnalisée. ``json { "Action": "arms:*", "Resource": "*", "Effect": "Allow" } ``

    2. Attachez la stratégie personnalisée au rôle RAM worker du cluster. Consultez la rubrique Étape 2 : Accorder des autorisations au rôle RAM worker du cluster.

Étape 3 : Activer ARMS Application Monitoring pour votre application Java

Activez la surveillance en ajoutant des labels à la section spec.template.metadata de votre Deployment.

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom du cluster. Dans le volet de navigation de gauche, choisissez Workloads > Deployments.

  3. Sur la page Deployments, cliquez sur Create from YAML.

  4. Sélectionnez un modèle dans Sample Templates. Dans le champ Templates, ajoutez les labels suivants à spec.template.metadata :

    L'activation d'Application Security entraîne des frais supplémentaires. Consultez Qu'est-ce qu'Application Security ? et Facturation .
    labels:
      armsPilotAutoEnable: "on"
      armsPilotCreateAppName: "<your-deployment-name>"  # Required: replace with your application name
      one-agent.jdk.version: "OpenJDK11"               # Required only for JDK 11
      armsSecAutoEnable: "on"                           # Optional: enables Application Security

    Le YAML complet ci-dessous déploie l'application arms-springboot-demo avec la surveillance ARMS activée. Exemple YAML complet (Java)

    apiVersion: v1
    kind: Namespace
    metadata:
      name: arms-demo
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: arms-springboot-demo
      namespace: arms-demo
      labels:
        app: arms-springboot-demo
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: arms-springboot-demo
      template:
        metadata:
          labels:
            app: arms-springboot-demo
            armsPilotAutoEnable: "on"
            armsPilotCreateAppName: "arms-k8s-demo"
            one-agent.jdk.version: "OpenJDK11"
        spec:
          containers:
            - resources:
                limits:
                  cpu: 0.5
              image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
              imagePullPolicy: Always
              name: arms-springboot-demo
              env:
                - name: SELF_INVOKE_SWITCH
                  value: "true"
                - name: COMPONENT_HOST
                  value: "arms-demo-component"
                - name: COMPONENT_PORT
                  value: "6666"
                - name: MYSQL_SERVICE_HOST
                  value: "arms-demo-mysql"
                - name: MYSQL_SERVICE_PORT
                  value: "3306"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        name: arms-springboot-demo
      name: arms-springboot-demo
      namespace: arms-demo
    spec:
      ports:
        - name: arms-demo-svc
          port: 6666
          targetPort: 8888
      selector:
        app: arms-springboot-demo
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: arms-springboot-demo-subcomponent
      namespace: arms-demo
      labels:
        app: arms-springboot-demo-subcomponent
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: arms-springboot-demo-subcomponent
      template:
        metadata:
          labels:
            app: arms-springboot-demo-subcomponent
            armsPilotAutoEnable: "on"
            armsPilotCreateAppName: "arms-k8s-demo-subcomponent"
            one-agent.jdk.version: "OpenJDK11"
        spec:
          containers:
            - resources:
                limits:
                  cpu: 0.5
              image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
              imagePullPolicy: Always
              name: arms-springboot-demo-subcomponent
              env:
                - name: SELF_INVOKE_SWITCH
                  value: "false"
                - name: MYSQL_SERVICE_HOST
                  value: "arms-demo-mysql"
                - name: MYSQL_SERVICE_PORT
                  value: "3306"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        name: arms-demo-component
      name: arms-demo-component
      namespace: arms-demo
    spec:
      ports:
        - name: arms-demo-component-svc
          port: 6666
          targetPort: 8888
      selector:
        app: arms-springboot-demo-subcomponent
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: arms-demo-mysql
      namespace: arms-demo
      labels:
        app: mysql
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mysql
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
            - resources:
                limits:
                  cpu: 0.5
              image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-demo-mysql:v0.1
              name: mysql
              ports:
                - containerPort: 3306
                  name: mysql
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        name: mysql
      name: arms-demo-mysql
      namespace: arms-demo
    spec:
      ports:
        - name: arms-mysql-svc
          port: 3306
          targetPort: 3306
      selector:
        app: mysql
  5. Vérifiez le déploiement. Sur la page Deployments, le bouton ARMS Console apparaît dans la colonne Actions pour l'application cible. Cliquez sur ARMS Console pour consulter les données de surveillance. Dans le volet de navigation de gauche, cliquez sur Interface Invocation pour afficher les détails d'accès aux interfaces HTTP. L'application de démonstration génère automatiquement des appels d'interface continus.

    La page Interface Invocation affiche la liste des API avec les métriques de temps de réponse, de nombre de requêtes et de nombre d'erreurs, telles que /demo/randomRT/{id} (5,0 s), /demo/invokeConponent (1,2 s), /demo/queryUser/{id} (218,07 ms), /demo/queryNotExistDB/{id} (2,5 ms) et /demo/queryException/{id} (1,4 ms). La page présente également un diagramme de topologie des appels et des graphiques de tendance pour le nombre de requêtes et le temps de réponse.

  6. Créez un Service pour arms-springboot-demo et exposez l'API de l'application via Server Load Balancer (SLB).

    1. Sur la page Clusters, cliquez sur le nom du cluster. Dans le volet de navigation de gauche, choisissez Network > Services.

    2. Cliquez sur Create, configurez le Service, puis cliquez sur OK. Consultez la rubrique Créer un Service pour plus de détails sur la configuration.

    3. Une fois le Service créé, notez l'External IP de arms-demo-svc (par exemple, 47.94.XX.XX:8080).

    4. Testez l'endpoint : ``shell curl http://47.94.XX.XX:8080/demo/queryUser/10 ` Résultat attendu : `json {"id":1,"name":"KeyOfSpectator","password":"12****"} ``

Étape 4 : Configurer l'adaptateur de métriques

Important

La surveillance Alibaba Cloud Prometheus et le composant ack-alibaba-cloud-metrics-adapter (déployé dans kube-system) doivent tous deux être opérationnels avant de poursuivre.

Cette étape mappe les données de comptage de requêtes ARMS APM vers une métrique externe nommée que le HPA peut consommer. Le nom de métrique utilisé dans hpa.yaml (Étape 5) est généré à partir du champ name.as que vous configurez ici.

4,1 Obtenir l'URL Prometheus

  1. Connectez-vous à la console ARMS.

  2. Dans le volet de navigation de gauche, choisissez Managed Service for Prometheus > Instances.

  3. Cliquez sur le nom de l'instance cible (format : arms_metrics_{RegionId}_XXX). Dans le volet de navigation de gauche, cliquez sur Settings.

  4. Au bas de l'onglet Settings, notez l'HTTP API URL (Grafana Read URL). Il s'agit de votre URL Prometheus.

    La page affiche l'HTTP API URL (Grafana Read URL) HTTP API URL (Grafana Read URL) avec Network et URL :

    • Public : https://{RegionId}.arms.aliyuncs.com:9443/api/v1/prometheus/{InstanceID}/{UserID}/{Secret}/cn-beijing

    • Internal : http://{RegionId}-intranet.arms.aliyuncs.com:9090/api/v1/prometheus/{InstanceID}/{UserID}/{Secret}/cn-beijing

    Copiez l'adresse du réseau public comme URL Prometheus pour les étapes suivantes.

4,2 Définir l'URL Prometheus dans l'adaptateur

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom du cluster. Dans le volet de navigation de gauche, choisissez Applications > Helm.

  3. Sur la page Helm, recherchez ack-alibaba-cloud-metrics-adapter et cliquez sur Update dans la colonne Actions.

  4. Dans le panneau Update Release, insérez l'URL Prometheus que vous avez notée précédemment.

    custom:
        - metricsQuery: sum(sum(container_memory_working_set_bytes)by(pod)  * on(pod)
            group_right sum(<<.Series>>{<<.LabelMatchers>>}) by(pod)) / 1024 / 1024
            / 1024
          name:
            as: container_memory_working_total
            matches: ^(.*)_labels
          resources:
            overrides:
              namespace:
                resource: namespace
              pod:
                resource: pod
          seriesQuery: kube_pod_labels{namespace!="",pod!=""}
        default: false
        enabled: true
        logLevel: 4
        metricsRelistInterval: 1m
        tls:
          ca: ""
          certificate: ""
          enable: false
          key: ""
        url: http://cn-beijing-intranet.arms.aliyuncs.com:9090/api/v1/prometheus/
          8cba801fff65546a3012e9a6843xxx/xxx0538168824xxx   xxx a174ae4xxx2xxx xxx xxx xxx
        ramRoleType: restricted
        replicas: 1
        service:
          type: ClusterIP
        serviceAccountName: admin
        tolerations: []
      ConfigReloader:
        image:
          repository: registry.aliyuncs.com/acs/configmap-reload
          tag: v0.0.1

4,3 Ajouter une règle de métrique ARMS à adapter-config

  1. Sur la page Helm, cliquez sur ack-alibaba-cloud-metrics-adapter.

  2. Sur l'onglet Basic Information, cliquez sur adapter-config.

  3. Dans le coin supérieur droit, cliquez sur Edit YAML.

  4. Ajoutez la règle suivante à adapter-config :

    rules:
    - metricsQuery: sum(sum_over_time_lorc(<<.Series>>{service="arms-k8s-demo",clusterId="cc13c8725******a9839190b7d1695d7",serverIp=~".*",callKind=~"http|rpc|custom_entry|server|consumer|schedule",source="apm",<<.LabelMatchers>>}[1m])) or vector(0)
    #                                                    ^^ Replace with your ARMS service name
    #                                                                          ^^ Replace with your cluster ID
      name:
        as: "${1}_per_second"       # Generates the HPA metric name: arms_app_requests_per_second
        matches: "^(.*)_count_ign_destid_endpoint_ppid_prpc"
      resources:
        namespaced: false
      seriesQuery: arms_app_requests_count_ign_destid_endpoint_ppid_prpc{service="arms-k8s-demo",clusterId="cc13c8725******a9839190b7d1695d7"}
    #                                                                     ^^ Replace with your ARMS service name and cluster ID
    

    Remplacez arms-k8s-demo par le nom de votre service ARMS et cc13c8725a9839190b7d1695d7 par l'ID de votre cluster. Exemple complet de adapter-config

    apiVersion: v1
    data:
      config.yaml: >
        rules:
    
        - metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (<<.GroupBy>>)
          name:
            as: ${1}_bytes_per_second
            matches: ^(.*)_bytes
          resources:
            overrides:
              namespace:
                resource: namespace
              pod:
                resource: pod
          seriesQuery: container_memory_working_set_bytes{namespace!="",pod!=""}
        - metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[1m])) by
        (<<.GroupBy>>)
          name:
            as: ${1}_core_per_second
            matches: ^(.*)_seconds_total
          resources:
            overrides:
              namespace:
                resource: namespace
              pod:
                resource: pod
          seriesQuery: container_cpu_usage_seconds_total{namespace!="",pod!=""}
        - metricsQuery: sum(sum_over_time_lorc(<<.Series>>{service="arms-k8s-demo",clusterId="cc13c8725******a9839190b7d1695d7",serverIp=~".*",callKind=~"http|rpc|custom_entry|server|consumer|schedule",source="apm",<<.LabelMatchers>>}[1m])) or vector(0)
          name:
            as: "${1}_per_second"
            matches: "^(.*)_count_ign_destid_endpoint_ppid_prpc"
          resources:
            namespaced: false
          seriesQuery: arms_app_requests_count_ign_destid_endpoint_ppid_prpc{service="arms-k8s-demo",clusterId="cc13c8725******a9839190b7d1695d7"}
    kind: ConfigMap
    metadata:
      annotations:
        meta.helm.sh/release-name: ack-alibaba-cloud-metrics-adapter
        meta.helm.sh/release-namespace: kube-system
      creationTimestamp: '2024-04-02T02:29:32Z'
      labels:
        app.kubernetes.io/managed-by: Helm
      managedFields:
        - apiVersion: v1
          fieldsType: FieldsV1
          fieldsV1:
            'f:data':
              .: {}
              'f:config.yaml': {}
            'f:metadata':
              'f:annotations':
                .: {}
                'f:meta.helm.sh/release-name': {}
                'f:meta.helm.sh/release-namespace': {}
              'f:labels':
                .: {}
                'f:app.kubernetes.io/managed-by': {}
          manager: rc
          operation: Update
          time: '2024-04-02T02:40:52Z'
      name: adapter-config
      namespace: kube-system
      resourceVersion: '8223891'
      uid: 294634e6-aeae-4048-9e69-365a4ce4b2cd

4,4 Vérifier la disponibilité de la métrique

  1. Vérifiez que arms_app_requests_per_second apparaît dans l'API External Metrics :

    kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1"

    Recherchez "name":"arms_app_requests_per_second" dans le résultat.

  2. Vérifiez que la métrique renvoie des données en temps réel :

    kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/arms-demo/arms_app_requests_per_second" | jq .

    Résultat attendu :

    {
      "kind": "ExternalMetricValueList",
      "apiVersion": "external.metrics.k8s.io/v1beta1",
      "metadata": {},
      "items": [
        {
          "metricName": "arms_app_requests_per_second",
          "metricLabels": {},
          "timestamp": "2025-02-13T02:51:31Z",
          "value": "2"
        }
      ]
    }

Étape 5 : Créer le HPA

Créez le fichier hpa.yaml avec le contenu suivant.

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: test-hpa
  namespace: arms-demo
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: arms-springboot-demo
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: External
      external:
        metric:
          name: arms_app_requests_per_second   # Must match the name generated by adapter-config (name.as field in Step 4.3)
        target:
          type: AverageValue
          averageValue: 40                     # Scale out when QPS exceeds 40; External metrics support Value and AverageValue only

Appliquez le HPA :

kubectl apply -f hpa.yaml

Vérifiez qu'il récupère bien les données de métriques :

kubectl get hpa -n arms-demo

Résultat attendu :

NAME       REFERENCE                         TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
test-hpa   Deployment/arms-springboot-demo   12/40 (avg)   1         10        1          113s

Une valeur non vide pour TARGETS confirme que le HPA lit correctement les données de métriques.

Étape 6 : Vérifier la mise à l'échelle élastique avec un test de charge

Exécutez un test de charge sur l'application de démonstration. Remplacez 47.94.XX.XX:8080 par l'endpoint externe de arms-demo-svc.

ab -c 50 -n 2000 http://47.94.XX.XX:8080/demo/queryUser/10

Pendant l'exécution du test, surveillez le HPA :

kubectl get hpa -n arms-demo

Résultat attendu après la mise à l'échelle :

NAME       REFERENCE                         TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
test-hpa   Deployment/arms-springboot-demo   47500m/40 (avg)   1         10        10         6m43s

Vérifiez l'effet de la mise à l'échelle selon trois perspectives :

  • Console ARMS : Le volume de requêtes pour l'interface augmente fortement pendant le test de charge.

    Sur l'onglet Overview d'ARMS Application Monitoring, les changements de métriques suivants sont observés pendant le test de charge (environ entre 10 h 58 et 10 h 59) :

    • Requests per minute : Les requêtes d'entrée HTTP passent de près de 0 à environ 1 800.

    • Response time per minute : Le temps de réponse des entrées HTTP oscille entre 800 ms et 1,6 s.

    • Slow calls per minute : Augmente jusqu'à environ 6 vers la fin du test.

    • HTTP status code statistics : Le nombre de codes d'état 200 augmente brusquement jusqu'à environ 2 400, suivant la progression du nombre de requêtes, tandis que les autres codes d'état restent proches de 0.

  • Tableau de bord Prometheus : Le HPA déclenche une mise à l'échelle horizontale lorsque le QPS dépasse le seuil configuré.

    Dans le tableau de bord Grafana, le graphique linéaire de la métrique arms_app_requests_count montre une pointe prononcée pendant le test de charge. La valeur atteint un pic d'environ 33,5 min, puis retombe à 1,40 min. Les statistiques du panneau indiquent un minimum de 8 s, un maximum de 33,5 min, une moyenne de 2,61 min et une valeur actuelle de 1,40 min.

  • Cluster ACK : Le nombre de replicas de pods s'ajuste à la hausse et à la baisse en fonction du QPS des appels d'interface.

Pour afficher l'historique complet des événements de mise à l'échelle, exécutez :

kubectl describe hpa test-hpa -n arms-demo

Exemples avancés

Les exemples suivants montrent comment configurer l'adaptateur de métriques pour des scénarios de mise à l'échelle plus spécifiques. Tous les exemples utilisent sum_over_time_lorc pour agréger le nombre de requêtes sur une fenêtre d'une minute.

Mettre à l'échelle plusieurs services indépendamment

Définissez une règle par service, en attribuant à chacun un nom de métrique unique afin que le HPA puisse les cibler séparément.

rules:
- metricsQuery: sum(sum_over_time_lorc(<<.Series>>{service="arms-k8s-demo",clusterId="cc13c8725******a9839190b7d1695d7",serverIp=~".*",callKind=~"http|rpc|custom_entry|server|consumer|schedule",source="apm",<<.LabelMatchers>>}[1m])) or vector(0)
  name:
    as: "${1}_per_second_arms_k8s_demo"
    matches: "^(.*)_count_ign_destid_endpoint_ppid_prpc"
  resources:
    namespaced: false
  seriesQuery: arms_app_requests_count_ign_destid_endpoint_ppid_prpc{service="arms-k8s-demo",clusterId="cc13c8725******a9839190b7d1695d7"}
- metricsQuery: sum(sum_over_time_lorc(<<.Series>>{service="arms-k8s-demo-subcomponent",clusterId="cc13c8725******a9839190b7d1695d7",serverIp=~".*",callKind=~"http|rpc|custom_entry|server|consumer|schedule",source="apm",<<.LabelMatchers>>}[1m])) or vector(0)
  name:
    as: "${1}_per_second_arms_k8s_demo_subcomponent"
    matches: "^(.*)_count_ign_destid_endpoint_ppid_prpc"
  resources:
    namespaced: false
  seriesQuery: arms_app_requests_count_ign_destid_endpoint_ppid_prpc{service="arms-k8s-demo-subcomponent",clusterId="cc13c8725******a9839190b7d1695d7"}

Mettre à l'échelle en fonction d'un endpoint RPC spécifique

Ajoutez le label rpc à la requête pour cibler un seul endpoint, plutôt que tout le trafic d'un service.

rules:
- metricsQuery: sum(sum_over_time_lorc(<<.Series>>{service="arms-k8s-demo",rpc="/demo/queryUser/{id}",clusterId="cc13c8725******a9839190b7d1695d7",serverIp=~".*",callKind=~"http|rpc|custom_entry|server|consumer|schedule",source="apm",<<.LabelMatchers>>}[1m])) or vector(0)
  name:
    as: "${1}_per_second_arms_k8s_demo_queryUser"
    matches: "^(.*)_count_ign_destid_endpoint_ppid_prpc"
  resources:
    namespaced: false
  seriesQuery: arms_app_requests_count_ign_destid_endpoint_ppid_prpc{service="arms-k8s-demo",rpc="/demo/queryUser/{id}",clusterId="cc13c8725******a9839190b7d1695d7"}
- metricsQuery: sum(sum_over_time_lorc(<<.Series>>{service="arms-k8s-demo",rpc="/demo/queryException/{id}",clusterId="cc13c8725******a9839190b7d1695d7",serverIp=~".*",callKind=~"http|rpc|custom_entry|server|consumer|schedule",source="apm",<<.LabelMatchers>>}[1m])) or vector(0)
  name:
    as: "${1}_per_second__arms_k8s_demo_queryException"
    matches: "^(.*)_count_ign_destid_endpoint_ppid_prpc"
  resources:
    namespaced: false
  seriesQuery: arms_app_requests_count_ign_destid_endpoint_ppid_prpc{service="arms-k8s-demo",rpc="/demo/queryException/{id}",clusterId="cc13c8725******a9839190b7d1695d7"}
- metricsQuery: sum(sum_over_time_lorc(<<.Series>>{service="arms-k8s-demo",rpc="/demo/queryNotExistDB/{id}",clusterId="cc13c8725******a9839190b7d1695d7",serverIp=~".*",callKind=~"http|rpc|custom_entry|server|consumer|schedule",source="apm",<<.LabelMatchers>>}[1m])) or vector(0)
  name:
    as: "${1}_per_second__arms_k8s_demo_queryNotExistDB"
    matches: "^(.*)_count_ign_destid_endpoint_ppid_prpc"
  resources:
    namespaced: false
  seriesQuery: arms_app_requests_count_ign_destid_endpoint_ppid_prpc{service="arms-k8s-demo",rpc="/demo/queryNotExistDB/{id}",clusterId="cc13c8725******a9839190b7d1695d7"}

Références