Ce produit n'est pas pris en charge par le site Datadog que vous avez sélectionné. ().
Présentation
L’enrichissement des traces APM joint automatiquement les données d’évaluation des feature flags à vos traces APM. Lorsqu’un feature flag est évalué au cours d’une requête tracée, le SDK enregistre quels feature flags ont été évalués et quelles variants ont été retournées. Ces données sont écrites dans le span racine et traitées côté serveur afin que vous puissiez :
Filtrer les traces par flag variant dans Trace Explorer à l’aide de facettes @feature_flags.<flag_key>:<variant>.
Déboguer les problèmes liés aux feature flags en visualisant quels feature flags étaient actifs lorsqu’une erreur s’est produite.
L'enrichissement des traces APM est expérimental et pourrait changer dans une version ultérieure.
L’enrichissement des traces APM est disponible dans les SDK suivants :
Langage
Version minimale
Go
2.8.0
Java
1.64.1
Node.js
5.105.0
Prérequis
Avant de configurer l’enrichissement des traces APM, confirmez les points suivants :
Les feature flags côté serveur sont déjà configurés et les feature flags sont évalués dans votre application.
APM tracing est activé et les traces sont transmises à Datadog.
Fonctionnement de l’enrichissement des traces APM
Lorsque l’enrichissement des traces APM est activé, le fournisseur OpenFeature de Datadog s’intègre au cycle de vie de l’évaluation :
Chaque fois qu’un feature flag est évalué, le SDK capture les métadonnées d’évaluation (flag serial ID, targeting key et default fallback value).
Les métadonnées sont accumulées sur le span racine de la trace actuelle.
Lorsque le span racine se termine, le SDK écrit les données accumulées sous forme de span tags compacts (ffe_flags_enc, ffe_subjects_enc, ffe_runtime_defaults).
Le backend Datadog décode ces tags et écrit des facettes @feature_flags.<flag_key> lisibles par l’homme dans le span, ce qui les rend consultables dans Trace Explorer.
Les tags côté SDK sont uniquement destinés au transport et sont supprimés côté serveur. Les tags visibles dans Trace Explorer sont les facettes @feature_flags.<flag_key> décodées.
Activer l’enrichissement des traces APM
Définissez la variable d’environnement suivante pour activer l’enrichissement des spans :
La variable d’environnement d’enrichissement est prise en charge par tous les SDK côté serveur compatibles. Aucune modification de code n’est requise. L’activation de la variable active automatiquement le hook d’enrichissement lors de l’initialisation du fournisseur Datadog OpenFeature. Node.js prend également en charge la configuration au niveau du code, comme indiqué dans les onglets de langage ci-dessous.
Configuration spécifique au langage
Aucune configuration de code supplémentaire n’est nécessaire. La variable d’environnement DD_EXPERIMENTAL_FLAGGING_PROVIDER_SPAN_ENRICHMENT_ENABLED active l’enrichissement des spans lors de l’initialisation de DatadogProvider.
main.go
packagemainimport("log""github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"ddopenfeature"github.com/DataDog/dd-trace-go/v2/openfeature""github.com/open-feature/go-sdk/openfeature")funcmain(){tracer.Start()defertracer.Stop()provider,err:=ddopenfeature.NewDatadogProvider(ddopenfeature.ProviderConfig{})iferr!=nil{log.Fatalf("Failed to create provider: %v",err)}ifddProvider,ok:=provider.(*ddopenfeature.DatadogProvider);ok{deferddProvider.Shutdown()}iferr:=openfeature.SetProviderAndWait(provider);err!=nil{log.Fatalf("Failed to set provider: %v",err)}client:=openfeature.NewClient("my-service")// Flag evaluations now enrich APM spans automatically}
Aucune configuration de code supplémentaire n’est nécessaire. La variable d’environnement DD_EXPERIMENTAL_FLAGGING_PROVIDER_SPAN_ENRICHMENT_ENABLED active l’enrichissement des spans. Java prend également en charge la propriété système -Ddd.experimental.flagging.provider.span.enrichment.enabled=true comme alternative.
Après le déploiement avec l’enrichissement des spans activé :
Déclenchez des requêtes dans votre application qui évaluent les feature flags.
Accédez à Trace Explorer et recherchez une trace récente de votre service.
Ouvrez une trace et recherchez les attributs @feature_flags.<flag_key> sur le span racine.
Le SDK écrit des tags encodés compacts (ffe_flags_enc, ffe_subjects_enc, ffe_runtime_defaults) sur le span racine. Le backend Datadog les décode et produit des facettes @feature_flags.<flag_key> lisibles par l’homme. Ce traitement prend quelques secondes après l’ingestion du span.
Après le traitement backend, le span racine contient des attributs tels que les exemples suivants :
Exemple d’attribut
Exemple de valeur
@feature_flags.checkout-flow
treatment
@feature_flags.dark-mode
control
Chaque clé d’attribut est @feature_flags.<flag_key> et la valeur est la variante renvoyée par l’évaluation.
Dépannage
Si les attributs @feature_flags.<flag_key> n’apparaissent pas sur vos traces :
Confirmez que l’enrichissement des spans est activé (DD_EXPERIMENTAL_FLAGGING_PROVIDER_SPAN_ENRICHMENT_ENABLED=true).
Vérifiez que votre application évalue les feature flags pendant les requêtes tracées. L’enrichissement ne se produit que lorsqu’un feature flag est évalué alors qu’une trace est active.
Attendez quelques secondes après l’ingestion du span. Les facettes @feature_flags.<flag_key> sont dérivées par le traitement backend et n’apparaissent pas dans les métadonnées brutes du span.
Pour le débogage, inspectez les métadonnées brutes du span pour le tag ffe_flags_enc. Si ce tag est présent, le SDK émet des données d’enrichissement. Soit le backend ne l’a pas encore traité, soit le feature flag gate n’est pas activé pour votre organisation.
Si les feature flags ne sont pas évalués du tout, consultez Server-Side Feature Flags pour la configuration et le dépannage spécifique au langage.
Recherchez et filtrez par flag variant
Ces exemples utilisent les facettes @feature_flags.<flag_key> pour filtrer les traces dans Trace Explorer:
Les attributs des feature flags sur les traces sont disponibles dans Datadog :
Monitors : Alertez lorsque le nombre d’erreurs pour un flag variant spécifique dépasse un seuil afin de détecter les régressions spécifiques à ce flag variant.
Dashboards : Ajoutez un widget de série temporelle comparant la latence p99 entre les flag variants en utilisant @feature_flags.<flag_key> comme dimension de regroupement.
Notebooks : Créez un notebook d’investigation comparant les performances entre les variantes de flag de fonctionnalité.
Visualizations : Utilisez la vue Top List dans Trace Explorer pour vérifier que la distribution du trafic de déploiement correspond à vos règles de ciblage.
Limites
Le SDK applique les limites suivantes par span pour limiter la taille de la charge utile :
Limite
Valeur
Flag serial IDs per span
128 à 200 (varie selon le SDK)
Subjects per span
10 à 25 (varie selon le SDK)
Runtime default keys per span
5
Runtime default value length
64 caractères (tronqué)
Les évaluations dépassant ces limites sont supprimées pour ce span.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: