Instrumentez une application C++ avec Jaeger afin d'envoyer les données de traçage vers Managed Service for OpenTelemetry. Après l'intégration, vous pouvez consulter les cartes topologiques, les traces distribuées, les transactions anormales et lentes, ainsi que l'analyse SQL dans la console.
Nous vous recommandons de connecter votre application à Managed Service for OpenTelemetry en utilisant le protocole OpenTelemetry (OTLP). Cette approche vous offre davantage de fonctionnalités, des capacités de traçage plus avancées et une meilleure expérience utilisateur. Alibaba Cloud fournit des instructions détaillées sur l'intégration d'OpenTelemetry avec une application, ainsi que les meilleures pratiques d'utilisation d'OpenTelemetry, pour vous aider à prendre rapidement en main Managed Service for OpenTelemetry. Pour plus d'informations, consultez la rubrique Préparatifs.
Fonctionnement de l'envoi des données
Les données de traçage transitent de votre application vers Managed Service for OpenTelemetry selon l'un des deux chemins suivants :
-
Sans Jaeger Agent : votre application envoie directement les données de traçage au backend de Managed Service for OpenTelemetry.
-
Avec Jaeger Agent : votre application envoie les données de traçage à un Jaeger Agent local, qui les transfère ensuite au backend.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un compilateur C++ avec GCC 4.9.2 ou une version ultérieure
CMake installé
Un endpoint obtenu depuis la console Managed Service for OpenTelemetry (consultez la section Obtenir un endpoint)
Obtenir un endpoint
Récupérez un endpoint depuis la console Managed Service for OpenTelemetry.
Nouvelle console
Connectez-vous à la console Managed Service for OpenTelemetry.
Dans le volet de navigation de gauche, cliquez sur Integration Center.
Sur la page Integration Center, dans la section Open Source Frameworks, cliquez sur la carte Jaeger.
-
Dans le panneau Jaeger, sélectionnez l'onglet Start Integration, puis choisissez la région dans laquelle vous souhaitez envoyer les données.
RemarqueLorsque vous accédez à une région pour la première fois, les ressources sont automatiquement initialisées.
-
Définissez les paramètres Connection Type et Export Protocol, puis copiez l'endpoint.
Parameter Guidance Connection Type Si votre service s'exécute sur Alibaba Cloud dans la région sélectionnée, sélectionnez Alibaba Cloud VPC Network. Sinon, sélectionnez Public Network. Export Protocol Sélectionnez HTTP (recommandé) ou gRPC, en fonction du protocole pris en charge par votre client. 
Ancienne console
Connectez-vous à la console Managed Service for OpenTelemetry.
Dans le volet de navigation de gauche, cliquez sur Cluster Configurations. Sur la page qui s'affiche, cliquez sur l'onglet Access point information.
Dans la barre de navigation supérieure, sélectionnez la région dans laquelle vous souhaitez envoyer les données. Dans la section Cluster Information, activez l'option Show Token.
-
Définissez le paramètre Client sur Jaeger. Dans la colonne Related Information, copiez un endpoint.
RemarqueSi votre application s'exécute dans un environnement de production Alibaba Cloud, utilisez un endpoint VPC. Sinon, utilisez un endpoint public.

Exécuter le projet d'exemple
Suivez les étapes ci-dessous pour télécharger le client C++ Jaeger, compiler le projet d'exemple, démarrer le Jaeger Agent et vérifier que les traces apparaissent dans la console.
Étape 1 : Télécharger et compiler jaeger-client-cpp
-
Téléchargez et extrayez le code source :
wget https://github.com/jaegertracing/jaeger-client-cpp/archive/master.zip && unzip master.zip -
Extrayez le package et accédez au répertoire. Ensuite, compilez le projet :
RemarqueLa compilation nécessite CMake et GCC 4.9.2 ou une version ultérieure.
mkdir build cd build cmake .. make
Étape 2 : Démarrer le Jaeger Agent
Téléchargez le Jaeger Agent et démarrez-le avec votre endpoint :
nohup ./jaeger-agent --reporter.grpc.host-port=tracing-analysis-dc-sz.aliyuncs.com:1883 --jaeger.tags=<endpoint>
Remplacez l'espace réservé suivant par votre valeur réelle :
| Placeholder | Description | Example |
|---|---|---|
<endpoint> |
L'endpoint obtenu depuis la console. Varie selon la région. | tracing-analysis-dc-sz.aliyuncs.com:1883 |
Étape 3 : Exécuter l'exemple
Depuis le répertoire build, exécutez l'exemple inclus :
./app ../examples/config.yml
Lorsque le paramètre reporter.logSpans est défini sur true dans le fichier de configuration, l'application consigne chaque span dans la console.
Étape 4 : Vérifier les traces
Ouvrez la console Managed Service for OpenTelemetry et accédez à la page Applications. Cliquez sur le nom de l'application pour afficher ses données de traçage, y compris la topologie, les traces et l'analyse des transactions. Si les traces n'apparaissent pas après quelques minutes, vérifiez que le Jaeger Agent a démarré sans erreur et que l'endpoint est correct.
Instrumenter votre application
Pour intégrer le traçage Jaeger à votre propre application C++, créez un Tracer, configurez-le et créez des spans pour capturer les opérations.
Créer un Tracer
Un Tracer génère des spans qui représentent des unités de travail. Initialisez-le à partir d'un fichier de configuration YAML et enregistrez-le en tant que traceur global :
#include <jaegertracing/Tracer.h>
#include <yaml-cpp/yaml.h>
void setUpTracer(const char* configFilePath)
{
auto configYAML = YAML::LoadFile(configFilePath);
// Parse the Jaeger configuration from the YAML file.
auto config = jaegertracing::Config::parse(configYAML);
// Create a tracer with a service name and console logger.
auto tracer = jaegertracing::Tracer::make(
"example-service", config, jaegertracing::logging::consoleLogger());
// Register the tracer as a global instance.
opentracing::Tracer::InitGlobal(
std::static_pointer_cast<opentracing::Tracer>(tracer));
}
Utilisez la configuration YAML suivante :
disabled: false
reporter:
logSpans: true
sampler:
type: const
param: 1
| Parameter | Description |
|---|---|
disabled |
Définissez sur false pour activer le traçage. |
reporter.logSpans |
Définissez sur true pour consigner les spans dans la console. |
sampler.type |
Stratégie d'échantillonnage. const échantillonne chaque trace. |
sampler.param |
Paramètre d'échantillonnage. 1 signifie échantillonner toutes les traces ; 0 signifie ne rien échantillonner. |
Créer des spans
Les spans représentent des opérations individuelles au sein d'une trace. Créez des spans racines pour les opérations de niveau supérieur et des spans enfants pour les sous-opérations :
#include <opentracing/tracer.h>
// Create a child span under an existing parent span.
void tracedSubroutine(const std::unique_ptr<opentracing::Span>& parentSpan)
{
auto span = opentracing::Tracer::Global()->StartSpan(
"tracedSubroutine",
{ opentracing::ChildOf(&parentSpan->context()) });
}
// Create a root span (no parent).
void tracedFunction()
{
auto span = opentracing::Tracer::Global()->StartSpan("tracedFunction");
tracedSubroutine(span);
}
Une fois que le Jaeger Agent est en cours d'exécution (voir l'étape Étape 2 : Démarrer le Jaeger Agent), les spans sont automatiquement envoyées à Managed Service for OpenTelemetry.