Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Profilazione delle applicazioni Node.js

In questa pagina viene descritto come modificare l'applicazione Node.js per acquisire i dati di profilazione e far sì che vengano inviati al tuo progetto Google Cloud. Per informazioni generali sulla profilazione, consulta Concetti di profilazione.

Tipi di profilo per Node.js:

  • Heap
  • Tempo totale di esecuzione

Versioni supportate per Node.js:

  • 10.4.1 o versioni successive nel ramo della versione 10.x.
  • 12.0.0 o superiore sul ramo della versione 12.x.
  • 14.0.0 o versioni successive sul ramo di versione 14.x.
  • Per il criterio di rilascio Node.js, consulta Release.

Versioni supportate per l'agente di profilazione:

  • È supportata la release più recente dell'agente. In generale, le release che risalgono a più di un anno fa non sono supportate. Ti consigliamo di utilizzare la versione più recente dell'agente.

Sistemi operativi supportati:

  • Linux. La profilazione di applicazioni Node.js è supportata per i kernel Linux la cui libreria C standard è implementata con glibc o con musl. Per informazioni di configurazione specifiche per i kernel Linux Alpine, consulta In esecuzione su Linux Alpine.

Ambienti supportati:

Abilitazione dell'API Profiler

Prima di utilizzare l'agente di profilazione, assicurati che l'API Profiler sottostante sia abilitata. Puoi controllare lo stato dell'API e abilitarla, se necessario, utilizzando Google Cloud CLI o Google Cloud Console:

Interfaccia a riga di comando gcloud

  1. Se non hai ancora installato Google Cloud CLI sulla tua workstation, consulta la documentazione di Google Cloud CLI.

  2. Esegui questo comando:

    gcloud services enable cloudprofiler.googleapis.com
    

Per maggiori informazioni, consulta gcloud services.

console Google Cloud

  1. Vai alla dashboard API e servizi:

    Vai a API e servizi

  2. Seleziona il progetto che utilizzerai per accedere all'API.

  3. Fai clic sul pulsante Aggiungi API e servizi.

    Aggiungi API e servizi

  4. Cerca API Profiler.

  5. Nei risultati di ricerca, seleziona l'API Cloud Profiler.

    Se non vedi l'API Cloud Profiler nell'elenco, seleziona l'API Stackdriver Profiler.

  6. Se viene visualizzata l'opzione API abilitata, significa che l'API è già abilitata. In caso contrario, fai clic sul pulsante Attiva.

Utilizzo di Cloud Profiler

In tutti gli ambienti supportati, puoi utilizzare Profiler installando il pacchetto @google-cloud/profiler, aggiungendo un'istruzione require all'applicazione, quindi eseguendo il deployment dell'applicazione nel modo consueto.

Prima di installare @google-cloud/profiler

Il pacchetto @google-cloud/profiler dipende da un modulo nativo. I binari binari per questo modulo nativo sono disponibili per tutte le combinazioni di lingue e piattaforme supportate. Per determinare quale programma binario predefinito installare, @google-cloud/profiler utilizza node-pre-gyp.

Installazione

Per installare la versione più recente di Cloud Profiler:

    npm install --save @google-cloud/profiler

Se utilizzi anche l'agente Trace, quando modifichi l'applicazione, importa il pacchetto Profiler dopo il pacchetto agente Trace (@google-cloud/trace-agent). Per ulteriori informazioni, consulta la sezione Configurazione di Cloud Trace per Node.js.

Compute Engine

Per Compute Engine, procedi come segue:

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

    npm install --save @google-cloud/profiler
    
  2. Modifica il codice require dell'applicazione per creare un oggetto serviceContext che assegna ad service il nome del servizio da considerare. Facoltativamente, puoi assegnare a version la versione del servizio di cui viene eseguito il profilo. Per ulteriori informazioni su queste opzioni di configurazione, consulta la pagina Nome servizio e argomenti della versione:

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

GKE

