All Products
Search
Document Center

Application Real-Time Monitoring Service:Kumpulkan data Go pprof dengan arms-obi

Last Updated:Jun 26, 2026

arms-obi adalah agen pengumpulan data Go pprof yang berjalan sebagai Kubernetes DaemonSet. Agen ini berjalan di setiap node dalam kluster untuk secara otomatis menemukan dan mengumpulkan data performa dari Pod aplikasi yang mengekspos antarmuka HTTP Go pprof, lalu mengunggahnya ke Cloud Monitor guna mendukung Continuous Profiling melalui ARMS Profiling.

Kemampuan utama

  • Secara otomatis menemukan Pod pada node saat ini yang mengekspos antarmuka pprof.

  • Mendukung pengumpulan lima jenis profil: CPU, heap, goroutine, mutex, dan block.

  • Menyediakan titik akhir pemeriksaan kesehatan yang mendukung probe liveness dan readiness Kubernetes.

  • Mendukung pengumpulan data konkuren dari lebih dari 50 Pod pada satu node.

Prasyarat

  • Kluster Kubernetes versi 1.32 atau lebih baru.

  • Pod aplikasi Anda mengekspos antarmuka HTTP Go net/http/pprof.

  • Kontainer Pod aplikasi Anda harus memiliki variabel lingkungan yang ditetapkan untuk menentukan port pprof. Variabel default adalah ILOGTAIL_PROFILE_PORT, yang dapat Anda ubah dalam konfigurasi values.

Integrasikan aplikasi Anda

Layanan Go Anda harus mengekspos antarmuka HTTP pprof dan menetapkan variabel lingkungan port di kontainernya. Jika sudah dikonfigurasi, Anda dapat melewati bagian ini.

Integrasi kode

Pada paket main layanan Go Anda, impor net/http/pprof dan mulai server HTTP terpisah:

import _ "net/http/pprof"

func main() {
    // Jalankan server pprof pada port terpisah untuk menghindari konflik dengan port bisnis.
    go func() {
        http.ListenAndServe(":6060", nil)
    }()
    // ... logika bisnis
}

Variabel lingkungan kontainer

Pada spesifikasi kontainer Pod aplikasi Anda, tetapkan variabel lingkungan untuk port pprof. Nama variabel dapat dikonfigurasi dan secara default bernilai ILOGTAIL_PROFILE_PORT. Anda dapat menyesuaikannya dalam konfigurasi values sesuai kebutuhan:

containers:
  - name: myapp
    env:
      - name: ILOGTAIL_PROFILE_PORT  # Harus sesuai dengan port_env_name yang dikonfigurasi di arms-obi
        value: "6060"

arms-obi membaca nilai variabel lingkungan ini untuk menentukan port target.

Penerapan

Kluster ACK

  1. Masuk ke Konsol Container Service for Kubernetes (ACK). Di panel navigasi sebelah kiri, pilih Daftar Kluster, lalu klik nama kluster target.

  2. Di panel navigasi sebelah kiri, pilih Komponen, temukan komponen arms-obi, atur installMode menjadi profiling, lalu klik Install.

  3. Secara default, agen mengumpulkan data dari Pod yang memiliki variabel lingkungan ILOGTAIL_PROFILE_PORT yang ditetapkan, dan menggunakan nilai label app sebagai nama aplikasi. Untuk menyesuaikan hal ini, ubah konfigurasi collector di bagian profiling selama instalasi. Untuk informasi lebih lanjut tentang parameter konfigurasi, lihat Konfigurasi collector.

Kluster eksternal

  1. Jalankan perintah wget berikut untuk mengunduh paket instalasi arms-obi.

    wget 'https://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/app/charts-incubator/arms-obi-0.9.3.tgz'
  2. Jalankan perintah berikut untuk mengekstrak paket instalasi arms-obi.

    tar xvf arms-obi-0.9.3.tgz               
  3. Edit file values.yaml dalam paket instalasi. Ubah parameter berikut dan simpan file tersebut.

    Penting

    Pastikan akun utama Alibaba Cloud Anda memiliki izin AliyunARMSFullAccess dan 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: Ganti __ACK_UID__ dengan UID akun utama Alibaba Cloud Anda dan __ACK_REGION_ID__ dengan ID wilayah tempat Anda ingin melaporkan data.

    registry: Alamat repositori image arms-obi. arms-obi mencakup tiga image. Jika kluster Anda tidak dapat mengakses jaringan publik, Anda harus menyinkronkan image-image ini ke repositori internal Anda:

    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 kustom untuk kluster Kubernetes Anda. ID ini harus unik.

    accessKey dan accessKeySecret: ID AccessKey dan AccessKey Secret akun utama Alibaba Cloud Anda. Untuk informasi lebih lanjut, lihat Buat pasangan AccessKey.

    uid: ID akun utama Alibaba Cloud Anda. Anda dapat menemukannya dengan mengarahkan kursor ke foto profil di pojok kanan atas Konsol Alibaba Cloud.

    region_id: ID wilayah Alibaba Cloud. Untuk daftar wilayah yang didukung oleh Pemantauan Aplikasi, lihat Wilayah yang didukung.

    installMode: Nilai ini harus diatur ke profiling.

  4. Jalankan perintah berikut untuk menginstal arms-obi. Jalankan perintah ini dari luar direktori paket instalasi arms-obi.

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

Konfigurasi

Konfigurasi collector

Bidang

Tipe

Default

Deskripsi

profiles

[ ]string

Semua 5 jenis

Daftar putih jenis profil. Nilai yang valid: cpu, heap, goroutine, mutex, dan block.

interval

int

30

Interval pengumpulan dalam detik.

timeout

int

30

Timeout untuk satu permintaan HTTP dalam detik.

