Los datos de Feature Flag proporcionan una mayor visibilidad sobre la experiencia del usuario y el seguimiento del rendimiento. Permite determinar qué usuarios están viendo una Feature Flag específica y evaluar si los cambios introducidos están impactando la experiencia del usuario o afectando negativamente el rendimiento.

Al enriquecer tus datos de RUM con datos de Feature Flag, puedes estar seguro de que tu funcionalidad se lanza con éxito sin causar accidentalmente un error o una regresión en el rendimiento. Con esta capa adicional de información, puedes correlacionar los lanzamientos con el rendimiento, identificar problemas en lanzamientos específicos y solucionar problemas más rápido.

Configura el seguimiento de RUM

Feature Flag Tracking está disponible en el SDK de RUM para explorador, iOS, Android, Flutter y React Native.

Para habilitar la recolección de datos de Feature Flag para el SDK del explorador:

  1. Configura el seguimiento de RUM para explorador. Necesitas la versión del SDK de RUM del explorador >= 4.25.0.

  2. Inicializa el SDK de RUM y configura el parámetro de inicialización enableExperimentalFeatures con ["feature_flags"].

    npm
      import { datadogRum } from '@datadog/browser-rum';
    
      // Initialize Datadog Browser SDK
      datadogRum.init({
        ...
        enableExperimentalFeatures: ["feature_flags"],
        ...
    });
    
    CDN asíncrono
    window.DD_RUM.onReady(function() {
        window.DD_RUM.init({
          ...
          enableExperimentalFeatures: ["feature_flags"],
          ...
        })
    })
    
    CDN síncrono
    window.DD_RUM &&
        window.DD_RUM.init({
          ...
          enableExperimentalFeatures: ["feature_flags"],
          ...
        })
    

Para habilitar la recopilación de datos de Feature Flag para su aplicación iOS:

  1. Configura el seguimiento de RUM para iOS. Necesita la versión del SDK de RUM para iOS >= 1.16.0.

Para habilitar la recopilación de datos de Feature Flag para su aplicación Android:

  1. Configura el seguimiento de RUM para Android. Necesita la versión del SDK de RUM para Android >= 1.18.0.

Para habilitar la recopilación de datos de Feature Flag para su aplicación Flutter:

  1. Configura el seguimiento de RUM para Flutter. Necesita la versión del Plugin de Flutter >= 1.3.2.

Para habilitar la recopilación de datos de Feature Flag para su aplicación React Native:

  1. Configura el seguimiento de RUM para React Native. Necesita la versión del SDK de RUM para React Native >= 1.7.0.

Configura una integración de Feature Flag

Puede comenzar a recopilar datos de Feature Flag con soluciones personalizadas de gestión de Feature Flag, o utilizando uno de los socios de integración de Datadog que se enumeran a continuación.

Nota: Los siguientes caracteres especiales no son compatibles con el seguimiento de Feature Flag: ., :, +, -, =, &&, ||, >, <, !, (, ), {, }, [, ], ^, ", , , ~, *, ?, \. Datadog recomienda evitar estos caracteres cuando sea posible en los nombres de sus Feature Flags. Si se requiere utilizar uno de estos caracteres, reemplace el carácter antes de enviar los datos a Datadog. Por ejemplo:

datadogRum.addFeatureFlagEvaluation(key.replaceAll(':', '_'), value);
datadog
amplitude
custom
custom
devcycle
eppo
flagsmith
growthbook
kameleoon
launchdarkly
split
statsig

Integración de Amplitude

Antes de inicializar esta integración de Feature Flag, asegúrese de haber configurado el seguimiento de RUM.

Inicialice el SDK de Amplitude y cree un oyente de exposición que informe las evaluaciones de Feature Flag a Datadog utilizando el siguiente fragmento de código:

Para más información sobre cómo inicializar el SDK de Amplitude, consulte la documentación del SDK de JavaScript de Amplitude.

  const experiment = Experiment.initialize("CLIENT_DEPLOYMENT_KEY", {
    exposureTrackingProvider: {
      track(exposure: Exposure)  {
        // Send the feature flag when Amplitude reports the exposure
        datadogRum.addFeatureFlagEvaluation(exposure.flag_key, exposure.variant);
      }
    }
  })

Inicialice el SDK de Amplitude y cree un inspector que informe las evaluaciones de Feature Flag a Datadog utilizando el fragmento de código a continuación.

Para más información sobre cómo inicializar el SDK de Amplitude, consulte la documentación del SDK de iOS de Amplitude.

  class DatadogExposureTrackingProvider : ExposureTrackingProvider {
    func track(exposure: Exposure) {
      // Send the feature flag when Amplitude reports the exposure
      if let variant = exposure.variant {
        RUMMonitor.shared().addFeatureFlagEvaluation(name: exposure.flagKey, value: variant)
      }
    }
  }

  // In initialization:
  ExperimentConfig config = ExperimentConfigBuilder()
    .exposureTrackingProvider(DatadogExposureTrackingProvider(analytics))
    .build()

Inicialice el SDK de Amplitude y cree un inspector que informe las evaluaciones de Feature Flag a Datadog utilizando el fragmento de código a continuación.

Para más información sobre cómo inicializar el SDK de Amplitude, consulte la documentación del SDK de Android de Amplitude.

internal class DatadogExposureTrackingProvider : ExposureTrackingProvider {
  override fun track(exposure: Exposure) {
      // Send the feature flag when Amplitude reports the exposure
      GlobalRumMonitor.get().addFeatureFlagEvaluation(
          exposure.flagKey,
          exposure.variant.orEmpty()
      )
  }
}

// In initialization:
val config = ExperimentConfig.Builder()
    .exposureTrackingProvider(DatadogExposureTrackingProvider())
    .build()

Amplitude no es compatible con esta integración. Cree un ticket con Amplitude para solicitar esta función.

Integración de ConfigCat

Antes de inicializar esta integración de Feature Flag, asegúrese de haber configurado el seguimiento de RUM.

Al inicializar el SDK de Javascript de ConfigCat, suscríbase al evento flagEvaluated e informe las evaluaciones de Feature Flag a Datadog:

const configCatClient = configcat.getClient(
  '#YOUR-SDK-KEY#',
  configcat.PollingMode.AutoPoll,
  {
    setupHooks: (hooks) =>
      hooks.on('flagEvaluated', (details) => {
        datadogRum.addFeatureFlagEvaluation(details.key, details.value);
      })
  }
);

Para más información sobre cómo inicializar el SDK de Javascript de ConfigCat, consulte la documentación del SDK de JavaScript de ConfigCat.

Al inicializar el SDK de ConfigCat Swift para iOS, suscríbase al evento flagEvaluated e informe las evaluaciones de Feature Flag a Datadog:

  let client = ConfigCatClient.get(sdkKey: "#YOUR-SDK-KEY#") { options in
    options.hooks.addOnFlagEvaluated { details in
        RUMMonitor.shared().addFeatureFlagEvaluation(featureFlag: details.key, variation: details.value)
    }
  }

Para más información sobre cómo inicializar el SDK de ConfigCat Swift (iOS), consulte la documentación del SDK de Swift para iOS de ConfigCat.

Al inicializar el SDK de ConfigCat para Android, suscríbase al evento flagEvaluated e informe las evaluaciones de Feature Flag a Datadog:

ConfigCatClient client = ConfigCatClient.get("#YOUR-SDK-KEY#", options -> {
  options.hooks().addOnFlagEvaluated(details -> {
      GlobalRumMonitor.get().addFeatureFlagEvaluation(details.key, details.value);
  });
});

Para más información sobre cómo inicializar el SDK de ConfigCat para Android, consulte la documentación del SDK de Android de ConfigCat.

Al inicializar el SDK de ConfigCat para Dart, suscríbase al evento flagEvaluated e informe las evaluaciones de Feature Flag a Datadog:

  final client = ConfigCatClient.get(
    sdkKey: '#YOUR-SDK-KEY#',
    options: ConfigCatOptions(
        pollingMode: PollingMode.autoPoll(),
        hooks: Hooks(
            onFlagEvaluated: (details) => {
              DatadogSdk.instance.rum?.addFeatureFlagEvaluation(details.key, details.value);
            }
        )
    )
  );

Para obtener más información sobre la inicialización del SDK de ConfigCat Dart (Flutter), consulte la documentación del SDK de Dart de ConfigCat.

Al inicializar el SDK de ConfigCat React, suscríbase al evento flagEvaluated y reporte las evaluaciones de Feature Flag a Datadog:

<ConfigCatProvider
  sdkKey="YOUR_SDK_KEY"
  pollingMode={PollingMode.AutoPoll}
  options={{
    setupHooks: (hooks) =>
      hooks.on('flagEvaluated', (details) => {
        DdRum.addFeatureFlagEvaluation(details.key, details.value);
      }),
  }}
>
  ...
</ConfigCatProvider>

Para obtener más información sobre la inicialización del SDK de ConfigCat React, consulte la documentación del SDK de React de ConfigCat.

Gestión de Feature Flag personalizada

Antes de inicializar una integración personalizada de Feature Flag, asegúrese de haber configurado el seguimiento de RUM.

Cada vez que se evalúe un Feature Flag, agregue la siguiente función para enviar la información del Feature Flag a RUM:

datadogRum.addFeatureFlagEvaluation(key, value);

Cada vez que se evalúe un Feature Flag, agregue la siguiente función para enviar la información del Feature Flag a RUM:

RUMMonitor.shared().addFeatureFlagEvaluation(key, value);

Cada vez que se evalúe un Feature Flag, agregue la siguiente función para enviar la información del Feature Flag a RUM:

GlobalRumMonitor.get().addFeatureFlagEvaluation(key, value);

Cada vez que se evalúe un Feature Flag, agregue la siguiente función para enviar la información del Feature Flag a RUM:

DatadogSdk.instance.rum?.addFeatureFlagEvaluation(key, value);

Cada vez que se evalúe un Feature Flag, agregue la siguiente función para enviar la información del Feature Flag a RUM:

DdRum.addFeatureFlagEvaluation(key, value);

Integración de DevCycle

Antes de inicializar esta integración de Feature Flag, asegúrese de haber configurado el seguimiento de RUM.

Inicialice el SDK de DevCycle y suscríbase al evento variableEvaluated, eligiendo suscribirse a todas las evaluaciones de variables variableEvaluated:* o a evaluaciones de variables particulares variableEvaluated:my-variable-key.

Para obtener más información sobre la inicialización del SDK de DevCycle, consulte la documentación del SDK de JavaScript de DevCycle y para obtener más información sobre el sistema de eventos de DevCycle, consulte la Documentación de Eventos del SDK de DevCycle.

const user = { user_id: "<USER_ID>" };
const dvcOptions = { ... };
const dvcClient = initialize("<DVC_CLIENT_SDK_KEY>", user, dvcOptions);
...
dvcClient.subscribe(
    "variableEvaluated:*",
    (key, variable) => {
        // track all variable evaluations
        datadogRum.addFeatureFlagEvaluation(key, variable.value);
    }
)
...
dvcClient.subscribe(
    "variableEvaluated:my-variable-key",
    (key, variable) => {
        // track a particular variable evaluation
        datadogRum.addFeatureFlagEvaluation(key, variable.value);
    }
)

DevCycle no admite esta integración. Cree un ticket con DevCycle para solicitar esta característica.

DevCycle no admite esta integración. Cree un ticket con DevCycle para solicitar esta característica.

DevCycle no admite esta integración. Cree un ticket con DevCycle para solicitar esta característica.

DevCycle no admite esta integración. Cree un ticket con DevCycle para solicitar esta característica.

Integración de Eppo

Antes de inicializar esta integración de Feature Flag, asegúrese de haber configurado el seguimiento de RUM.

Inicializa el SDK de Eppo y crea un registrador de asignaciones que, además, reporte las evaluaciones de las banderas de características a Datadog utilizando el fragmento de código que se muestra a continuación.

Para obtener más información sobre la inicialización del SDK de Eppo, consulte la documentación del SDK de JavaScript de Eppo.

const assignmentLogger: IAssignmentLogger = {
  logAssignment(assignment) {
    datadogRum.addFeatureFlagEvaluation(assignment.featureFlag, assignment.variation);
  },
};