Per GKE, procedi nel seguente modo:

  1. Modifica il Dockerfile per installare il pacchetto Profiler:

    FROM node:10
    ...
    RUN npm install @google-cloud/profiler
    
  2. Modifica il codice require dell'applicazione per creare un oggetto serviceContext che assegna ad service il nome del servizio da considerare. Facoltativamente, puoi assegnare a version la versione del servizio di cui viene eseguito il profilo. Per ulteriori informazioni su queste opzioni di configurazione, consulta la pagina Nome servizio e argomenti della versione:

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

App Engine

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

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

In App Engine, i parametri service e version vengono derivati dall'ambiente, quindi non devi specificarli. Pertanto, non è necessario creare un oggetto serviceContext.

Analisi dei dati

Dopo che Profiler ha raccolto i dati, puoi visualizzare e analizzare questi dati utilizzando l'interfaccia di Profiler. Per iniziare a utilizzare questa interfaccia, consulta la sezione Apertura dell'interfaccia di Profiler.

Nome del servizio e argomenti della versione

Quando carichi l'agente Profiler, devi specificare un argomento del nome del servizio e un argomento facoltativo della versione del servizio per configurarlo.

Il nome del servizio consente a Profiler di raccogliere i dati di profilazione per tutte le repliche di quel servizio. Il servizio Profiler garantisce una frequenza di raccolta di un profilo al minuto, in media, per ogni nome di servizio in ogni versione e zona del servizio combinata.

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

Se utilizzi nomi di servizi diversi per le tue repliche, il servizio verrà profilato più spesso del necessario, con un sovraccarico corrispondente di conseguenza.

Quando selezioni il nome di un servizio:

  • Scegli un nome che rappresenti chiaramente il servizio nella struttura dell'applicazione. La scelta del nome del servizio è meno importante se esegui un solo servizio o applicazione. Ad esempio, è più importante se la tua applicazione viene eseguita come un insieme di microservizi.

  • Assicurati di non utilizzare valori specifici per il processo, come un ID processo, nella stringa del nome del servizio.

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

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

È buona norma utilizzare una stringa statica come imageproc-service come nome del servizio.

La versione del servizio è facoltativa. Se specifichi la versione del servizio, Profiler può aggregare le informazioni di profilazione da più istanze e visualizzarle correttamente. Può essere utilizzata per contrassegnare versioni diverse dei servizi durante il deployment. L'interfaccia utente di Profiler consente di filtrare i dati in base alla versione del servizio. In questo modo, puoi confrontare le prestazioni delle versioni precedenti e più recenti del codice.

Il valore dell'argomento della versione del servizio è una stringa in formato libero, ma i valori di questo argomento in genere sono simili ai numeri di versione, ad esempio 1.0.0 o 2.1.2.

Logging dell'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 di logLevel supportati sono:

  • 0: disattiva tutti i log dell'agente.
  • 1: abilita il logging degli errori.
  • 2: abilita il logging degli avvisi (impostazione predefinita).
  • 3: abilita il logging delle informazioni.
  • 4: abilita 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 Alpine

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

Se utilizzi immagini Docker eseguite con Linux Alpine (come golang:alpine o solo alpine), potresti visualizzare il seguente errore di autenticazione:

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

Nota che per visualizzare l'errore è necessario che il logging dell'agente sia abilitato.

L'errore indica che nelle immagini Docker con Linux Alpine non sono installati i certificati SSL radice per impostazione predefinita. Tali certificati sono necessari affinché l'agente di profilazione comunichi con l'API Profiler. Per risolvere questo errore, aggiungi il seguente comando apk al Dockerfile:

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

quindi dovrai ricreare e rieseguire il deployment dell'applicazione.

Problemi noti

L'agente di profilazione per Node.js interferisce con la normale uscita del programma; può richiedere fino a un'ora per uscire dal programma dopo il completamento di tutte le attività nel programma. Quando emetti un SIGINT, ad esempio utilizzando Ctrl-C, il processo termina correttamente.

Passaggi successivi

Per saperne di più sul grafico e sui controlli di Profiler, consulta Utilizzo dell'interfaccia di Cloud Profiler. Per informazioni avanzate, consulta quanto segue: