剖析 Node.js 應用程式

本頁說明如何修改 Node.js 應用程式以擷取剖析資料,並將那些資料傳送至您的 Google Cloud Platform (GCP) 專案。如需剖析作業的一般資訊,請參閱剖析概念一文。

Node.js 適用的剖析類型:

  • 堆積
  • 實際時間

支援的 Node.js 語言版本:

  • 在 8.x 分支版本上的 8.9.4 版或更高版本。
  • 在 10.x 分支版本上的 10.4.1 版或更高版本。

支援的作業系統:

  • Linux。使用 glibcmusl 實作標準 C 程式庫的 Linux kernel 支援剖析 Node.js 應用程式。如需 Linux Alpine kernel 專屬的設定資訊,請參閱在 Linux Alpine 上執行的相關說明。

支援的環境:

啟用 Profiler API

使用剖析代理程式之前,請確保基礎 Profiler API 已啟用。您可以查看 API 狀態,或視需要使用 Cloud SDK gcloud 指令列工具或 Cloud Console 來啟用 API。

Cloud SDK

  1. 如果您尚未在工作站上安裝 Cloud SDK,請參閱 Google Cloud SDK

  2. 執行下列指令:

    gcloud services enable cloudprofiler.googleapis.com
    

詳情請參閱 gcloud services 一文。

Cloud Console

  1. 前往「APIs & Services」(API 和服務) 資訊主頁。

    前往 API 和服務頁面

  2. 選取您要用來存取 API 的專案。

  3. 按一下 [Add APIs and Services] (新增 API 和服務) 按鈕。

    新增 API 和服務

  4. 搜尋「Profiler API」

  5. 選取搜尋結果中的 [Stackdriver Profiler API]

  6. 如果畫面顯示 [API enabled] (API 已啟用),代表 API 已啟用。如果未顯示,請按一下 [Enable] (啟用) 按鈕。

使用 Stackdriver Profiler

如要透過所有支援的環境使用 Profiler,您可以先在應用程式內安裝並要求套件,然後按正常方式部署應用程式。

如要安裝最新版本的 Stackdriver Profiler,請執行以下指令:

    npm install --save @google-cloud/profiler

請注意,如果您也使用 Trace 代理程式,修改應用程式時,請先匯入 Trace 代理程式 (@google-cloud/trace-agent),再匯入 Profiler。詳情請參閱為 Node.js 設定 Stackdriver Trace 一文。

Compute Engine

如果是 Compute Engine,請執行下列操作:

  1. 安裝最新版本的 Stackdriver Profiler:

    npm install --save @google-cloud/profiler
    
  2. 將您的應用程式修改為「require」程式碼建立 serviceContext 物件,由該物件來為 service 指派要剖析的服務的名稱。此外,您也可以為 version 指派要剖析的服務的版本,但您不一定要指定。如需有關這些設定選項的詳細資訊,請參閱服務名稱和版本引數

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

GKE

如果是 GKE,請執行下列操作:

  1. 修改 Dockerfile 來安裝 Profiler 套件:

    FROM node:10
    ...
    RUN npm install @google-cloud/profiler
    
  2. 將您的應用程式修改為「require」程式碼建立 serviceContext 物件,由該物件來為 service 指派要剖析的服務的名稱。此外,您也可以為 version 指派要剖析的服務的版本,但您不一定要指定。如需有關這些設定選項的詳細資訊,請參閱服務名稱和版本引數

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

App Engine

如果是 App Engine 彈性環境和 App Engine 標準環境,require 程式碼與以下內容類似:

require('@google-cloud/profiler').start();

在 App Engine 環境中,serviceversion 參數都是直接衍生自環境,因此您不用另外指定。因此,您不需要建立 serviceContext 物件。

分析資料

Profiler 收集資料之後,您就可以使用 Profiler 介面來查看和分析資料。如要開始使用介面,請參閱「開啟 Profiler 介面」。

服務名稱和版本引數

載入 Profiler 代理程式時,您可指定 service-name 引數及 service-version 引數 (選用) 來加以設定。

「service name」(服務名稱) 可讓 Profiler 收集有關這項服務的所有備用資源剖析資料。分析器服務會針對每個服務名稱的各個版本及區域組合,確保平均每分鐘一個剖析作業的收集頻率。

舉例來說,如果您有一個服務,共有兩個版本在三個區域的備用資源執行,則分析器會為這個服務建立平均每分鐘 6 個剖析作業。

如果您為備用資源使用不同的服務名稱,系統剖析服務的頻率就會比平常更高,相對地負擔也會更大。

選取服務名稱時:

  • 選擇的名稱要能清楚代表應用程式架構中的服務。如果您只執行單一服務或應用程式,服務名稱的選擇就不那麼重要;但如果應用程式是以一組微服務的形式執行,建議就應選擇適當的服務名稱。

  • 請勿在 service-name 字串中使用任何 process-specific 值 (例如 ID)。

  • service-name 字串必須符合這個規則運算式:

    ^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$

使用靜態字串 (如 imageproc-service) 做為服務名稱就是不錯的做法。

「service version」(服務版本) 則為選填項目。如果您指定服務版本,Profiler 可從多個執行個體匯總剖析資訊並正確顯示;這項引數可用來標記服務部署時的不同版本。Profiler UI 可讓您按照服務版本篩選資料,這樣一來,您就能比較新舊版程式碼的運作效能。

service-version 引數的值是任意形式的字串,不過這個引數的值看起來通常和版本號碼類似,例如 1.0.02.1.2

代理程式記錄

剖析代理程式可報告記錄資訊。如要啟用記錄功能,請在啟動代理程式時設定 logLevel 選項。支援的 logLevel 值如下:

  • 0:停用所有代理程式記錄。
  • 1:啟用錯誤記錄。
  • 2:啟用警告記錄 (預設)。
  • 3:啟用資訊記錄。
  • 4:啟用偵錯記錄

在提供服務背景內容的同一個物件中設定 logLevel 值:

require('@google-cloud/profiler').start({
    serviceContext: { ... }
    logLevel:       3
});

使用 Linux Alpine 執行

如果您使用 Docker 映像檔,且這些映像檔透過 Linux Alpine (例如 golang:alpine 或只有 alpine) 執行,可能會看到下列驗證錯誤:

connection error: desc = "transport: authentication handshake failed: x509: failed to load system roots and no roots provided"

請注意,要啟用代理程式記錄功能才能看到錯誤。

以上錯誤指出,透過 Linux Alpine 執行的 Docker 映像檔根據預設並未安裝 SSL 根憑證。如果要讓剖析代理程式與 Profiler API 相互通訊,就必須具有這些憑證。請將 apk 指令加到您的 Dockerfile 來解決這項錯誤:

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

接著您必須重新建構和重新部署應用程式。

已知問題

以下是 Beta 版 Node.js 專用 Stackdriver Profiler 的已知問題:

  • Node.js 的剖析代理程式會干擾程式的正常離開程序;程式中所有工作都完成後,終止程式可能需要花費長達一小時的時間。而如果強制離開程式 (例如使用 Ctrl-C) 就會導致程式立即終止。

後續步驟

如要進一步瞭解 Profiler 圖表和控制項,請參閱使用 Stackdriver Profiler 介面一文。如要瞭解進階資訊,請參考以下主題:

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Stackdriver Profiler
需要協助嗎?請前往我們的支援網頁