Instrumentation personnalisée C++ avec l'API Datadog
Création de spans
Pour instrumenter manuellement une méthode :
{
// Créer une span racine pour la requête active.
auto root_span = tracer.create_span();
root_span.set_name("get_ingredients");
// Définir un nom de ressource pour la span racine.
root_span.set_resource_name("bologna_sandwich");
// Créer une span enfant avec comme parent la span racine.
auto child_span = root_span.create_child();
child_span.set_name("cache_lookup");
// Définir un nom de ressource pour la span enfant.
child_span.set_resource_name("ingredients.bologna_sandwich");
// Les spans peuvent être finalisées à une heure précise...
child_span.set_end_time(std::chrono::steady_clock::now());
} // ... ou lorsque le destructeur est invoqué.
// Par exemple, root_span est finalisée ici.
Ajoutez des tags de span personnalisés à vos spans pour personnaliser la visibilité sur vos applications dans Datadog. Les tags de span sont appliqués à vos traces entrantes, ce qui vous permet de corréler le comportement observé avec des informations au niveau du code, comme le niveau du commerçant, le montant du paiement ou l’ID de l’utilisateur.
Notez que certains tags Datadog sont nécessaires pour le tagging de service unifié.
Installation manuelle
Ajoutez directement des tags à un objet span en appelant Span::set_tag
. Par exemple :
// Ajoutez directement des tags à une span en appelant `Span::set_tag`
auto span = tracer.create_span();
span.set_tag("la clé doit être une chaîne", "la valeur doit aussi être une chaîne");
// Autrement, ajoutez des tags en configurant un `SpanConfig`
datadog::tracing::SpanConfig opts;
opts.tags.emplace("team", "apm-proxy");
auto span2 = tracer.create_span(opts);
Variable d’environnement
Afin de définir des tags pour toutes vos spans, définissez la variable d’environnement DD_TAGS
en tant que liste de paires key:value
séparées par des virgules.
export DD_TAGS=team:apm-proxy,key:value
Installation manuelle
datadog::tracing::TracerConfig tracer_config;
tracer_config.tags = {
{"team", "apm-proxy"},
{"apply", "on all spans"}
};
const auto validated_config = datadog::tracing::finalize_config(tracer_config);
auto tracer = datadog::tracing::Tracer(*validated_config);
// Toutes les nouvelles spans possèdent des tags définis dans `tracer_config.tags`
auto span = tracer.create_span();
Définir des erreurs sur une span
Pour associer une span à une erreur, définissez un ou plusieurs tags d’erreur pour la span. Exemple :
Pour ajouter plus de détails à propos de l’erreur, définissez n’importe quelle combinaison des tags error.message
, error.stack
ou error.type
en utilisant Span::set_error_message
, Span::set_error_stack
et Span::set_error_type
respectivement. Consultez la section Suivi des erreurs pour en savoir plus sur les tags d’erreur.
Exemple d’utilisation de plusieurs tags d’erreur :
// Associer cette span à l'erreur « bad file descriptor » générée par la bibliothèque
// standard.
span.set_error_message("error");
span.set_error_stack("[EBADF] invalid file");
span.set_error_type("errno");
L'utilisation d'une des `Span::set_error_*` entraîne un appel sous-jacent à `Span::set_error(true)`.
Pour annuler la définition d’une erreur sur une span, définissez Span::set_error
sur false
, ce qui supprime toute combinaison de Span::set_error_stack
, Span::set_error_type
ou Span::set_error_message
.
// Supprimer les informations associées à cette span
span.set_error(false);
Vous pouvez injecter et extraire des en-têtes afin de configurer la propagation du contexte des traces distribuées. Consultez la section dédiée pour en savoir plus.
Filtrage de ressources
Il est possible d’exclure des traces en fonction de leur nom de ressource, afin d’empêcher le trafic Synthetic (tel que les checks de santé) d’envoyer des traces et d’influencer les métriques de traces. Pour en savoir plus à ce sujet et sur la configuration d’autres paramètres de sécurité et de personnalisation, consultez la page relative à la sécurité.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: