Membuat profil aplikasi Node.js

Halaman ini menjelaskan cara mengubah aplikasi Node.js Anda untuk mengambil data profiling dan mengirimkan data tersebut ke project Google CloudAnda. 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 baru
  • 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 agen versi terbaru.

Sistem operasi yang didukung:

  • Linux. Pemrofilan aplikasi Node.js didukung untuk kernel Linux yang library C standarnya diimplementasikan dengan glibc atau dengan musl. Untuk informasi konfigurasi khusus kernel Linux Alpine, lihat Menjalankan di Linux Alpine.

Lingkungan yang didukung:

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

  1. Jika Anda belum menginstal Google Cloud CLI di workstation, lihat dokumentasi Google Cloud CLI.

  2. Jalankan perintah berikut:

    gcloud services enable cloudprofiler.googleapis.com
    

Untuk informasi selengkapnya, lihat gcloud services.

Google Cloud console

  1. Enable the required API.

    Enable the API

  2. Jika API enabled ditampilkan, berarti API sudah diaktifkan. Jika belum, klik tombol Aktifkan.

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 hal berikut, Anda harus memberikan peran IAM Agen Cloud Profiler (roles/cloudprofiler.agent) kepada akun layanan:

  1. Anda menggunakan akun layanan default, tetapi mengubah pemberian perannya.
  2. Anda menggunakan akun layanan yang dibuat pengguna.
  3. Anda menggunakan workload identity, berikan peran Cloud Profiler Agent ke akun layanan Kubernetes.

Anda dapat memberikan peran IAM ke akun layanan menggunakan konsolGoogle 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. \
    --role roles/cloudprofiler.agent

Sebelum 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 Anda menginstal @google-cloud/profiler

Paket @google-cloud/profiler bergantung pada modul bawaan. Biner yang telah dibuat sebelumnya 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 mana yang akan diinstal.

Saat menggunakan @google-cloud/profiler di lingkungan lain yang tidak memiliki biner yang telah dibuat sebelumnya, modul node-gyp digunakan untuk membuat biner. Untuk mengetahui informasi tentang dependensi yang diperlukan untuk membuat biner dengan node-gyp, lihat dokumentasi penginstalan node-gyp.

Penginstalan

Untuk menginstal Cloud Profiler versi terbaru, lakukan hal berikut:

    npm install @google-cloud/profiler

Jika Anda juga menggunakan agen Trace, saat Anda memodifikasi aplikasi, impor paket Profiler setelah paket agen Trace (@google-cloud/trace-agent).

Compute Engine

Untuk Compute Engine, lakukan hal berikut:

  1. Instal Cloud Profiler versi terbaru:

    npm install @google-cloud/profiler
    
  2. Ubah kode aplikasi require untuk membuat objek serviceContext yang menetapkan nama layanan yang sedang di-profil ke service. Secara opsional, Anda dapat menetapkan ke version versi layanan yang sedang di-profil. Lihat Argumen nama dan versi layanan untuk informasi selengkapnya tentang opsi konfigurasi ini:

    require('@google-cloud/profiler').start({
      serviceContext: {
        service: 'your-service',
        version: '1.0.0',
      },
    });

GKE

Untuk GKE, lakukan hal berikut:

  1. Ubah Dockerfile Anda untuk menginstal paket Profiler:

    FROM node:10
    ...
    RUN npm install @google-cloud/profiler
    
  2. Ubah kode aplikasi require untuk membuat objek serviceContext yang menetapkan nama layanan yang sedang di-profil ke service. Secara opsional, Anda dapat menetapkan ke version versi layanan yang sedang di-profil. Lihat Argumen nama dan versi layanan untuk informasi selengkapnya tentang opsi konfigurasi ini:

    require('@google-cloud/profiler').start({
      serviceContext: {
        service: 'your-service',
        version: '1.0.0',
      },
    });

App Engine

Untuk lingkungan fleksibel App Engine dan lingkungan standar App Engine, kode require mirip dengan berikut ini:

Di App Engine, parameter service dan version berasal dari lingkungan, jadi 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:

Buka Profiler

Anda juga dapat menemukan halaman ini dengan menggunakan kotak penelusuran.

Argumen nama dan versi layanan

Saat memuat agen Profiler, Anda menentukan argumen service-name dan argumen service-version opsional untuk mengonfigurasinya.

Nama layanan memungkinkan Profiler mengumpulkan data pembuatan profil untuk semua replika layanan tersebut. Layanan profiler memastikan kecepatan pengumpulan satu profil per menit, rata-rata, untuk setiap nama layanan di setiap kombinasi versi layanan dan zona.

Misalnya, jika Anda memiliki layanan dengan dua versi yang berjalan di seluruh replika dalam 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 diprofilkan lebih sering daripada yang diperlukan, dengan overhead yang lebih tinggi.

Saat memilih nama layanan:

  • Pilih nama yang 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 serangkaian microservice, misalnya.

  • Pastikan untuk tidak menggunakan nilai khusus proses, seperti ID proses, dalam string service-name.

  • String service-name 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. Tag ini dapat digunakan untuk menandai berbagai versi layanan Anda saat layanan tersebut di-deploy. UI Profiler memungkinkan Anda memfilter data menurut versi layanan; dengan begitu, Anda dapat membandingkan performa versi kode yang lebih lama dan lebih baru.

Nilai argumen service-version 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
});

Menjalankan 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 Anda 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 API profiler. Untuk mengatasi error ini, tambahkan perintah apk berikut ke Dockerfile Anda:

FROM alpine
...
RUN apk add --no-cache ca-certificates

Kemudian, Anda perlu membangun ulang dan men-deploy ulang aplikasi.

Masalah umum

Agen pembuatan profil untuk Node.js mengganggu keluar normal program; 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 berhenti secara terkendali.

Langkah berikutnya