Tous les produits
Search
Centre de documentation

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

Dernière mise à jour :Aug 10, 2026

arms-obi est un agent Kubernetes DaemonSet qui découvre et collecte les données pprof Go depuis les Pods d'application sur chaque nœud, puis télécharge ces données vers Cloud Monitor pour le profilage continu via ARMS Profiling.

Principales fonctionnalités

  • Découverte automatique des Pods sur le nœud actuel qui exposent une interface pprof.

  • Collecte de cinq types de profils : CPU, heap, goroutine, mutex et block.

  • Exposition d'un endpoint de vérification d'état pour les sondes de liveness et readiness de Kubernetes.

  • Collecte simultanée des données depuis plus de 50 Pods par nœud.

Prérequis

  • Un cluster Kubernetes, version 1.26 ou ultérieure.

  • Vos Pods d'application exposent l'interface HTTP Go net/http/pprof.

  • Les conteneurs de votre Pod d'application doivent disposer d'une variable d'environnement spécifiant le port pprof. La variable par défaut est ILOGTAIL_PROFILE_PORT, que vous pouvez modifier dans la configuration des valeurs.

Intégrer votre application

Votre service Go doit exposer l'interface HTTP pprof et définir une variable d'environnement de port dans son conteneur. Ignorez cette section si les deux éléments sont déjà configurés.

Intégration du code

Dans le package main de votre service Go, importez net/http/pprof et démarrez un serveur HTTP distinct :

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 d'environnement du conteneur

Dans la spécification du conteneur de votre Pod d'application, définissez la variable d'environnement du port pprof. Le nom de la variable est par défaut ILOGTAIL_PROFILE_PORT et est configurable dans les valeurs :

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

arms-obi lit cette variable d'environnement pour déterminer le port cible.

Déploiement

Cluster ACK

  1. Connectez-vous à la console Container Service for Kubernetes (ACK). Dans le volet de navigation de gauche, sélectionnez Cluster List, puis cliquez sur le nom du cluster cible.

  2. Dans le volet de navigation de gauche, sélectionnez Components, recherchez le composant arms-obi, définissez installMode sur profiling, puis cliquez sur Install.

  3. Par défaut, l'agent collecte les données des Pods dont la variable d'environnement ILOGTAIL_PROFILE_PORT est définie, et utilise la valeur du libellé app comme nom d'application. Pour personnaliser ce comportement, modifiez la configuration du collecteur dans la section profiling lors de l'installation. Pour plus d'informations sur les paramètres de configuration, consultez Configuration du collecteur.

Cluster externe

  1. Exécutez la commande wget suivante pour télécharger le package d'installation arms-obi.

    wget 'https://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/app/charts-incubator/arms-obi-0.9.3.tgz'
  2. Exécutez la commande suivante pour extraire le package d'installation arms-obi.

    tar xvf arms-obi-0.9.3.tgz               
  3. Modifiez le fichier values.yaml dans le package d'installation. Modifiez les paramètres suivants et enregistrez le fichier.

    Important

    Assurez-vous que votre compte principal Alibaba Cloud dispose des permissions AliyunARMSFullAccess et AliyunSTSAssumeRoleAccess.

    workspace: default-cms-__ACK_UID__-__ACK_REGION_ID__
    registry: registry-__ACK_REGION_ID__.ack.aliyuncs.com/acs/
    cluster_id: __ACK_CLUSTER_ID__
    accessKey: __ACCESSKEY__
    accessKeySecret: __ACCESSKEY_SECRET__
    uid: "__ACK_UID__"
    region_id: __ACK_REGION_ID__
    installMode: profiling

    workspace : remplacez __ACK_UID__ par l'UID de votre compte principal Alibaba Cloud et __ACK_REGION_ID__ par l'ID de la région où vous souhaitez rapporter les données.

    registry : adresse du dépôt d'images arms-obi. arms-obi comprend trois images. Si votre cluster ne peut pas accéder au réseau public, synchronisez ces images vers votre dépôt interne :

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

    cluster_id : ID personnalisé pour votre cluster Kubernetes. Doit être unique.

    accessKey et accessKeySecret : AccessKey ID et AccessKey Secret de votre compte principal Alibaba Cloud. Pour plus d'informations, consultez Créer une paire de clés d'accès.

    uid : ID de votre compte principal Alibaba Cloud. Vous pouvez le trouver en survolant votre photo de profil dans le coin supérieur droit de la console Alibaba Cloud.

    region_id : ID de la région Alibaba Cloud. Pour connaître les régions prises en charge, consultez Régions prises en charge.

    installMode : doit être défini sur profiling.

  4. Exécutez la commande suivante pour installer arms-obi. Exécutez cette commande depuis l'extérieur du répertoire du package d'installation arms-obi.

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

Configuration

Configuration du collecteur

|
**Champ**
|
**Type**
|
**Valeur par défaut**
|
**Description**
| | --- | --- | --- | --- | |
profiles
|
[ ]string
|
Les 5 types
|
Types de profils autorisés. Valeurs valides : cpu, heap, goroutine, mutex et block.
| |
interval
|
int
|
30
|
Intervalle de collecte en secondes.
| |
timeout
|
int
|
30
|
Délai d'expiration d'une seule requête HTTP en secondes.
| |
max_body_size
|
int
|
10240
|
Taille maximale d'un seul corps de réponse en Ko. Les réponses dépassant cette taille sont ignorées.
| |
cpu_duration
|
int
|
10
|
Durée d'échantillonnage du profil CPU en secondes. Cette valeur doit être inférieure à `interval`.
| |
port_env_name
|
string
|
ILOGTAIL_PROFILE_PORT
|
Nom de la variable d'environnement dans le conteneur qui spécifie le port pprof.
| |
pprof_path
|
string
|
/debug/pprof
|
Préfixe de chemin pour l'endpoint HTTP pprof.
|

Les URLs de collecte de profils suivent ce modèle : http://<podIP>:<port><pprof_path>/<profile>

|
**Type de profil**
|
**Chemin URL**
|
**Remarques**
| | --- | --- | --- | |
cpu
|
/profile?seconds=<cpu_duration>
|
Durée de collecte = cpu_duration secondes
| |
heap
|
/heap
|
Collecte instantanée
| |
goroutine
|
/goroutine
|
Collecte instantanée
| |
mutex
|
/mutex
|
Collecte instantanée
| |
block
|
/block
|
Collecte instantanée
|



































































































Configuration des filtres

Contrôle les Pods à partir desquels effectuer la collecte. Toutes les conditions sont combinées avec ET ; les éléments au sein d'une liste d'autorisation sont combinés avec OU.

|
**Champ**
|
**Type**
|
**Valeur par défaut**
|
**Description**
| | --- | --- | --- | --- | |
namespace
|
string
|
""
|
Expression régulière pour faire correspondre le namespace du Pod. Si vide, aucun filtrage n'est appliqué.
| |
pod_name
|
string
|
""
|
Expression régulière pour faire correspondre le nom du Pod. Si vide, aucun filtrage n'est appliqué.
| |
label_whitelist
|
[ ]LabelKV
|
[ ]
|
Libellés de Pod autorisés. Un Pod est mis en correspondance s'il possède l'un de ces libellés.
| |
label_blacklist
|
[ ]LabelKV
|
[ ]
|
Libellés de Pod bloqués. Un Pod est exclu s'il possède l'un de ces libellés.
| |
env_whitelist
|
[ ]LabelKV
|
[ ]
|
Variables d'environnement de conteneur autorisées. Un Pod est mis en correspondance si l'un de ses conteneurs définit l'une de ces variables.
| |
env_blacklist
|
[ ]LabelKV
|
[ ]
|
Variables d'environnement de conteneur bloquées. Un Pod est exclu si l'un de ses conteneurs définit l'une de ces variables.
|

Format LabelKV : {key: "app", value: "myservice"}. Si la valeur est vide, l'agent vérifie uniquement l'existence de la clé.

Le pipeline de filtrage s'exécute dans cet ordre :

  1. Filtrage des nœuds : collecte uniquement depuis les Pods sur le nœud actuel (automatique).

  2. Phase du Pod : conserve uniquement les Pods en phase Running avec une adresse IP attribuée.

  3. Filtrage par expression régulière : namespace / pod_name.

  4. Liste d'autorisation de libellés → Liste de blocage de libellés.

  5. Liste d'autorisation de variables d'environnement → Liste de blocage de variables d'environnement.

  6. Résolution du port : lit la valeur du port à partir de la variable d'environnement du conteneur spécifiée par port_env_name.

























































Configuration ARMS

|
**Champ**
|
**Type**
|
**Valeur par défaut**
|
**Description**
| | --- | --- | --- | --- | |
arms.license_key
|
string
|
app
|
Clé du libellé du Pod dont la valeur est utilisée comme nom d'application ARMS (appName).
|

Mettre à jour la configuration

  1. Connectez-vous à la console Container Service for Kubernetes (ACK). Dans le volet de navigation de gauche, sélectionnez Cluster List, puis cliquez sur le nom du cluster cible.

  2. Dans le volet de navigation de gauche, sélectionnez Components, recherchez le composant arms-obi, cliquez sur Configure, puis modifiez la configuration du collecteur de profiling.

















Consulter les données de profiling

  1. Connectez-vous à la console Cloud Monitor, sélectionnez l'espace de travail cible et, dans le volet de navigation de gauche, cliquez sur Application Monitoring.

  2. Recherchez l'application portant le nom que vous avez défini lors du déploiement. Cliquez sur Application Diagnostics pour consulter les types de profils. Vous pouvez également télécharger les fichiers de profil pour une analyse locale avec pprof.

FAQ

Les journaux de l'agent indiquent « arms sts not ready yet »

L'agent n'a pas pu obtenir d'identifiants ARMS STS.

  • Assurez-vous que le réseau du cluster peut accéder à l'API de métadonnées ARMS à l'adresse <region_id>-intranet-arms.aliyuncs.com.

  • Vous pouvez exécuter kubectl logs pour afficher les messages d'erreur détaillés.

Aucun Pod n'est découvert

Vérifiez votre configuration de filtre :

  • Confirmez que la variable d'environnement spécifiée par port_env_name (par défaut : ILOGTAIL_PROFILE_PORT) est définie dans les conteneurs du Pod de votre application.

  • Confirmez que les expressions régulières pour namespace/pod_name, ainsi que les paramètres de liste d'autorisation et de liste de blocage des libellés et des variables d'environnement dans le sélecteur, sont corrects.

  • Consultez le champ pod_count dans les journaux de l'agent pour voir combien de Pods ont été découverts.

Échec de la collecte

Causes courantes :

  • Le Pod de l'application n'expose pas l'interface pprof. Confirmez que vous avez importé _ "net/http/pprof" et démarré le service HTTP.

  • Le port pprof ne correspond pas au port configuré dans la variable d'environnement port_env_name.

  • Le pprof_path ne correspond pas au préfixe de chemin de votre service.

  • Une politique réseau bloque la connexion HTTP depuis le Pod de l'agent vers le Pod de l'application.

Échec du téléchargement

Causes courantes :

  • L'endpoint privé VPC est inaccessible.

  • Les identifiants ARMS STS ont expiré. L'agent actualise automatiquement les identifiants. Vérifiez les journaux pour détecter les erreurs d'actualisation STS.