pprof adalah alat profiling bahasa Go yang digunakan untuk menganalisis dan meningkatkan performa program Go serta menyediakan data performa terkait. Anda dapat menggunakan modul Kubernetes Golang Pull dari aplikasi Full-stack Observability yang disediakan oleh Simple Log Service untuk mengumpulkan data performa dari semua program Go di kluster Kubernetes secara praktis.
Full-stack Observability menyediakan agen komersial yang dikembangkan sendiri untuk bahasa Go. Agen ini menawarkan instrumentasi non-intrusif dengan lebih banyak fitur dan stabilitas yang lebih baik. Untuk informasi selengkapnya, lihat Memulai pemantauan aplikasi Go.
Prasyarat
Instans Full-stack Observability telah dibuat. Untuk informasi selengkapnya, lihat Buat instans.
Komponen pemantauan telah diinstal di kluster Kubernetes. Untuk informasi selengkapnya, lihat Instal komponen pemantauan.
CatatanAnda harus menggunakan citra Logtail versi v1.7.1.0-monitor-aliyun atau yang lebih baru untuk menginstal komponen pemantauan.
Prinsip pengumpulan
Di kluster Kubernetes, model penyebaran DaemonSet digunakan baik untuk komponen yang mengumpulkan data performa dari program Go maupun komponen yang mengumpulkan log. Saat pengumpulan log, Logtail mendukung pemilihan resource Kubernetes dari berbagai dimensi. Demikian pula saat pengumpulan data performa dari program Go, Logtail dapat memfilter data menggunakan variabel lingkungan, label Kubernetes, namespace, nama pod, dan nama container. Pengumpulan data performa dari program Go melibatkan data komunikasi antar proses Go, sehingga pemilihan resource Kubernetes berpotensi mencakup banyak proses yang tidak relevan. Dalam kasus ini, Logtail memperkenalkan variabel lingkungan khusus bernama ILOGTAIL_PROFILE_PORT untuk mempersempit cakupan data lebih lanjut.
Go menyediakan mekanisme bawaan untuk mengekspos data performa yang disediakan oleh pprof. Setelah Anda mengaktifkan mekanisme eksposisi bawaan dalam program Go, Logtail dapat memperoleh data performa tersebut melalui HTTP.

Persiapan
Aktifkan mekanisme eksposisi data performa.
Sebelum mengumpulkan data performa Go pprof, Anda harus mengaktifkan mekanisme untuk mengekspos data tersebut dari program Go Anda. Anda dapat menggunakan kode berikut untuk mengaktifkan mekanisme eksposisi bawaan atau membuat mekanisme kustom. Pastikan data pprof diekspos di
{host}:{port}/debug/pprof/port. Contoh berikut mengekspos data performa pprof pada port 8080.package main import ( "net/http" _ "net/http/pprof" ) func main() { // lakukan sesuatu... _ = http.ListenAndServe(":8080", nil) }Konfigurasikan variabel lingkungan ILOGTAIL_PROFILE_PORT.
Tetapkan variabel lingkungan ILOGTAIL_PROFILE_PORT ke port tempat data diekspos. Contoh: ILOGTAIL_PROFILE_PORT=8080.
Buat konfigurasi Logtail
Masuk ke Konsol Simple Log Service.
Pada bagian Log Application, klik tab Intelligent O&M. Lalu, klik Full-stack Observability.
Pada halaman Simple Log Service Full-stack Observability, klik instans yang diinginkan.
Pada panel navigasi sebelah kiri, klik Performance Monitoring.
Jika ini pertama kalinya Anda menggunakan Performance Monitoring untuk instans ini, klik Enable Now.
Pada pohon navigasi sebelah kiri, klik Data Import. Pada halaman Data Access Configurations, temukan Kubernetes Golang Pull.
Pertama kali membuat konfigurasi Logtail untuk data pemantauan host, aktifkan sakelar untuk membuka halaman konfigurasi. Jika Anda sudah pernah membuat konfigurasi Logtail, klik ikon
untuk membuka halaman konfigurasi.Klik Use Existing Machine Groups.
Setelah Anda menginstal komponen pemantauan, Simple Log Service secara otomatis membuat kelompok mesin bernama
{instanceID}-{clusterID}-k8s-nodes. Anda dapat langsung menggunakan kelompok mesin ini.Pilih kelompok mesin target (
{instanceID}-{clusterID}-k8s-nodes) dari daftar Source Machine Groups dan pindahkan ke daftar Applied Machine Groups. Lalu, klik Next.PentingJika status heartbeat kelompok mesin adalah FAIL, Anda dapat mengklik Automatic Retry. Jika masalah tetap berlanjut, lihat Apa yang harus saya lakukan jika kelompok mesin Logtail tidak memiliki heartbeat?
Pada langkah Specify Data Source, konfigurasikan parameter berikut dan klik Complete.
Parameter
Deskripsi
General configurations
Config Name
Nama konfigurasi Logtail.
Cluster
Tentukan nama untuk kluster Kubernetes.
Setelah Anda mengonfigurasi parameter ini, Simple Log Service akan menambahkan tag cluster=Nama Kluster ke data performa yang dikumpulkan menggunakan konfigurasi Logtail tersebut.
PentingPastikan nama kluster bersifat unik. Jika tidak, konflik data dapat terjadi.
Profile Whitelist
Jenis data yang ingin Anda kumpulkan.
Collection Interval
Interval pengumpulan data. Satuan: detik.
Timeout Period
Periode timeout untuk pengumpulan data. Satuan: detik.
Maximum Body Size
Ukuran maksimum data yang dapat dikumpulkan. Satuan: KB.
Kubernetes Selector configurations
Namespace
Ekspresi reguler yang digunakan untuk mencocokkan nama namespace. Parameter ini menentukan namespace dari mana data dikumpulkan.
Pod Name
Ekspresi reguler yang digunakan untuk mencocokkan nama pod. Parameter ini menentukan pod dari mana data dikumpulkan.
Container Name
Ekspresi reguler yang digunakan untuk mencocokkan nama container. Parameter ini menentukan container dari mana data dikumpulkan.
Environment Variable Whitelist
Daftar putih variabel lingkungan menentukan container dari mana data dikumpulkan. Secara default, parameter ini kosong, artinya data performa dikumpulkan dari semua program Go Kubernetes di semua container. Jika Anda mengonfigurasi daftar putih, kunci wajib diisi dan nilai bersifat opsional.
Jika Anda membiarkan nilai kosong, semua container yang memiliki variabel lingkungan dengan kunci yang ditentukan akan dicocokkan.
Jika Anda menentukan nilai, hanya container dengan pasangan kunci-nilai variabel lingkungan yang persis sama yang akan dicocokkan.
Secara default, pencocokan nilai dilakukan sebagai string. Pencocokan hanya terjadi jika nilai identik dengan nilai variabel lingkungan. Jika nilai diawali dengan
^dan diakhiri dengan$, nilai tersebut diperlakukan sebagai ekspresi reguler. Misalnya, atur key menjadi NGINX_SERVICE_PORT dan value menjadi ^(80|6379)$. Ini akan mencocokkan container yang memiliki port layanan 80 atau 6379.
Pasangan kunci-nilai dihubungkan menggunakan operator OR. Jika sebuah container memiliki variabel lingkungan yang terdiri atas salah satu pasangan kunci-nilai yang ditentukan, container tersebut akan dicocokkan.
Environment Variable Blacklist
Daftar hitam variabel lingkungan menentukan container dari mana data tidak dikumpulkan. Secara default, parameter ini kosong, artinya tidak ada container yang dikecualikan. Jika Anda mengonfigurasi daftar hitam, kunci wajib diisi dan nilai bersifat opsional.
Jika Anda membiarkan nilai kosong, semua container yang memiliki variabel lingkungan dengan kunci yang ditentukan akan dikecualikan.
Jika Anda menentukan nilai, hanya container dengan pasangan kunci-nilai variabel lingkungan yang persis sama yang akan dikecualikan.
Secara default,
valuemenggunakan pencocokan string, yang mengharuskanvalueyang ditentukan identik dengan nilai variabel lingkungan. Jika nilai diawali dengan^dan diakhiri dengan$, pencocokan ekspresi reguler digunakan. Misalnya, jika Anda mengatur key menjadi NGINX_SERVICE_PORT dan mengatur value menjadi ^(80|6379)$, aturan ini akan mencocokkan container yang memiliki port layanan 80 atau 6379.
Pasangan kunci-nilai dihubungkan menggunakan operator OR. Jika sebuah container memiliki variabel lingkungan yang terdiri atas salah satu pasangan kunci-nilai yang ditentukan, container tersebut akan difilter.
K8s Label Whitelist
Daftar putih label Kubernetes menentukan container dari mana data dikumpulkan. Jika Anda mengonfigurasi daftar putih, kunci wajib diisi dan nilai bersifat opsional.
Jika Anda membiarkan nilai kosong, semua container yang memiliki label Kubernetes dengan kunci yang ditentukan akan dicocokkan.
Jika Anda menentukan nilai, hanya container dengan pasangan kunci-nilai label Kubernetes yang persis sama yang akan dicocokkan.
Secara default, pencocokan nilai dilakukan sebagai string. Pencocokan hanya terjadi jika nilai identik dengan nilai label Kubernetes. Jika nilai diawali dengan
^dan diakhiri dengan$, nilai tersebut diperlakukan sebagai ekspresi reguler. Misalnya, atur key menjadi app dan value menjadi ^(test1|test2)$. Ini akan mencocokkan container yang memiliki label Kubernetes app:test1 atau app:test2.
Pasangan kunci-nilai dihubungkan menggunakan operator OR. Jika sebuah container memiliki label Kubernetes yang terdiri atas salah satu pasangan kunci-nilai yang ditentukan, container tersebut akan dicocokkan.
K8s Label Blacklist
Daftar hitam label Kubernetes menentukan container dari mana data tidak dikumpulkan. Jika Anda mengonfigurasi daftar hitam, kunci wajib diisi dan nilai bersifat opsional.
Jika Anda membiarkan nilai kosong, semua container yang memiliki label Kubernetes dengan kunci yang ditentukan akan dikecualikan.
Jika Anda menentukan nilai, hanya container dengan pasangan kunci-nilai label Kubernetes yang persis sama yang akan dikecualikan.
Secara default, `value` dicocokkan sebagai string. Artinya, pencocokan hanya terjadi jika `value` identik dengan nilai label Kubernetes. Jika nilai diawali dengan
^dan diakhiri dengan$, nilai tersebut diperlakukan sebagai ekspresi reguler. Misalnya, mengatur key menjadi app dan value menjadi ^(test1|test2)$ akan mencocokkan container dengan label Kubernetes `app:test1` atau `app:test2`.
Pasangan kunci-nilai dihubungkan menggunakan operator OR. Jika sebuah container memiliki label Kubernetes yang terdiri atas salah satu pasangan kunci-nilai yang ditentukan, container tersebut akan difilter.
Container Label Whitelist
Daftar putih label container menentukan container dari mana data dikumpulkan. Secara default, parameter ini kosong, artinya data performa dikumpulkan dari semua program Go Kubernetes di semua container. Jika Anda mengonfigurasi daftar putih, kunci wajib diisi dan nilai bersifat opsional.
Jika Anda membiarkan nilai kosong, semua container yang memiliki label container dengan kunci yang ditentukan akan dicocokkan.
Jika Anda menentukan nilai, hanya container dengan pasangan kunci-nilai label container yang persis sama yang akan dicocokkan.
Secara default, pencocokan nilai dilakukan sebagai string. Pencocokan hanya terjadi jika nilai identik dengan nilai label container. Jika nilai diawali dengan
^dan diakhiri dengan$, nilai tersebut diperlakukan sebagai ekspresi reguler. Misalnya, atur key menjadi io.kubernetes.container.name dan value menjadi ^(nginx|cube)$. Ini akan mencocokkan container bernama nginx atau cube.
Pasangan kunci-nilai dihubungkan menggunakan operator OR. Jika sebuah container memiliki label container yang terdiri atas salah satu pasangan kunci-nilai yang ditentukan, container tersebut akan dicocokkan.
Container Label Blacklist
Daftar hitam label container menentukan container dari mana data tidak dikumpulkan. Secara default, parameter ini kosong, artinya tidak ada container yang dikecualikan. Jika Anda mengonfigurasi daftar hitam, kunci wajib diisi dan nilai bersifat opsional.
Jika Anda membiarkan nilai kosong, semua container yang memiliki label container dengan kunci yang ditentukan akan dikecualikan.
Jika Anda menentukan nilai, hanya container dengan pasangan kunci-nilai label container yang persis sama yang akan dikecualikan.
Secara default, `value` digunakan untuk pencocokan string eksak terhadap nilai label container. Jika nilai diawali dengan
^dan diakhiri dengan$, nilai tersebut diperlakukan sebagai ekspresi reguler. Misalnya, jika Anda mengatur key menjadi io.kubernetes.container.name dan value menjadi ^(nginx|cube)$, konfigurasi ini akan mencocokkan container bernama `nginx` atau `cube`.
Pasangan kunci-nilai dihubungkan menggunakan operator OR. Jika sebuah container memiliki label container yang terdiri atas salah satu pasangan kunci-nilai yang ditentukan, container tersebut akan difilter.
Setelah menyelesaikan konfigurasi, Simple Log Service secara otomatis membuat aset seperti Metricstore. Untuk informasi selengkapnya, lihat Aset.
Langkah selanjutnya
Setelah Anda mengumpulkan data performa pprof dari program Go ke Full-stack Observability, Anda dapat menggunakan fitur pemantauan performa untuk memecahkan masalah performa. Untuk informasi selengkapnya, lihat Kueri data dan Perbandingan data.