Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:HPA-based elastic scaling with ARMS Application Monitoring

Última actualización: Sep 17, 2026

Cuando el tráfico de una API aumenta repentinamente, la aplicación necesita escalar con rapidez. Esta guía explica cómo controlar un Horizontal Pod Autoscaler (HPA) con datos en tiempo real de consultas por segundo (QPS) provenientes de Application Real-Time Monitoring Service (ARMS). De este modo, los pods escalan según la carga real de solicitudes y no solo por CPU o memoria.

Funcionamiento

Después de connect the Java applications in your Container Service for Kubernetes (ACK) cluster to ARMS Application Monitoring, los detalles de acceso de cada API están disponibles en ARMS.

ARMS Application Monitoring instrumenta su aplicación Java y expone el recuento de solicitudes por API como métricas de Prometheus. El complemento ack-alibaba-cloud-metrics-adapter convierte las métricas de Managed Service for Prometheus en métricas externas que el HPA puede usar. Además, las presenta a través de la External Metrics API. El HPA escala su Deployment hacia arriba o hacia abajo según el umbral que configure.

La ruta completa de los datos es la siguiente:

ARMS Application Monitoring recopila el recuento de solicitudes por API desde su aplicación Java → Managed Service for Prometheus almacena las métricas → ack-alibaba-cloud-metrics-adapter convierte los datos de Prometheus al formato de la Kubernetes External Metrics API → Kubernetes HPA lee la métrica y escala su Deployment hacia arriba o hacia abajo.

Esta guía utiliza la aplicación arms-springboot-demo y su endpoint /demo/queryUser/10 como ejemplo práctico en todo el documento.

Requisitos previos

Antes de empezar, compruebe que cuenta con lo siguiente:

Procedimiento

hpa

Paso 1: Instalar el complemento ARMS Application Monitoring

Instale el complemento ack-onepilot para conectar su aplicación con ARMS Application Monitoring.

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre del clúster. En el panel de navegación izquierdo, haga clic en Add-ons.

  3. Busque ack-onepilot, configure sus parámetros y complete la instalación.

Paso 2: Otorgar permisos de acceso a ARMS

La autorización obligatoria depende del tipo de clúster.

Para clústeres ACK Serverless o aplicaciones en clústeres conectados a Elastic Container Instance (ECI):

Complete la autorización en la página RAM Quick Authorization. Después, reinicie todos los pods del complemento ack-onepilot.

Para clústeres ACK estándar:

Compruebe si existe un ARMS Addon Token en el clúster.

Expanda para ver cómo comprobar si el clúster tiene un ARMS Addon Token

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Cluster.

  2. En la página Clusters, haga clic en el nombre del clúster. En el panel de navegación izquierdo, elija Configurations > Secrets.

  3. En la parte superior de la página, establezca Namespace en kube-system y compruebe si existe addon.arms.token.

  • Si el token existe: ARMS realiza automáticamente la autorización sin contraseña.

    Los clústeres administrados de ACK incluyen un ARMS Addon Token de forma predeterminada. Algunos clústeres administrados más antiguos podrían no tenerlo. En ese caso, otorgue los permisos manualmente con los pasos siguientes.
  • Si el token no existe: Otorgue los permisos manualmente.

    1. Cree una política personalizada con el contenido siguiente. Consulte Step 1: Create a custom policy.

      {
        "Action": "arms:*",
        "Resource": "*",
        "Effect": "Allow"
      }
    2. Asocie la política personalizada al rol de RAM de worker del clúster. Consulte Step 2: Attach the custom policy to the worker RAM role.

Paso 3: Habilitar ARMS Application Monitoring para su aplicación Java