await eppoInit({
  apiKey: "<API_KEY>",
  assignmentLogger,
});

Inicializa el SDK de Eppo y crea un registrador de asignaciones que, además, reporte las evaluaciones de las banderas de características a Datadog utilizando el fragmento de código que se muestra a continuación.

Para obtener más información sobre la inicialización del SDK de Eppo, consulta la documentación del SDK de iOS de Eppo.

func IAssignmentLogger(assignment: Assignment) {
  RUMMonitor.shared().addFeatureFlagEvaluation(featureFlag: assignment.featureFlag, variation: assignment.variation)
}

let eppoClient = EppoClient(apiKey: "mock-api-key", assignmentLogger: IAssignmentLogger)

Inicialice el SDK de Eppo y cree un registrador de asignaciones que además reporte las evaluaciones de las banderas de características a Datadog utilizando el fragmento de código que se muestra a continuación.

Para obtener más información sobre la inicialización del SDK de Eppo, consulte la documentación del SDK de Android de Eppo.

AssignmentLogger logger = new AssignmentLogger() {
    @Override
    public void logAssignment(Assignment assignment) {
      GlobalRumMonitor.get().addFeatureFlagEvaluation(assignment.getFeatureFlag(), assignment.getVariation());
    }
};

EppoClient eppoClient = new EppoClient.Builder()
    .apiKey("YOUR_API_KEY")
    .assignmentLogger(logger)
    .application(application)
    .buildAndInit();

Eppo no admite esta integración. Contacta a Eppo para solicitar esta característica.

Inicializa el SDK de Eppo y crea un registrador de asignaciones que, además, reporte las evaluaciones de las banderas de características a Datadog utilizando el fragmento de código que se muestra a continuación.

Para obtener más información sobre la inicialización del SDK de Eppo, consulte la documentación del SDK de React Native de Eppo.

const assignmentLogger: IAssignmentLogger = {
  logAssignment(assignment) {
    DdRum.addFeatureFlagEvaluation(assignment.featureFlag, assignment.variation);
  },
};

await eppoInit({
  apiKey: "<API_KEY>",
  assignmentLogger,
});

integración de Flagsmith

Antes de inicializar esta integración de bandera de características, asegúrese de haber configurado el seguimiento de RUM.

Inicializa el SDK de Flagsmith con la opción datadogRum, que reporta las evaluaciones de las banderas de características a Datadog utilizando el fragmento de código que se muestra a continuación.

Opcionalmente, puedes configurar el cliente para que los rasgos de Flagsmith se envíen a Datadog a través de datadogRum.setUser(). Para más información sobre cómo inicializar el SDK de Flagsmith, consulta la documentación del SDK de JavaScript de Flagsmith.

 // Initialize the Flagsmith SDK
 flagsmith.init({
     datadogRum: {
         client: datadogRum,
         trackTraits: true,
     },
     ...
 })

Flagsmith no soporta esta integración. Crea un ticket con Flagsmith para solicitar esta característica.

Flagsmith no soporta esta integración. Crea un ticket con Flagsmith para solicitar esta característica.

Flagsmith no soporta esta integración. Crea un ticket con Flagsmith para solicitar esta característica.

Flagsmith actualmente no soporta esta integración. Crea un ticket con Flagsmith para solicitar esta característica.

integración de GrowthBook

Al inicializar el SDK de GrowthBook, reporta las evaluaciones de las banderas de características a Datadog utilizando el callback onFeatureUsage.

Para más información sobre cómo inicializar el SDK de GrowthBook, consulta la documentación del SDK de JavaScript de GrowthBook.

const gb = new GrowthBook({
  ...,
  onFeatureUsage: (featureKey, result) => {
    datadogRum.addFeatureFlagEvaluation(featureKey, result.value);
  },
});

gb.init();

GrowthBook no soporta esta integración. Contacta a GrowthBook para solicitar esta característica.

Al inicializar el SDK de GrowthBook, reporta las evaluaciones de las banderas de características a Datadog llamando a setFeatureUsageCallback.

Para más información sobre cómo inicializar el SDK de GrowthBook, consulta la documentación del SDK de Android de GrowthBook.

val gbBuilder = GBSDKBuilder(...)

gbBuilder.setFeatureUsageCallback { featureKey, result ->
  GlobalRumMonitor.get().addFeatureFlagEvaluation(featureKey, result.value);
}

val gb = gbBuilder.initialize()

Al inicializar el SDK de GrowthBook, reporta las evaluaciones de las banderas de características a Datadog llamando a setFeatureUsageCallback.

Para más información sobre cómo inicializar el SDK de GrowthBook, consulta la documentación del SDK de Flutter de GrowthBook.

final gbBuilder = GBSDKBuilderApp(...);
gbBuilder.setFeatureUsageCallback((featureKey, result) {
  DatadogSdk.instance.rum?.addFeatureFlagEvaluation(featureKey, result.value);
});
final gb = await gbBuilder.initialize();

Al inicializar el SDK de GrowthBook, reporta las evaluaciones de las banderas de características a Datadog utilizando el callback onFeatureUsage.

Para más información sobre cómo inicializar el SDK de GrowthBook, consulta la documentación del SDK de React Native de GrowthBook.

const gb = new GrowthBook({
  ...,
  onFeatureUsage: (featureKey, result) => {
    datadogRum.addFeatureFlagEvaluation(featureKey, result.value);
  },
});

gb.init();

integración de Kameleoon

Antes de inicializar esta integración de bandera de características, asegúrate de haber configurado el monitoreo de RUM.

Después de crear e inicializar el SDK de Kameleoon, suscríbete al evento Evaluation utilizando el manejador onEvent.

Para más información sobre el SDK, consulta la documentación del SDK de JavaScript de Kameleoon.

client.onEvent(EventType.Evaluation, ({ featureKey, variation }) => {
  datadogRum.addFeatureFlagEvaluation(featureKey, variation.key);
});

Kameleoon no soporta esta integración. Contacta a product@kameleoon.com para solicitar esta función.

Kameleoon no soporta esta integración. Contacta a product@kameleoon.com para solicitar esta función.

Kameleoon no soporta esta integración. Contacta a product@kameleoon.com para solicitar esta función.

Después de crear e inicializar el SDK de Kameleoon, suscríbete al evento Evaluation utilizando el manejador onEvent.

Aprende más sobre la inicialización del SDK en la documentación del SDK de Kameleoon React Native.

const { onEvent } = useInitialize();

onEvent(EventType.Evaluation, ({ featureKey, variation }) => {
  datadogRum.addFeatureFlagEvaluation(featureKey, variation.key);
});

Integración de LaunchDarkly

Antes de inicializar esta integración de bandera de características, asegúrate de haber configurado el seguimiento de RUM.

Inicializa el SDK de LaunchDarkly y crea un inspector que informe sobre las evaluaciones de las banderas de características a Datadog utilizando el fragmento de código que se muestra a continuación.

Para más información sobre la inicialización del SDK de LaunchDarkly, consulta la documentación del SDK de JavaScript de LaunchDarkly.

const client = LDClient.initialize("<CLIENT_SIDE_ID>", "<CONTEXT>", {
  inspectors: [
    {
      type: "flag-used",
      name: "dd-inspector",
      method: (key: string, detail: LDClient.LDEvaluationDetail) => {
        datadogRum.addFeatureFlagEvaluation(key, detail.value);
      },
    },
  ],
});

LaunchDarkly no soporta esta integración. Crea un ticket con LaunchDarkly para solicitar esta característica.

LaunchDarkly no soporta esta integración. Crea un ticket con LaunchDarkly para solicitar esta característica.

LaunchDarkly no soporta esta integración. Crea un ticket con LaunchDarkly para solicitar esta característica.

LaunchDarkly actualmente no soporta esta integración. Crea un ticket con LaunchDarkly para solicitar esta característica.

Integración de Split

Antes de inicializar esta integración de bandera de características, asegúrate de haber configurado el seguimiento de RUM.

Inicializa el SDK de Split y crea un listener de impresiones que informe sobre las evaluaciones de las banderas de características a Datadog utilizando el siguiente fragmento de código:

Para más información sobre la inicialización del SDK de Split, consulta la documentación del SDK de JavaScript de Split.

const factory = SplitFactory({
    core: {
      authorizationKey: "<APP_KEY>",
      key: "<USER_ID>",
    },
    impressionListener: {
      logImpression(impressionData) {
          datadogRum
              .addFeatureFlagEvaluation(
                  impressionData.impression.feature,
                  impressionData.impression.treatment
              );
    },
  },
});

const client = factory.client();

Inicializa el SDK de Split y crea un inspector que informe sobre las evaluaciones de las banderas de características a Datadog utilizando el fragmento de código a continuación.

Para más información sobre la inicialización del SDK de Split, consulta la documentación del SDK de iOS de Split.

  let config = SplitClientConfig()
  // Send the feature flag when Split reports the impression
  config.impressionListener = { impression in
      if let feature = impression.feature,
          let treatment = impression.treatment {
          RUMMonitor.shared().addFeatureFlagEvaluation(name: feature, value: treatment)
      }
  }

Inicializa el SDK de Split y crea un inspector que informe sobre las evaluaciones de las banderas de características a Datadog utilizando el fragmento de código a continuación.

Para más información sobre la inicialización del SDK de Split, consulta la documentación del SDK de Android de Split.

internal class DatadogSplitImpressionListener : ImpressionListener {
  override fun log(impression: Impression) {
      // Send the feature flag when Split reports the impression
      GlobalRumMonitor.get().addFeatureFlagEvaluation(
          impression.split(),
          impression.treatment()
      )
  }
  override fun close() {
  }
}

// In initialization:
val apikey = BuildConfig.SPLIT_API_KEY
val config = SplitClientConfig.builder()
    .impressionListener(DatadogSplitImpressionListener())
    .build()

Inicializa el SDK de Split y crea un inspector que informe sobre las evaluaciones de las banderas de características a Datadog utilizando el fragmento de código a continuación.

Para más información sobre la inicialización del SDK de Split, consulta la documentación del plugin de Flutter de Split.

  StreamSubscription<Impression> impressionsStream = _split.impressionsStream().listen((impression) {
    // Send the feature flag when Split reports the impression
    final split = impression.split;
    final treatment = impression.treatment;
    if (split != null && treatment != null) {
      DatadogSdk.instance.rum?.addFeatureFlagEvaluation(split, treatment);
    }
  });

Inicializa el SDK de Split y crea un listener de impresiones que informe sobre las evaluaciones de las banderas de características a Datadog utilizando el siguiente fragmento de código:

Para más información sobre la inicialización del SDK de Split, consulta la documentación del SDK de React Native de Split.

const factory = SplitFactory({
    core: {
      authorizationKey: "<APP_KEY>",
      key: "<USER_ID>",
    },
    impressionListener: {
      logImpression(impressionData) {
          DdRum
              .addFeatureFlagEvaluation(
                  impressionData.impression.feature,
                  impressionData.impression.treatment
              );
    },
  },
});

const client = factory.client();

Integración de Statsig

Antes de inicializar esta integración de bandera de características, asegúrate de haber configurado el monitoreo de RUM.

Inicializa el SDK de Statsig con statsig.initialize.

  1. Actualiza tu versión del SDK de RUM para navegadores a 4.25.0 o superior.

  2. Inicializa el SDK de RUM y configura el parámetro de inicialización enableExperimentalFeatures con ["feature_flags"].

  3. Inicializa el SDK de Statsig (>= v4.34.0) e implementa la opción gateEvaluationCallback como se muestra a continuación:

     await statsig.initialize('client-<STATSIG CLIENT KEY>',
     {userID: '<USER ID>'},
     {
         gateEvaluationCallback: (key, value) => {
             datadogRum.addFeatureFlagEvaluation(key, value);
         }
     }
     );
    

Statsig no admite esta integración. Contacta a support@statsig.com para solicitar esta característica.

Statsig no admite esta integración. Contacta a support@statsig.com para solicitar esta característica.

Statsig no admite esta integración. Contacta a support@statsig.com para solicitar esta característica.

Statsig actualmente no admite esta integración. Contacta a support@statsig.com para solicitar esta característica.

Próximos pasos

Visualización y análisis de tus banderas de características.

Lectura adicional