Corréler les métriques et les traces à l'aide d'exemples

Ce document décrit les exemples, qui sont des exemples de points de données associés à un point de données de métrique. L'une des utilisations des exemples consiste à stocker un lien vers une trace, ce qui vous permet de mettre en corrélation vos données de métrique et de trace. Ce document explique également comment utiliser OpenTelemetry pour générer des exemples.

À propos des exemples

Les émulateurs sont un moyen d'associer des données arbitraires à des données de métriques. Vous pouvez les utiliser pour associer des données non métriques à des mesures. L'une des utilisations des exemples consiste à associer des données de trace aux données de métriques. Dans Cloud Monitoring, des exemples peuvent être associés à des données de métriques ayant le type de valeur Distribution. Les métriques à valeur de distribution collectent de nombreuses mesures et les regroupent dans des buckets. Chaque "point" correspond à un histogramme, c'est-à-dire un tableau répertoriant le nombre de buckets. Les mesures réelles ne sont pas conservées, seul le bucket compte. Pour plus d'informations, consultez la page À propos des métriques à valeur de distribution.

Lorsqu'un point de données de métrique est écrit, un tableau d'objets Exemplar peut être associé à ces données. Les exemples, lorsqu'ils sont utilisés, associent des informations utiles aux données de métriques. Par exemple, lorsque OpenTelemetry écrit un exemple, il associe un lien au délai actuel d'une trace.

Les données d'histogramme sont généralement affichées à l'aide d'une carte de densité. Lorsqu'un "point" contient un exemple, Cloud Monitoring annote la carte de densité avec un point:

  • Pour afficher des informations récapitulatives sur le point de métrique, activez l'info-bulle de l'annotation.
  • Pour accéder à la trace, sélectionnez l'annotation.

Par exemple, l'exemple d'application décrit dans Générer des traces et des métriques avec Go utilise OpenTelemetry pour écrire des données de métriques, des données de trace et des exemplaires. La capture d'écran suivante montre la valeur de la métrique prometheus/http_server_duration_milliseconds/histogram après plusieurs exécutions de l'application:

Exemple de carte de densité affichant plusieurs exemples.

La capture d'écran précédente montre plusieurs exemples. L'info-bulle d'un exemple est développée et indique la date, le nom de la trace, les centiles et une valeur de latence.

Lorsque l'annotation est sélectionnée, la trace liée dans l'exemple s'affiche:

Exemple de détails de trace pour un exemple.

Lorsque les informations affichées ne sont pas assez détaillées, vous pouvez sélectionner Afficher dans Trace, qui ouvre la page Explorateur Trace. Sur cette page, vous pouvez afficher les attributs de trace et accéder aux liens vers les entrées de journal.

Activer les exemples OpenTelemetry

Comme le montre l'exemple précédent, vous pouvez configurer OpenTelemetry pour écrire des exemples qui associent le délai actuel d'une trace à une mesure de métrique. Toutefois, pour que les exemples soient écrits, vous devez procéder comme suit:

  1. Configurez à la fois la métrique OpenTelemetry et les SDK de trace.
  2. Pour inclure des exemples dans votre instrumentation personnalisée, vous devez vous assurer que la métrique est enregistrée dans un segment et de transmettre le contexte du segment avec la mesure de métrique.

    Par exemple, la fonction computeSubrequests suit les instructions précédentes. La fonction subRequestsHistogram.Record est appelée après tracer.Start et avant span.End, qui est différée. Notez également que le contexte, ctx, est transmis de tracer.Start à la fonction Record:

    func computeSubrequests(r *http.Request, subRequests int) error {
    	// Add custom span representing the work done for the subrequests
    	ctx, span := tracer.Start(r.Context(), "subrequests")
    	defer span.End()
    
    	// Make specified number of http requests to the /single endpoint.
    	for i := 0; i < subRequests; i++ {
    		if err := callSingle(ctx); err != nil {
    			return err
    		}
    	}
    	// record number of sub-requests made
    	subRequestsHistogram.Record(ctx, int64(subRequests))
    	return nil
    }
    

    Pour en savoir plus sur cet exemple, consultez Ajouter des traces et des métriques personnalisées à votre application.

Étape suivante