Profilazione delle applicazioni Node.js

In questa pagina viene descritto come modificare l'applicazione Node.js per l'acquisizione profilazione dei dati e l'invio di questi dati al tuo account Google Cloud progetto. Per informazioni generali sulla profilazione, consulta Concetti di profilazione.

Tipi di profilo per Node.js:

  • Heap
  • Tempo totale di esecuzione

Versioni del linguaggio Node.js supportate:

Versioni dell'agente di profilazione supportate:

  • È supportata la release più recente dell'agente. In generale, le release meno recenti oltre un anno non sono supportate. Ti consigliamo di utilizzare una versione rilasciata di recente dell'agente.

Sistemi operativi supportati:

  • Linux. La profilazione delle applicazioni Node.js è supportata per i kernel Linux la cui libreria C standard è implementata con glibc o con musl. Per per la configurazione specifiche dei kernel alpini di Linux, vedi In esecuzione su Linux Alps.

Ambienti supportati:

Abilitazione dell'API Profiler

Prima di utilizzare l'agente di profilazione, assicurati che l'elemento sottostante L'API Profiler è abilitata. Puoi controllare lo stato dell'API e abilitare e, se necessario, utilizzando Google Cloud CLI la console Google Cloud:

Interfaccia a riga di comando gcloud

  1. Se non hai già installato Google Cloud CLI sul tuo consulta la documentazione di Google Cloud CLI.

  2. Esegui questo comando:

    gcloud services enable cloudprofiler.googleapis.com
    

Per ulteriori informazioni, vedi gcloud services.

Console Google Cloud

  1. Attiva l'API richiesta.

    Abilita l'API

  2. Se viene visualizzato API abilitata, l'API è già abilitata. In caso contrario, fai clic sul pulsante Attiva.

Utilizzo di Cloud Profiler

In tutti gli ambienti supportati, il profiler viene utilizzato installando il pacchetto @google-cloud/profiler, aggiungendo un require l'istruzione di base sulla tua applicazione, per poi eseguirne il deployment al solito.

Prima di installare @google-cloud/profiler

Il pacchetto @google-cloud/profiler dipende da un modulo nativo. Predefinito i file binari per questo modulo nativo sono disponibili per Linux e Alpine Linux per Nodo 14 e 16. Non sono necessarie dipendenze aggiuntive. @google-cloud/profiler utilizza node-pre-gyp per determinare quale file binario predefinito per l'installazione.

.

Quando utilizzi @google-cloud/profiler in altri ambienti che non dispongono di binari predefiniti, il modulo node-gyp viene utilizzato per creare programmi binari. Per informazioni sulle dipendenze necessarie per creare file binari con node-gyp, leggi l'installazione di node-gyp documentazione.

Installazione

Per installare la versione più recente di Cloud Profiler, segui questi passaggi:

    npm install --save @google-cloud/profiler

Se utilizzi anche l'agente Trace, quando modificare l'applicazione, importare il pacchetto Profiler dopo Pacchetto di agenti Trace (@google-cloud/trace-agent).

Compute Engine

Per Compute Engine, segui questi passaggi:

  1. Installa la versione più recente di Cloud Profiler:

    npm install --save @google-cloud/profiler
    
  2. Modifica il codice dell'applicazione require in crea un oggetto serviceContext che assegna a service il nome del servizio che viene profilato. Facoltativamente, puoi assegnare version la versione del servizio che viene profilato. Per ulteriori informazioni, consulta Argomenti Nome servizio e versione informazioni su queste opzioni di configurazione:

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

GKE

Per GKE, segui questi passaggi:

  1. Modifica il tuo Dockerfile per installare il pacchetto Profiler:

    FROM node:10
    ...
    RUN npm install @google-cloud/profiler
    
  2. Modifica il codice dell'applicazione require in crea un oggetto serviceContext che assegna a service il nome del servizio che viene profilato. Facoltativamente, puoi assegnare version la versione del servizio che viene profilato. Per ulteriori informazioni, consulta Argomenti Nome servizio e versione informazioni su queste opzioni di configurazione:

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

App Engine

Per l'ambiente flessibile di App Engine e per App Engine nell'ambiente standard, il codice require è simile al seguente:

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

In App Engine, i parametri service e version derivano dalla dell'ambiente di rete, in modo da non doverli specificare. Pertanto, non è necessario crea un oggetto serviceContext.