max_body_size

int

10240

Ukuran maksimum badan respons tunggal dalam KB. Respons yang lebih besar dari ini akan dibuang.

cpu_duration

int

10

Durasi sampling profil CPU dalam detik. Nilai ini harus kurang dari interval.

port_env_name

string

ILOGTAIL_PROFILE_PORT

Nama variabel lingkungan dalam kontainer yang menentukan port pprof.

pprof_path

string

/debug/pprof

Awalan path untuk titik akhir HTTP pprof.

Aturan pembentukan URL pengumpulan profil adalah sebagai berikut: http://<podIP>:<port><pprof_path>/<profile>

Jenis profil

URL Path

Keterangan

cpu

/profile?seconds=<cpu_duration>

Durasi pengumpulan = cpu_duration detik

heap

/heap

Pengumpulan instan

goroutine

/goroutine

Pengumpulan instan

mutex

/mutex

Pengumpulan instan

block

/block

Pengumpulan instan

Konfigurasi filter

Mengontrol Pod mana yang dikumpulkan datanya oleh agen. Semua kondisi digabungkan dengan logika AND, sedangkan item dalam daftar putih digabungkan dengan logika OR.

Bidang

Tipe

Default

Deskripsi

namespace

string

""

Ekspresi reguler untuk mencocokkan namespace Pod. Jika kosong, tidak ada penyaringan yang diterapkan.

pod_name

string

""

Ekspresi reguler untuk mencocokkan nama Pod. Jika kosong, tidak ada penyaringan yang diterapkan.

label_whitelist

[ ]LabelKV

[ ]

Daftar putih label Pod. Pod cocok jika memiliki salah satu label ini.

label_blacklist

[ ]LabelKV

[ ]

Blacklist label Pod. Pod dikecualikan jika memiliki salah satu label ini.

env_whitelist

[ ]LabelKV

[ ]

Daftar putih variabel lingkungan kontainer. Pod cocok jika salah satu kontainernya mendefinisikan salah satu variabel ini.

env_blacklist

[ ]LabelKV

[ ]

Blacklist variabel lingkungan kontainer. Pod dikecualikan jika salah satu kontainernya mendefinisikan salah satu variabel ini.

Format LabelKV: {key: "app", value: "myservice"}. Jika nilai kosong, agen hanya memeriksa keberadaan kunci tersebut.

Pipa filter dieksekusi dalam urutan berikut:

  1. Penyaringan node: Mengumpulkan data hanya dari Pod pada node saat ini (otomatis).

  2. Fase Pod: Menyimpan hanya Pod yang berada dalam fase Running dan memiliki alamat IP yang ditetapkan.

  3. Penyaringan ekspresi reguler: namespace / pod_name.

  4. Daftar putih label → blacklist label.

  5. Daftar putih variabel lingkungan → blacklist variabel lingkungan.

  6. Resolusi port: Membaca nilai port dari variabel lingkungan kontainer yang ditentukan oleh port_env_name.

Konfigurasi ARMS

Bidang

Tipe

Default

Deskripsi

arms.license_key

string

app

Kunci label Pod yang nilainya digunakan sebagai nama aplikasi ARMS (appName).

Perbarui konfigurasi

  1. Masuk ke Konsol Container Service for Kubernetes (ACK). Di panel navigasi sebelah kiri, pilih Daftar Kluster, lalu klik nama kluster target.

  2. Di panel navigasi sebelah kiri, pilih Komponen, temukan komponen arms-obi, klik Configure, lalu ubah konfigurasi collector profiling.

Lihat data profiling

  1. Masuk ke Konsol Cloud Monitor, pilih ruang kerja target, lalu di panel navigasi sebelah kiri, klik Pemantauan Aplikasi.

  2. Temukan aplikasi dengan nama yang Anda definisikan selama penerapan. Klik Application Diagnostics untuk melihat berbagai jenis profil. Anda juga dapat mengunduh file profil untuk analisis lokal dengan pprof.

FAQ

Log agen menampilkan "arms sts not ready yet"

Pesan ini menunjukkan bahwa agen gagal memperoleh kredensial ARMS STS.

  • Pastikan jaringan kluster dapat mengakses API metadata ARMS di <region_id>-intranet-arms.aliyuncs.com.

  • Anda dapat menjalankan kubectl logs untuk melihat pesan kesalahan detail.

Tidak ada Pod yang ditemukan

Periksa konfigurasi filter Anda:

  • Konfirmasi bahwa variabel lingkungan yang ditentukan oleh port_env_name (default: ILOGTAIL_PROFILE_PORT) telah ditetapkan di kontainer Pod aplikasi Anda.

  • Konfirmasi bahwa ekspresi reguler untuk namespace/pod_name, serta pengaturan daftar putih dan blacklist label dan variabel lingkungan di selector, sudah benar.

  • Periksa bidang pod_count di log agen untuk melihat berapa banyak Pod yang ditemukan.

Pengumpulan gagal

Penyebab umum:

  • Pod aplikasi tidak mengekspos antarmuka pprof. Konfirmasi bahwa Anda telah mengimpor _ "net/http/pprof" dan menjalankan layanan HTTP.

  • Port pprof tidak sesuai dengan port yang dikonfigurasi dalam variabel lingkungan port_env_name.

  • pprof_path tidak sesuai dengan awalan path layanan Anda.

  • Kebijakan jaringan memblokir koneksi HTTP dari Pod agen ke Pod aplikasi.

Pengunggahan gagal

Penyebab umum:

  • Titik akhir pribadi VPC tidak dapat dijangkau.

  • Kredensial ARMS STS telah kedaluwarsa. Agen memperbarui kredensial secara otomatis. Periksa log untuk kesalahan pembaruan STS.