Todos los productos
Search
Centro de documentos

Application Real-Time Monitoring Service:Collect Go pprof data with arms-obi

Última actualización: Sep 09, 2026

arms-obi es un agente de tipo DaemonSet de Kubernetes que detecta y recopila datos de Go pprof de los Pods de aplicación en cada nodo. Posteriormente, carga estos datos en Cloud Monitor para habilitar el perfilado continuo mediante ARMS Profiling.

Funciones principales

  • Detecta automáticamente los Pods del nodo actual que exponen una interfaz pprof.

  • Recopila cinco tipos de perfiles: CPU, heap, goroutine, mutex y block.

  • Expone un endpoint de comprobación de estado para las sondas de disponibilidad (liveness) y preparación (readiness) de Kubernetes.

  • Recopila datos de forma simultánea desde más de 50 Pods por nodo.

Requisitos previos

  • Un clúster de Kubernetes versión 1.26 o posterior.

  • Los Pods de su aplicación deben exponer la interfaz HTTP de Go net/http/pprof.

  • Los contenedores del Pod de su aplicación deben tener una variable de entorno que especifique el puerto de pprof. La variable predeterminada es ILOGTAIL_PROFILE_PORT, la cual puede modificar en la configuración de values.

Integración de su aplicación

Su servicio de Go debe exponer la interfaz HTTP de pprof y establecer una variable de entorno de puerto en su contenedor. Si ambos elementos ya están configurados, omita esta sección.

Integración de código

En el paquete main de su servicio de Go, importe net/http/pprof e inicie un servidor HTTP independiente:

import _ "net/http/pprof"

func main() {
    // Start the pprof server on a separate port to avoid conflicts with the business port.
    go func() {
        http.ListenAndServe(":6060", nil)
    }()
    // ... business logic
}

Variables de entorno del contenedor

En la especificación del contenedor de su Pod de aplicación, establezca la variable de entorno del puerto de pprof. El nombre de la variable es ILOGTAIL_PROFILE_PORT de forma predeterminada y se configura en values:

containers:
  - name: myapp
    env:
      - name: ILOGTAIL_PROFILE_PORT  # Must match the port_env_name configured in arms-obi
        value: "6060"

arms-obi lee esta variable de entorno para determinar el puerto de destino.

Despliegue

Clústeres de ACK

  1. Inicie sesión en la consola de Container Service for Kubernetes (ACK). En el panel de navegación izquierdo, seleccione Clusters. A continuación, haga clic en el nombre del clúster de destino.

  2. En el panel de navegación izquierdo, seleccione Components and Add-ons, busque el componente arms-obi, establezca installMode en profiling y complete la instalación.

  3. De forma predeterminada, el agente recopila datos de los Pods que tienen definida la variable de entorno ILOGTAIL_PROFILE_PORT y utiliza el valor de la etiqueta app como nombre de la aplicación. Para personalizar este comportamiento, modifique la configuración del recopilador en la sección profiling durante la instalación. Para obtener más información sobre los parámetros de configuración, consulte Collector configuration.

Clústeres externos

  1. Ejecute a continuación el comando wget para descargar el paquete de instalación de arms-obi.

    wget 'https://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/app/charts-incubator/arms-obi-0.12.0.tgz'
  2. Ejecute el siguiente comando para extraer el paquete de instalación de arms-obi.

    tar xvf arms-obi-0.12.0.tgz               
  3. Edite el archivo values.yaml dentro del paquete de instalación. Modifique los siguientes parámetros y guarde el archivo.

    Importante

    Asegúrese de que su cuenta principal de Alibaba Cloud tenga los permisos AliyunARMSFullAccess y AliyunSTSAssumeRoleAccess.

    workspace: default-cms-__ACK_UID__-__ACK_REGION_ID__
    registry: registry-__ACK_REGION_ID__.ack.aliyuncs.com/acs/   //Remove the vpc field
    cluster_id: __ACK_CLUSTER_ID__
    accessKey: __ACCESSKEY__
    accessKeySecret: __ACCESSKEY_SECRET__
    uid: "__ACK_UID__"
    region_id: __ACK_REGION_ID__
    installMode: profiling
    network: public
    profiling.deployMode: deployment

    workspace: Reemplace __ACK_UID__ con el UID de su cuenta principal de Alibaba Cloud y __ACK_REGION_ID__ con el identificador de la región donde desea reportar los datos.

    registry: Dirección del repositorio de imágenes de arms-obi. Este componente incluye tres imágenes. Si su clúster no tiene acceso a la red pública, sincronice estas imágenes con su repositorio interno:

    registry-cn-hangzhou.ack.aliyuncs.com/acs/obi:obi-app-update-0.12.0
    registry-cn-hangzhou.ack.aliyuncs.com/acs/obi:init-0.12.0
    registry-cn-hangzhou.ack.aliyuncs.com/acs/obi:pprof-agent-0.12.0

    cluster_id: Identificador personalizado de su clúster de Kubernetes. Debe ser único.

    accessKey y accessKeySecret: AccessKey ID y AccessKey Secret de su cuenta principal de Alibaba Cloud. Para obtener más información, consulte Create an AccessKey pair.

    uid: Identificador de su cuenta principal de Alibaba Cloud. Puede encontrarlo al pasar el cursor sobre su foto de perfil en la esquina superior derecha de la consola de Alibaba Cloud.

    region_id: Identificador de la región de Alibaba Cloud. Para consultar las regiones compatibles, consulte Supported regions.

    installMode: Debe establecerse en profiling.

  4. Ejecute el siguiente comando para instalar arms-obi. Ejecútelo desde fuera del directorio del paquete de instalación de arms-obi.

    helm3 upgrade --install arms-obi arms-obi --namespace obi-system --create-namespace

Otros clústeres

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, seleccione Clusters. A continuación, haga clic en el nombre del clúster de destino.

  2. En el panel de navegación izquierdo, seleccione Components and Add-ons, busque el componente arms-obi, establezca installMode en profiling y complete la instalación según el tipo de clúster:

    • Clústeres serverless y ACS: Establezca deployMode en deployment.

    • Clústeres registrados de ACK One: Complete la instalación directamente.

Configuración

Configuración del recopilador

Campo

Tipo

Valor predeterminado

Descripción

profiles

[ ]string

Los 5 tipos

Tipos de perfil permitidos. Valores válidos: cpu, heap, goroutine, mutex y block.

interval

int

30

Intervalo de recopilación en segundos.

timeout

int

30

Tiempo de espera máximo para una solicitud HTTP individual, en segundos.

max_body_size

int

10240

Tamaño máximo de un cuerpo de respuesta individual en KB. Las respuestas que superan este tamaño se descartan.

cpu_duration

int

10

Duración del muestreo del perfil de CPU en segundos. Este valor debe ser menor que interval.

port_env_name

string

ILOGTAIL_PROFILE_PORT

Nombre de la variable de entorno en el contenedor que especifica el puerto de pprof.

pprof_path

string

/debug/pprof

Prefijo de ruta para el endpoint HTTP de pprof.

Las URL de recopilación de perfiles siguen este patrón: http://<podIP>:<port><pprof_path>/<profile>

Tipo de perfil

Ruta de la URL

Observaciones

cpu

/profile?seconds=<cpu_duration>

Duración de recopilación = cpu_duration segundos

heap

/heap

Recopilación instantánea

goroutine

/goroutine

Recopilación instantánea

mutex

/mutex

Recopilación instantánea

block

/block

Recopilación instantánea

Configuración de filtros

Controla de qué Pods se recopilan los datos. Todas las condiciones se combinan con AND, mientras que los elementos dentro de una lista de permitidos se combinan con OR.

Campo

Tipo

Valor predeterminado

Descripción

namespace

string

""

Expresión regular para coincidir con el namespace del Pod. Si está vacío, no se aplica ningún filtro.

pod_name

string

""

Expresión regular para coincidir con el nombre del Pod. Si está vacío, no se aplica ningún filtro.

label_whitelist

[ ]LabelKV

[ ]

Etiquetas de Pod permitidas. Un Pod coincide si tiene alguna de estas etiquetas.

label_blacklist

[ ]LabelKV

[ ]

Etiquetas de Pod bloqueadas. Un Pod se excluye si tiene alguna de estas etiquetas.

env_whitelist

[ ]LabelKV

[ ]

Variables de entorno de contenedor permitidas. Un Pod coincide si alguno de sus contenedores define una de estas variables.

env_blacklist

[ ]LabelKV

[ ]

Variables de entorno de contenedor bloqueadas. Un Pod se excluye si alguno de sus contenedores define una de estas variables.

Formato de LabelKV: {key: "app", value: "myservice"}. Si el valor está vacío, el agente solo comprueba la existencia de la clave.

La canalización de filtros se ejecuta en el siguiente orden:

  1. Filtrado por nodo: Recopila datos únicamente de los Pods del nodo actual (automático).

  2. Fase del Pod: Conserva solo los Pods en fase Running que tengan una dirección IP asignada.

  3. Filtrado por expresión regular: namespace / pod_name.

  4. Lista de permitidos de etiquetas → Lista de bloqueados de etiquetas.

  5. Lista de permitidos de variables de entorno → Lista de bloqueados de variables de entorno.

  6. Resolución de puertos: Lee el valor del puerto desde la variable de entorno del contenedor especificada por port_env_name.

Configuración de ARMS

Campo

Tipo

Valor predeterminado

Descripción

arms.license_key

string

app

Clave de la etiqueta del Pod cuyo valor se utiliza como nombre de la aplicación de ARMS (appName).

Actualizar la configuración

  1. Inicie sesión en la consola de Container Service for Kubernetes (ACK). En el panel de navegación izquierdo, seleccione Cluster List y, a continuación, haga clic en el nombre del clúster de destino.

  2. En el panel de navegación izquierdo, seleccione Components, busque el componente arms-obi, haga clic en Configure y modifique la configuración del recopilador de perfiles.

Consulta de los datos de perfilado

  1. Inicie sesión en la consola de Cloud Monitor, seleccione el espacio de trabajo de destino y, en el panel de navegación izquierdo, haga clic en Application Monitoring.

  2. Busque la aplicación con el nombre que definió durante el despliegue. Haga clic en Application Diagnostics para consultar los tipos de perfil. También puede descargar los archivos de perfil para analizarlos localmente con pprof.

Preguntas frecuentes

Los registros del agente muestran "arms sts not ready yet"

El agente no pudo obtener una credencial STS de ARMS.

  • Asegúrese de que la red del clúster pueda acceder a la API de metadatos de ARMS en <region_id>-intranet-arms.aliyuncs.com.

  • Puede ejecutar kubectl logs para consultar los mensajes de error detallados.

No se detectan Pods

Compruebe su configuración de filtros:

  • Compruebe que la variable de entorno especificada por port_env_name (valor predeterminado: ILOGTAIL_PROFILE_PORT) esté definida en los contenedores del Pod de su aplicación.

  • Compruebe que las expresiones regulares de namespace/pod_name, así como los ajustes de listas de permitidos y bloqueados de etiquetas y variables de entorno en el selector, sean correctos.

  • Revise el campo pod_count en los registros del agente para ver cuántos Pods se detectaron.

Errores en la recopilación

Causas comunes:

  • El Pod de la aplicación no expone la interfaz pprof. Compruebe que importó _ "net/http/pprof" e inició el servicio HTTP.

  • El puerto de pprof no coincide con el puerto configurado en la variable de entorno port_env_name.

  • El valor de pprof_path no coincide con el prefijo de ruta de su servicio.

  • Una directiva de red está bloqueando la conexión HTTP desde el Pod del agente hacia el Pod de la aplicación.

Errores en la carga de datos

Causas comunes:

  • El endpoint privado de la VPC es inaccesible.

  • La credencial STS de ARMS caducó. El agente renueva la credencial automáticamente. Revise los registros para identificar errores de renovación de STS.