Habilite el monitoreo al agregar etiquetas a la sección spec.template.metadata de su Deployment.

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre del clúster. En el panel de navegación izquierdo, elija Workloads > Deployments.

  3. En la página Deployments, haga clic en Create from YAML.

  4. Seleccione Sample Template y agregue las labels siguientes bajo spec.template.metadata en la Template (en formato YAML):

    Habilitar Application Security genera cargos adicionales. Consulte What is Application Security? y Billing .
    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

    La plantilla YAML de ejemplo siguiente muestra cómo crear una aplicación sin estado (Deployment) con ARMS Application Monitoring habilitado.

    Expanda para ver el ejemplo completo en YAML (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. Compruebe el despliegue. En la página Deployments, el botón ARMS Console aparece en la columna Actions de la aplicación objetivo. Haga clic en ARMS Console para consultar los datos de monitoreo. En el panel de navegación izquierdo, haga clic en API Call para ver los detalles de acceso de las interfaces HTTP. La aplicación de demostración genera llamadas continuas a las interfaces de forma automática.

    La página API Call enumera cada API con su tiempo de respuesta, recuento de solicitudes y recuento de errores. Entre los ejemplos se encuentran /demo/randomRT/{id} (5.0 s), /demo/invokeConponent (1.2 s), /demo/queryUser/{id} (218.07 ms), /demo/queryNotExistDB/{id} (2.5 ms) y /demo/queryException/{id} (1.4 ms). La página también muestra un diagrama de topología de llamadas y gráficas de tendencias para el recuento de solicitudes y el tiempo de respuesta.

  6. Cree un Service para arms-springboot-demo y exponga la API de la aplicación mediante Server Load Balancer (SLB).

    1. En la página Clusters, haga clic en el nombre del clúster. En el panel de navegación izquierdo, elija Network > Services.

    2. Haga clic en Create para crear un Service para la aplicación asociada y luego haga clic en Create. Para obtener más información sobre los parámetros, consulte Create a Service.

    3. Una vez creado el Service, anote la External IP de arms-demo-svc (por ejemplo, 47.94.XX.XX:8080).

    4. Acceda al endpoint /demo/queryUser/10 del Service a través del puerto externo:

      curl http://47.94.XX.XX:8080/demo/queryUser/10

      Resultado esperado:

      {"id":1,"name":"KeyOfSpectator","password":"12****"}

      Este resultado indica que el endpoint es accesible.

Paso 4: Configurar el adaptador de métricas

Importante

Managed Service for Prometheus y el complemento ack-alibaba-cloud-metrics-adapter (desplegado en kube-system) deben estar ejecutándose antes de continuar.

Este paso asigna los datos de recuento de solicitudes de ARMS Application Monitoring a una métrica externa con nombre que el HPA puede consumir. El nombre de la métrica que se usa en hpa.yaml (paso 5) se genera a partir del campo name.as que configure aquí.

4.1 Obtener la URL de Prometheus

  1. Inicie sesión en la consola de ARMS.

  2. En el panel de navegación izquierdo, elija Managed Service for Prometheus > Instance.

  3. Haga clic en el nombre de la instancia objetivo (formato: arms_metrics_{RegionId}_XXX). En el panel de navegación izquierdo, haga clic en Settings.

  4. En la parte inferior de la pestaña Settings, consulte y anote la HTTP API Address (Grafana Read Address). Esta es su URL de Prometheus.

    La página muestra la HTTP API Address (Grafana Read Address) con las columnas Network y 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

    Copie la dirección de red pública como URL de Prometheus para los pasos siguientes.

4.2 Establecer la URL de Prometheus en el adaptador

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre del clúster. En el panel de navegación izquierdo, elija Applications > Helm.

  3. En la página Helm, busque ack-alibaba-cloud-metrics-adapter y haga clic en Update dentro de la columna Actions.

  4. En el panel Update Release, inserte la URL de Prometheus que anotó en el paso 4.1.

    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 Agregar una regla de métricas de ARMS a adapter-config

  1. En la página Helm, haga clic en ack-alibaba-cloud-metrics-adapter.

  2. En la pestaña Basic Information, haga clic en adapter-config.

  3. En la esquina superior derecha, haga clic en Edit YAML.

  4. Agregue la regla siguiente a 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
    

    Reemplace arms-k8s-demo con el nombre de su servicio de ARMS y cc13c8725******a9839190b7d1695d7 con el identificador de su clúster.

    A continuación se muestra un ejemplo completo:

    Expanda para ver el ejemplo completo 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 Comprobar que la métrica esté disponible

  1. Compruebe que arms_app_requests_per_second aparezca en la External Metrics API:

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

    Busque "name":"arms_app_requests_per_second" en el resultado.

  2. Compruebe que la métrica devuelva datos en tiempo real:

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

    Resultado esperado:

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

Paso 5: Crear el HPA

Cree el archivo hpa.yaml con el contenido siguiente.

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

Aplique el HPA:

kubectl apply -f hpa.yaml

Compruebe que esté recibiendo datos de métricas:

kubectl get hpa -n arms-demo

Resultado esperado:

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

Un valor distinto de vacío en TARGETS confirma que el HPA lee los datos de métricas correctamente.

Paso 6: Comprobar el escalado elástico con una prueba de estrés

Ejecute una prueba de estrés contra la aplicación de demostración. Reemplace 47.94.XX.XX:8080 con el endpoint externo de arms-demo-svc.

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

Mientras se ejecuta la prueba, supervise el HPA:

kubectl get hpa -n arms-demo

Resultado esperado después del escalado:

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

Revise el efecto del escalado desde tres perspectivas:

  • Consola de ARMS: El volumen de solicitudes de la interfaz aumenta drásticamente durante la prueba de estrés.

    En la pestaña Overview de ARMS Application Monitoring se observan los cambios siguientes en las métricas durante la prueba de estrés (aproximadamente entre las 10:58 y las 10:59):

    • Requests per minute: Las solicitudes de entrada HTTP aumentan de casi 0 a unas 1,800.

    • Response time per minute: El tiempo de respuesta de entrada HTTP fluctúa entre 800 ms y 1.6 s.

    • Slow calls per minute: El recuento sube a cerca de 6 hacia el final de la prueba.

    • HTTP status code statistics: La cantidad de códigos de estado 200 aumenta hasta unas 2,400, en sincronía con el recuento de solicitudes. Los demás códigos de estado se mantienen cercanos a 0.

  • Panel de Prometheus: El HPA activa el escalado horizontal cuando los QPS superan el umbral configurado.

    En el panel de Grafana, la gráfica de líneas de la métrica arms_app_requests_count muestra un pico pronunciado durante la prueba de estrés. El valor alcanza un máximo de aproximadamente 33.5 min y luego desciende a 1.40 min. Las estadísticas del panel son mín. 8s, máx. 33.5 min, prom. 2.61 min y actual 1.40 min.

  • Clúster de ACK: El número de réplicas de pods escala horizontalmente según los QPS de las llamadas a la interfaz.

Para consultar el historial completo de eventos de escalado, ejecute:

kubectl describe hpa test-hpa -n arms-demo

Ejemplos avanzados

Los ejemplos siguientes muestran cómo configurar el adaptador de métricas para escenarios de escalado más específicos. Todos usan sum_over_time_lorc para agregar el recuento de solicitudes en una ventana de 1 minuto.

Escalar varios servicios de forma independiente

Defina una regla por servicio y asigne a cada una un nombre de métrica único. Así, el HPA podrá dirigirlas por separado.

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

Escalar según un endpoint RPC específico

Agregue la etiqueta rpc a la consulta para dirigir un solo endpoint, en lugar de todo el tráfico de un servicio.

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

Referencias