Analisi dei dati

Dopo che Profiler ha raccolto i dati, puoi visualizzare e analizzare questi dati utilizzando l'interfaccia Profiler.

Nella console Google Cloud, vai alla pagina Profiler:

Vai a Profiler

Puoi trovare questa pagina anche utilizzando la barra di ricerca.

Argomenti per nome e versione del servizio

Quando carichi l'agente Profiler, specifichi un argomento service-name e un un argomento facoltativo service-version per configurarlo.

Il nome del servizio consente a Profiler di raccogliere dati di profilazione per tutti di repliche di quel servizio. Il servizio profiler garantisce tasso di raccolta di un profilo al minuto, in media, per ogni servizio in ogni combinazione di versioni e zone del servizio.

Ad esempio, se hai un servizio con due versioni in esecuzione di repliche in tre zone, il profiler creerà una media di 6 profili al minuto per quel servizio.

Se utilizzi nomi di servizio diversi per le repliche, il servizio essere profilati più spesso del necessario, con un overhead di conseguenza più elevato.

Quando selezioni il nome di un servizio:

  • Scegli un nome che rappresenti chiaramente il servizio nella tua applicazione dell'architettura. La scelta del nome del servizio è meno importante se esegui solo un singolo servizio o una singola applicazione. È più importante che la tua applicazione viene eseguito come un insieme di microservizi, ad esempio.

  • Assicurati di non utilizzare valori specifici per il processo, ad esempio un ID processo, nella stringa service-name.

  • La stringa del nome del servizio deve corrispondere a questa espressione regolare:

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

Una buona linea guida è usare una stringa statica come imageproc-service come il nome del servizio.

La versione del servizio è facoltativa. Se specifichi la versione del servizio, Profiler può aggregare le informazioni di profilazione da più le istanze VM e visualizzarle correttamente. Può essere usato per contrassegnare versioni diverse dei servizi durante il loro deployment. La UI di Profiler ti consente filtrare i dati in base alla versione del servizio; In questo modo, puoi confrontare il rendimento delle versioni più vecchie e più recenti del codice.

Il valore dell'argomento service-version è una stringa in formato libero, ma valori per questo argomento generalmente sono i numeri di versione, ad esempio 1.0.0 o 2.1.2.

Logging agente

L'agente di profilazione può segnalare le informazioni di logging. Per abilitare il logging, imposta l'opzione logLevel all'avvio dell'agente. I valori logLevel supportati sono:

  • 0: disabilita il logging di tutti gli agenti.
  • 1: abilita il logging degli errori.
  • 2: attiva il logging degli avvisi (impostazione predefinita).
  • 3: attiva il logging delle informazioni.
  • 4: attiva il logging di debug.

Imposta il valore logLevel nello stesso oggetto che fornisce il contesto del servizio:

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

Esecuzione con Linux alpino

L'agente di profilazione Node.js per Linux Alps è supportato solo per configurazioni di Google Kubernetes Engine.

Errore di build

Se esegui npm install e la build non riesce e restituisce il seguente errore: nel Dockerfile mancano alcune dipendenze di build:

ERR! stack Error: not found: make

Per risolvere questo problema, aggiungi la seguente istruzione al file Dockerfile fase di creazione:

RUN apk add python3 g++ make

Errore di autenticazione

Se utilizzi immagini Docker eseguite con Linux alpino (ad es. golang:alpine o solo alpine), potrebbe essere visualizzato il seguente errore di autenticazione:

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

Tieni presente che, per visualizzare l'errore, devi avere abilitato il logging dell'agente.

L'errore indica che le immagini Docker con Linux Alpine non hanno certificati SSL radice installati per impostazione predefinita. Questi certificati sono necessari per l'agente di profilazione per comunicare con l'API profiler. Da risolvere questo errore, aggiungi il seguente comando apk al tuo Dockerfile:

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

Devi quindi ricreare la build ed eseguire nuovamente il deployment dell'applicazione.

Problemi noti

L'agente di profilazione per Node.js interferisce con la normale uscita del programma; può essere necessaria fino a un'ora per uscire dal programma dopo sono state completate tutte le attività del programma. Quando emetti un SIGINT, utilizzando Ctrl-C, questo determina l'arresto controllato del processo.

Passaggi successivi