Membuat profil aplikasi Node.js
Halaman ini menjelaskan cara mengubah aplikasi Node.js untuk mengambil data pembuatan profil dan mengirimkan data tersebut ke project Google Cloud Anda. Untuk informasi umum tentang pembuatan profil, lihat Konsep pembuatan profil.
Jenis profil untuk Node.js:
- Heap
- Waktu proses
Versi bahasa Node.js yang didukung:
- Node.js 14 atau yang lebih tinggi
- Untuk kebijakan rilis Node.js, lihat Jadwal rilis.
Versi agen pembuatan profil yang didukung:
- Rilis terbaru agen didukung. Secara umum, rilis yang lebih lama dari satu tahun tidak didukung. Sebaiknya gunakan versi agen yang baru dirilis.
Sistem operasi yang didukung:
- Linux. Membuat profil aplikasi Node.js didukung untuk kernel Linux
yang library C standarnya diimplementasikan dengan
glibc
atau denganmusl
. Untuk informasi konfigurasi khusus untuk kernel Linux Alpine, lihat Berjalan di Linux Alpine.
Lingkungan yang didukung:
- Compute Engine
- Google Kubernetes Engine (GKE)
- Lingkungan fleksibel App Engine
- Lingkungan standar App Engine
- Di luar Google Cloud (Untuk informasi tentang persyaratan konfigurasi tambahan, lihat Membuat profil aplikasi yang berjalan di luar Google Cloud.)
Mengaktifkan Profiler API
Sebelum menggunakan agen pembuatan profil, pastikan Profiler API yang mendasarinya diaktifkan. Anda dapat memeriksa status API dan mengaktifkannya jika perlu menggunakan Google Cloud CLI atau konsol Google Cloud:
gcloud CLI
Jika Anda belum menginstal Google Cloud CLI di workstation, lihat dokumentasi Google Cloud CLI.
Jalankan perintah berikut:
gcloud services enable cloudprofiler.googleapis.com
Untuk informasi selengkapnya, lihat
gcloud services
.
Konsol Google Cloud
-
Enable the required API.
Jika API enabled ditampilkan, berarti API sudah diaktifkan. Jika belum, klik tombol Enable.
Memberikan peran IAM ke akun layanan
Jika Anda men-deploy aplikasi di resource Google Cloud dan jika Anda menggunakan akun layanan default dan belum mengubah pemberian peran ke akun layanan tersebut, Anda dapat melewati bagian ini.
Jika Anda melakukan salah satu tindakan berikut, Anda harus memberikan peran IAM Agen Cloud Profiler (roles/cloudprofiler.agent
) kepada akun layanan:
- Anda menggunakan akun layanan default, tetapi mengubah pemberian perannya.
- Anda menggunakan akun layanan yang dibuat pengguna.
- Anda menggunakan menggunakan identitas beban kerja, berikan peran Agen Cloud Profiler ke akun layanan Kubernetes.
Anda dapat memberikan peran IAM ke akun layanan menggunakan
Konsol Google Cloud atau Google Cloud CLI. Misalnya, Anda dapat menggunakan perintah
gcloud projects add-iam-policy-binding
:
gcloud projects add-iam-policy-binding GCP_PROJECT_ID \
--member serviceAccount:MY_SVC_ACCT_ID@GCP_PROJECT_ID.iam.gserviceaccount.com \
--role roles/cloudprofiler.agent
Sebelum Anda menggunakan perintah sebelumnya, ganti perintah berikut:
- GCP_PROJECT_ID: Project ID Anda.
- MY_SVC_ACCT_ID: Nama akun layanan Anda.
Untuk mengetahui informasi mendetail, lihat Mengelola akses ke project, folder, dan organisasi.
Menggunakan Cloud Profiler
Di semua lingkungan yang didukung, Anda menggunakan Profiler dengan
menginstal paket @google-cloud/profiler
, menambahkan pernyataan require
ke aplikasi, lalu men-deploy aplikasi dengan
cara biasa.
Sebelum menginstal @google-cloud/profiler
Paket @google-cloud/profiler
bergantung pada modul bawaan. Biner bawaan untuk modul bawaan ini tersedia untuk Linux dan Alpine Linux untuk Node 14 dan 16. Tidak diperlukan dependensi tambahan.
@google-cloud/profiler
menggunakan node-pre-gyp
untuk menentukan biner bawaan
yang akan diinstal.
Saat menggunakan @google-cloud/profiler
di lingkungan lain yang tidak memiliki
biner bawaan, modul
node-gyp
digunakan untuk mem-build biner.
Untuk informasi tentang dependensi yang diperlukan untuk mem-build biner dengan
node-gyp
, lihat dokumentasi
penginstalan node-gyp
.
Penginstalan
Untuk menginstal Cloud Profiler versi terbaru, lakukan langkah berikut:
npm install --save @google-cloud/profiler
Jika Anda juga menggunakan Agen pelacakan, saat
mengubah aplikasi, impor paket Profiler setelah
paket Agen pelacakan (@google-cloud/trace-agent
).
Compute Engine
Untuk Compute Engine, lakukan tindakan berikut:
Instal Cloud Profiler versi terbaru:
npm install --save @google-cloud/profiler
Ubah kode
require
aplikasi Anda untuk membuat objekserviceContext
yang menetapkan nama layanan yang sedang dibuat profilnya keservice
. Secara opsional, Anda dapat menetapkan versi layanan yang sedang dibuat profilnya keversion
. Lihat Argumen nama dan versi layanan untuk informasi selengkapnya tentang opsi konfigurasi ini:
GKE
Untuk GKE, lakukan hal berikut:
Ubah Dockerfile Anda untuk menginstal paket Profiler:
FROM node:10 ... RUN npm install @google-cloud/profiler
Ubah kode
require
aplikasi Anda untuk membuat objekserviceContext
yang menetapkan nama layanan yang sedang dibuat profilnya keservice
. Secara opsional, Anda dapat menetapkan versi layanan yang sedang dibuat profilnya keversion
. Lihat Argumen nama dan versi layanan untuk informasi selengkapnya tentang opsi konfigurasi ini:
App Engine
Untuk lingkungan fleksibel App Engine dan untuk lingkungan standar App Engine, kode require
mirip dengan berikut ini:
Di App Engine, parameter service
dan version
berasal dari lingkungan, sehingga Anda tidak perlu menentukannya. Oleh karena itu, Anda tidak perlu
membuat objek serviceContext
.
Menganalisis data
Setelah Profiler mengumpulkan data, Anda dapat melihat dan menganalisis data ini menggunakan antarmuka Profiler.
Di konsol Google Cloud, buka halaman Profiler:
Anda juga dapat menemukan halaman ini menggunakan kotak penelusuran.
Argumen nama dan versi layanan
Saat memuat agen Profiler, Anda menentukan argumen nama layanan dan argumen versi layanan opsional untuk mengonfigurasinya.
Nama layanan memungkinkan Profiler mengumpulkan data pembuatan profil untuk semua replika layanan tersebut. Layanan profiler memastikan rata-rata rasio pengumpulan satu profil per menit untuk setiap nama layanan di setiap versi dan zona layanan kombinasi.
Misalnya, jika Anda memiliki layanan dengan dua versi yang berjalan di seluruh replika di tiga zona, profiler akan membuat rata-rata 6 profil per menit untuk layanan tersebut.
Jika Anda menggunakan nama layanan yang berbeda untuk replika, layanan Anda akan dibuat profilnya lebih sering daripada yang diperlukan, dengan overhead yang lebih tinggi.
Saat memilih nama layanan:
Pilih nama yang dengan jelas mewakili layanan dalam arsitektur aplikasi Anda. Pilihan nama layanan kurang penting jika Anda hanya menjalankan satu layanan atau aplikasi. Hal ini lebih penting jika aplikasi Anda berjalan sebagai kumpulan layanan mikro, misalnya.
Pastikan untuk tidak menggunakan nilai khusus proses, seperti ID proses, dalam string nama layanan.
String nama layanan harus cocok dengan ekspresi reguler ini:
^[a-z0-9]([-a-z0-9_.]{0,253}[a-z0-9])?$
Pedoman yang baik adalah menggunakan string statis seperti imageproc-service
sebagai
nama layanan.
Versi layanan bersifat opsional. Jika Anda menentukan versi layanan, Profiler dapat menggabungkan informasi pembuatan profil dari beberapa instance dan menampilkannya dengan benar. Ini dapat digunakan untuk menandai berbagai versi layanan Anda saat di-deploy. UI Profiler memungkinkan Anda memfilter data menurut versi layanan; dengan cara ini, Anda dapat membandingkan performa kode versi lama dan baru.
Nilai argumen versi layanan adalah string bentuk bebas, tetapi nilai
untuk argumen ini biasanya terlihat seperti nomor versi, misalnya,
1.0.0
atau 2.1.2
.
Logging agen
Agen pembuatan profil dapat melaporkan informasi logging. Untuk mengaktifkan logging, tetapkan opsi logLevel
saat memulai agen.
Nilai logLevel
yang didukung adalah:
0
: menonaktifkan semua logging agen.1
: mengaktifkan logging error.2
: mengaktifkan logging peringatan (default).3
: mengaktifkan logging info.4
: mengaktifkan logging debug.
Tetapkan nilai logLevel
dalam objek yang sama yang menyediakan konteks layanan:
require('@google-cloud/profiler').start({
serviceContext: { ... }
logLevel: 3
});
Berjalan dengan Linux Alpine
Agen pembuatan profil Node.js untuk Linux Alpine hanya didukung untuk konfigurasi Google Kubernetes Engine.
Error build
Jika Anda menjalankan npm install
dan build gagal dengan error berikut, berarti
Dockerfile Anda tidak memiliki beberapa dependensi build:
ERR! stack Error: not found: make
Untuk mengatasi masalah ini, tambahkan pernyataan berikut ke tahap build Dockerfile Anda:
RUN apk add python3 g++ make
Error autentikasi
Jika menggunakan image Docker yang berjalan dengan
Linux Alpine
(seperti golang:alpine
atau hanya alpine
),
Anda mungkin melihat error autentikasi berikut:
connection error: desc = "transport: authentication handshake failed: x509: failed to load system roots and no roots provided"
Perhatikan bahwa untuk melihat error, Anda harus mengaktifkan logging agen.
Error ini menunjukkan bahwa image Docker dengan Linux Alpine tidak memiliki
sertifikat SSL root yang diinstal secara default. Sertifikat tersebut diperlukan agar
agen pembuatan profil dapat berkomunikasi dengan profiler API. Untuk mengatasi
error ini, tambahkan perintah apk
berikut ke Dockerfile Anda:
FROM alpine
...
RUN apk add --no-cache ca-certificates
Kemudian, Anda perlu mem-build ulang dan men-deploy ulang aplikasi.
Masalah umum
Agen pembuatan profil untuk Node.js mengganggu keluarnya program secara normal; program dapat memerlukan waktu hingga satu jam untuk keluar setelah semua tugas dalam program selesai. Saat Anda mengeluarkan SIGINT, misalnya
dengan menggunakan Ctrl-C
, hal ini akan menyebabkan proses dihentikan dengan baik.
Langkah selanjutnya
- Memilih profil yang akan dianalisis
- Berinteraksi dengan flame graph
- Memfilter grafik flame
- Memfokuskan flame graph
- Membandingkan profil