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
Masuk ke Konsol Container Service for Kubernetes (ACK). Di panel navigasi sebelah kiri, pilih Daftar Kluster, lalu klik nama kluster target.
Di panel navigasi sebelah kiri, pilih Komponen, temukan komponen
arms-obi, atur installMode menjadi profiling, lalu klik Install.Secara default, agen mengumpulkan data dari Pod yang memiliki variabel lingkungan
ILOGTAIL_PROFILE_PORTyang ditetapkan, dan menggunakan nilai labelappsebagai 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
Jalankan perintah
wgetberikut 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'Jalankan perintah berikut untuk mengekstrak paket instalasi arms-obi.
tar xvf arms-obi-0.9.3.tgzEdit file values.yaml dalam paket instalasi. Ubah parameter berikut dan simpan file tersebut.
PentingPastikan 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: profilingworkspace: 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.3cluster_id: ID kustom untuk kluster Kubernetes Anda. ID ini harus unik.accessKeydanaccessKeySecret: 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 keprofiling.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 |
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:
Penyaringan node: Mengumpulkan data hanya dari Pod pada node saat ini (otomatis).
Fase Pod: Menyimpan hanya Pod yang berada dalam fase Running dan memiliki alamat IP yang ditetapkan.
Penyaringan ekspresi reguler:
namespace/pod_name.Daftar putih label → blacklist label.
Daftar putih variabel lingkungan → blacklist variabel lingkungan.
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
Masuk ke Konsol Container Service for Kubernetes (ACK). Di panel navigasi sebelah kiri, pilih Daftar Kluster, lalu klik nama kluster target.
Di panel navigasi sebelah kiri, pilih Komponen, temukan komponen
arms-obi, klik Configure, lalu ubah konfigurasi collector profiling.
Lihat data profiling
Masuk ke Konsol Cloud Monitor, pilih ruang kerja target, lalu di panel navigasi sebelah kiri, klik Pemantauan Aplikasi.
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 logsuntuk 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_countdi 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_pathtidak 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.