Scarica i dati del profilo

Questo documento descrive come scaricare i dati del profilo sul sistema locale e come recuperare i dati del profilo in modo programmatico utilizzando un'applicazione Go.

Scarica i profili utilizzando la Google Cloud console

Per scaricare il profilo visualizzato nel grafico a fiamma, fai clic su Scarica .

Profiler utilizza la seguente convenzione di denominazione per il file scaricato:

profiler_[SERVICE_NAME]_[PROFILE_TYPE]_[FROM_DATE]_[TO_DATE]_[ZONE]_[VERSION].pb.gz

In questa espressione:

  • SERVICE_NAME contiene la selezione Servizio
  • PROFILE_TYPE contiene la selezione Tipo di profilo
  • FROM_DATE e TO_DATE contengono le specifiche dell'intervallo di tempo
  • ZONE contiene la selezione Zona
  • VERSION contiene la selezione Versione

Esempio: profiler_docdemo-service_HEAP_2018-04-22T20_25_31Z_2018-05-22T20_25_31Z_us-east1-c.pb.gz

Scarica i profili in modo programmatico

Per recuperare i dati del profilo, utilizza il metodo API ListProfiles. Il seguente programma Go di esempio mostra l'utilizzo di questa API.

Il programma di esempio crea una cartella nella directory da cui viene eseguito e genera un insieme di file pprof numerati. Ogni file ha una convenzione di denominazione simile a profile000042.pb.gz. Ogni directory contiene i dati del profilo e un file di metadati, metadata.csv, che contiene informazioni sui file scaricati.


// Sample export shows how ListProfiles API can be used to download
// existing pprof profiles for a given project from GCP.
package main

import (
	"bytes"
	"context"
	"encoding/csv"
	"encoding/json"
	"flag"
	"fmt"
	"io"
	"log"
	"os"
	"time"

	cloudprofiler "cloud.google.com/go/cloudprofiler/apiv2"
	pb "cloud.google.com/go/cloudprofiler/apiv2/cloudprofilerpb"
	"google.golang.org/api/iterator"
)

var project = flag.String("project", "", "GCP project ID from which profiles should be fetched")
var pageSize = flag.Int("page_size", 100, "Number of profiles fetched per page. Maximum 1000.")
var pageToken = flag.String("page_token", "", "PageToken from a previous ListProfiles call. If empty, the listing will start from the begnning. Invalid page tokens result in error.")
var maxProfiles = flag.Int("max_profiles", 1000, "Maximum number of profiles to fetch across all pages. If this is <= 0, will fetch all available profiles")

const ProfilesDownloadedSuccessfully = "Read max allowed profiles"

// This function reads profiles for a given project and stores them into locally created files.
// The profile metadata gets stored into a 'metdata.csv' file, while the individual pprof files
// are created per profile.
func downloadProfiles(ctx context.Context, w io.Writer, project, pageToken string, pageSize, maxProfiles int) error {
	client, err := cloudprofiler.NewExportClient(ctx)
	if err != nil {
		return err
	}
	defer client.Close()
	log.Printf("Attempting to fetch %v profiles with a pageSize of %v for %v\n", maxProfiles, pageSize, project)

	// Initial request for the ListProfiles API
	request := &pb.ListProfilesRequest{
		Parent:    fmt.Sprintf("projects/%s", project),
		PageSize:  int32(pageSize),
		PageToken: pageToken,
	}

	// create a folder for storing profiles & metadata
	profilesDirName := fmt.Sprintf