Todos os produtos
Search
Central de documentação

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

Última atualização: Jul 28, 2026

O arms-obi é um agente DaemonSet do Kubernetes que descobre e coleta dados de pprof do Go nos Pods de aplicação em cada nó e os envia ao Cloud Monitor para profiling contínuo por meio do ARMS Profiling.

Principais recursos

  • Descobre automaticamente Pods no nó atual que expõem uma interface pprof.

  • Coleta cinco tipos de perfil: CPU, heap, goroutine, mutex e block.

  • Disponibiliza um endpoint de verificação de integridade para as sondas de liveness e readiness do Kubernetes.

  • Coleta dados simultaneamente de mais de 50 Pods por nó.

Pré-requisitos

  • Cluster Kubernetes versão 1.26 ou posterior.

  • Os Pods da aplicação devem expor a interface HTTP net/http/pprof.

  • Os containers do Pod da aplicação devem ter uma variável de ambiente que especifique a porta do pprof. A variável padrão é ILOGTAIL_PROFILE_PORT, alterável na configuração de valores (values).

Integrar sua aplicação

Seu service em Go deve expor a interface HTTP do pprof e definir uma variável de ambiente de porta no container correspondente. Ignore esta seção se ambos já estiverem configurados.

Integração de código

No pacote main do service Go, importe net/http/pprof e inicie um servidor HTTP separado:

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
}

Variáveis de ambiente do container

Na especificação do container do Pod da aplicação, defina a variável de ambiente da porta do pprof. O nome da variável tem como padrão ILOGTAIL_PROFILE_PORT e é configurável no arquivo values:

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

O arms-obi lê essa variável de ambiente para determinar a porta de destino.

Implantação

Cluster ACK

  1. Faça login no console do Container Service for Kubernetes (ACK). No painel de navegação à esquerda, selecione Cluster List e clique em no nome do cluster desejado.

  2. No painel de navegação à esquerda, selecione Components, localize o componente arms-obi, defina installMode como profiling e clique em em Install.

  3. Por padrão, o agente coleta dados dos Pods com a variável de ambiente ILOGTAIL_PROFILE_PORT definida e usa o valor do rótulo app como nome da aplicação. Para personalizar, modifique a configuração do coletor na seção profiling durante a instalação. Para mais informações sobre os parâmetros, consulte Collector configuration.

Cluster externo

  1. Execute o comando wget a seguir para baixe o pacote de instalação do arms-obi.

    wget 'https://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/app/charts-incubator/arms-obi-0.9.3.tgz'
  2. Extraia o pacote de instalação do arms-obi com o comando abaixo.

    tar xvf arms-obi-0.9.3.tgz               
  3. Edite o arquivo values.yaml no pacote de instalação. Modifique os parâmetros a seguir e salve o arquivo.

    Importante

    Certifique-se de que sua conta principal do Alibaba cloud tenha as permissões AliyunARMSFullAccess e 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: Substitua __ACK_UID__ pelo UID da sua conta principal do Alibaba cloud e __ACK_REGION_ID__ pelo ID da região onde deseja reportar os dados.

    registry: Endereço do repositório de imagens do arms-obi. O arms-obi inclui três imagens. Se o cluster não tiver acesso à rede pública, sincronize-as para o repositório interno:

    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 personalizado para o cluster Kubernetes. Deve ser único.

    accessKey e accessKeySecret: AccessKey ID e AccessKey Secret da conta principal do Alibaba cloud. Para mais informações, consulte Create an AccessKey pair.

    uid: ID da conta principal do Alibaba cloud. Encontre essa informação passando o mouse sobre a foto de perfil no canto superior direito do console do Alibaba cloud.

    region_id: ID da região do Alibaba cloud. Para verificar as regiões suportadas, consulte Supported regions.

    installMode: Defina como profiling.

  4. Instale o arms-obi executando o comando abaixo fora do diretório do pacote de instalação.

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

Configuração

Configuração do coletor

Campo

Tipo

Padrão

Descrição

profiles

[ ]string

Todos os 5 tipos

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

interval

int

30

Intervalo de coleta em segundos.

timeout

int

30

Tempo limite para uma única requisição HTTP em segundos.

max_body_size

int

10240

Tamanho máximo de um único corpo de resposta em KB. Respostas maiores são descartadas.

cpu_duration

int

10

Duração da amostragem do perfil de CPU em segundos. Este valor deve ser menor que interval.

port_env_name

string

ILOGTAIL_PROFILE_PORT

Nome da variável de ambiente no container que especifica a porta do pprof.

pprof_path

string

/debug/pprof

Prefixo do caminho para o endpoint HTTP do pprof.

As URLs de coleta de perfil seguem este padrão: http://<podIP>:<port><pprof_path>/<profile>

Tipo de perfil

Caminho da URL

Observações

cpu

/profile?seconds=<cpu_duration>

Duração da coleta = cpu_duration segundos

heap

/heap

Coleta instantânea

goroutine

/goroutine

Coleta instantânea

mutex

/mutex

Coleta instantânea

block

/block

Coleta instantânea

Configuração de filtro

Controla de quais Pods os dados serão coletados. Todas as condições combinam-se com AND; itens dentro de uma lista de permissões combinam-se com OR.

Campo

Tipo

Padrão

Descrição

namespace

string

""

Expressão regular para corresponder ao namespace do Pod. Se vazio, nenhum filtro é aplicado.

pod_name

string

""

Expressão regular para corresponder ao nome do Pod. Se vazio, nenhum filtro é aplicado.

label_whitelist

[ ]LabelKV

[ ]

Rótulos de Pod permitidos. Um Pod é selecionado se possuir qualquer um destes rótulos.

label_blacklist

[ ]LabelKV

[ ]

Rótulos de Pod bloqueados. Um Pod é excluído se possuir qualquer um destes rótulos.

env_whitelist

[ ]LabelKV

[ ]

Variáveis de ambiente de container permitidas. Um Pod é selecionado se qualquer container definir uma dessas variáveis.

env_blacklist

[ ]LabelKV

[ ]

Variáveis de ambiente de container bloqueadas. Um Pod é excluído se qualquer container definir uma dessas variáveis.

Formato LabelKV: {key: "app", value: "myservice"}. Se o valor estiver vazio, o agente verifica apenas a existência da chave.

O pipeline de filtros executa nesta ordem:

  1. Filtragem de nó: Coleta apenas dos Pods no nó atual (automático).

  2. Fase do Pod: Mantém apenas Pods na fase Running com endereço IP atribuído.

  3. Filtragem por expressão regular: namespace / pod_name.

  4. Lista de permissões de rótulos → Lista de bloqueios de rótulos.

  5. Lista de permissões de variáveis de ambiente → Lista de bloqueios de variáveis de ambiente.

  6. Resolução de porta: Lê o valor da porta da variável de ambiente do container especificada por port_env_name.

Configuração do ARMS

Campo

Tipo

Padrão

Descrição

arms.license_key

string

app

Chave do rótulo do Pod cujo valor é usado como nome da aplicação ARMS (appName).

Atualizar a configuração

  1. Faça login no console do Container Service for Kubernetes (ACK). No painel de navegação à esquerda, selecione Cluster List e clique em no nome do cluster desejado.

  2. No painel de navegação à esquerda, selecione Components, localize o componente arms-obi, clique em em Configure e modifique a configuração do coletor de profiling.

Visualize dados de profiling

  1. Acesse o console do Cloud Monitor, selecione o workspace desejado e, no painel de navegação à esquerda, clique em em Application Monitoring.

  2. Localize a aplicação com o nome definido durante a implantação. Clique em em Application Diagnostics para visualize os tipos de perfil. Também é possível baixe arquivos de perfil para análise local com o pprof.

Perguntas frequentes

Logs do agente mostram "arms sts not ready yet"

O agente falhou ao obter uma credencial STS do ARMS.

  • Verifique se a rede do cluster acessa a API de metadados do ARMS em <region_id>-intranet-arms.aliyuncs.com.

  • Use kubectl logs para visualize mensagens de erro detalhadas.

Nenhum Pod foi descoberto

Verifique a configuração de filtro:

  • Confirme se a variável de ambiente especificada por port_env_name (padrão: ILOGTAIL_PROFILE_PORT) está definida nos containers do Pod da aplicação.

  • Valide se as expressões regulares para namespace/pod_name e as configurações de lista de permissões e bloqueios de rótulos e variáveis de ambiente no seletor estão corretas.

  • Consulte o campo pod_count nos logs do agente para ver quantos Pods foram descobertos.

Falha na coleta

Causas comuns:

  • O Pod da aplicação não expõe a interface pprof. Confirme a importação de _ "net/http/pprof" e o início do service HTTP.

  • A porta do pprof não corresponde à porta configurada na variável de ambiente port_env_name.

  • O pprof_path não corresponde ao prefixo de caminho do service.

  • Uma política de rede bloqueia a conexão HTTP do Pod do agente para o Pod da aplicação.

Falha no upload

Causas comuns:

  • O endpoint privado da VPC está inacessível.

  • A credencial STS do ARMS expirou. O agente renova a credencial automaticamente. Verifique nos logs se há erros de renovação do STS.