Migre sus Feature Flags desde Statsig

Este producto no es compatible con el sitio Datadog seleccionado. ().

Descripción general

Esta guía describe el proceso para migrar su lógica de Feature Flags de Statsig a Feature Flags de Datadog. Cubre mapeos conceptuales, instalación del SDK, inicialización y evaluación de Flags.

Lista de verificación de resumen

  • Reemplace @statsig/js-client con @datadog/openfeature-browser.
  • Intercambie statsig.initialize con OpenFeature.setProviderAndWait.
  • Convierta checkGate a client.getBooleanValue.
  • Convierta getDynamicConfig a client.getObjectValue o client.getStringValue.
  • Convierta getLayer a client.getObjectValue y desreferencie los campos del objeto JSON devuelto.
  • Use targetingKey en el contexto para identificar usuarios e impulsar la aleatorización basada en porcentajes.
  • Recree sus Flags de Statsig en Datadog.
  • Para aplicaciones del lado del servidor, use @openfeature/server-sdk y pase un contexto de evaluación por solicitud en lugar de un contexto global único.

Recree Flags en Datadog

Antes de cambiar las llamadas del SDK en su aplicación, recree sus puertas, configuraciones dinámicas y capas de Statsig como Flags en Datadog. En la interfaz de usuario de Datadog, vaya a Software Delivery > Feature Flags y cree Flags que coincidan con sus claves, tipos de variantes y reglas de segmentación de Statsig.

Mapeo conceptual

Los conceptos principales entre Statsig y Datadog son similares, pero la terminología difiere ligeramente.

Concepto de StatsigConcepto de DatadogNotas
Feature GateFeature Flag (booleano)Alternadores básicos de encendido/apagado.
Dynamic ConfigFeature Flag (variantes de JSON/cadena)Los Flags en Datadog pueden devolver cadenas, JSON o números, cubriendo los casos de uso de Dynamic Config de Statsig.
LayerFeature Flag (variante JSON)Utilice un Flag con valor JSON y lea los campos del objeto devuelto, similar a la desreferenciación de valores de una capa de Statsig.
ExperimentFeature Flag (con segmentación)Un Flag de Datadog se puede configurar con despliegues basados en porcentajes y reglas de segmentación específicas para ejecutar experimentos. Conecte los Flags a Datadog Experiments para medir el impacto en los resultados del usuario.
User/StatsigUserEvaluation ContextEl contexto (atributos) pasado al SDK para evaluar los Flags.

Instalación

Datadog diseña sus SDKs de Feature Flags para su uso con OpenFeature. Esto proporciona una API neutral respecto al proveedor mientras se utiliza Datadog como proveedor subyacente.

Elimine Statsig:

npm uninstall @statsig/js-client
# or
yarn remove @statsig/js-client

Instale Datadog y OpenFeature:

npm install @datadog/openfeature-browser @openfeature/web-sdk @openfeature/core
# or
yarn add @datadog/openfeature-browser @openfeature/web-sdk @openfeature/core

Nota: Para aplicaciones React, instale también @openfeature/react-sdk. Consulte React Feature Flags. Para implementaciones del lado del servidor, consulte la sección Contexto del lado del servidor y dinámico, o Server-Side Feature Flags para otros lenguajes.

Inicialización

Debe reemplazar la llamada statsig.initialize() con la configuración del proveedor de OpenFeature. Pase el contexto de evaluación a setProviderAndWait en el momento del registro para que los Flags se evalúen para el usuario correcto desde el principio.

Statsig (antiguo)

import { StatsigClient } from '@statsig/js-client';

const client = new StatsigClient('client-sdk-key', { userID: 'user-123' });
await client.initializeAsync();

Datadog (nuevo)

import { DatadogProvider } from '@datadog/openfeature-browser';
import { OpenFeature } from '@openfeature/web-sdk';
// Configure the Datadog provider
const provider = new DatadogProvider({
  clientToken: '<CLIENT_TOKEN>',
  applicationId: '<APPLICATION_ID>',
  site: 'datadoghq.com', // or datadoghq.eu, etc.
  env: 'production', // Environment from which to fetch flag configurations
});

// Set the evaluation context and register the provider together
const evaluationContext = {
  targetingKey: 'user-123', // Identifies the user and drives percentage-based randomization
  email: 'employee@company.com',
  plan: 'premium',
};

await OpenFeature.setProviderAndWait(provider, evaluationContext);
El targetingKey se utiliza como sujeto de aleatorización para la segmentación basada en porcentajes. Cuando un Flag segmenta un porcentaje de sujetos (por ejemplo, 50%), el targetingKey determina en qué bucket cae un usuario. Los usuarios con el mismo targetingKey siempre reciben la misma variante para un Flag determinado.

Para obtener más información sobre cómo crear tokens de cliente e IDs de aplicación, consulte API and Application Keys.

Evaluar Flags (verificar puertas)

Reemplace las llamadas a checkGate con getBooleanValue de OpenFeature.

Statsig (antiguo)

const isEnabled = client.checkGate('new_homepage_design');

if (isEnabled) {
  // Show new design
} else {
  // Show old design
}

Datadog (nuevo)

const client = OpenFeature.getClient();

// The second argument is the fallback value (default) if the flag fails to fetch
const isEnabled = client.getBooleanValue('new_homepage_design', false);

if (isEnabled) {
  // Show new design
} else {
  // Show old design
}

Obtener configuración (Dynamic Configs)

Si estaba utilizando getDynamicConfig o getExperiment para recuperar valores que no son booleanos (cadenas, JSON, números), utilice el método ingresado adecuado en OpenFeature.

Statsig (antiguo)

const config = client.getDynamicConfig('banner_config');
const title = config.get('title', 'Welcome');

Datadog (nuevo)

const client = OpenFeature.getClient();

// Assuming your Datadog flag 'banner_config' returns a JSON object variant
const bannerConfig = client.getObjectValue<{ title: string }>('banner_config', { title: 'Welcome' });
const title = bannerConfig.title;

Asignar capas a Flags de objetos JSON

Las capas de Statsig agrupan parámetros relacionados bajo una misma evaluación. En Datadog, utilice un Flag con valor JSON y lea los campos que necesite del objeto devuelto.

Statsig (antiguo)

const layer = client.getLayer('user_promo_experiments');
const promoTitle = layer.get('title', 'Welcome to Statsig!');
const discount = layer.get('discount', 0.1);

Datadog (nuevo)

const client = OpenFeature.getClient();

const promoConfig = client.getObjectValue<{ title: string; discount: number }>('user_promo_experiments', {
  title: 'Welcome!',
  discount: 0.1,
});
const promoTitle = promoConfig.title;
const discount = promoConfig.discount;

Actualizar el contexto del usuario después de iniciar sesión

Statsig actualiza el contexto del usuario mediante updateUser. En OpenFeature y Datadog, actualice el contexto después de la inicialización con OpenFeature.setContext(), por ejemplo, después de que un usuario inicie sesión.

Statsig (antiguo)

await client.updateUserAsync({
  userID: 'user-456',
  email: 'employee@company.com',
  custom: { plan: 'premium' },
});

Datadog (nuevo)

// Update the context for all future flag evaluations
await OpenFeature.setContext({
  targetingKey: 'user-456', // Identifies the user and drives percentage-based randomization
  email: 'employee@company.com',
  plan: 'premium',
});

Seguimiento y exposición

En Statsig, verificar una puerta registra automáticamente una exposición.

En Datadog, la telemetría de Flags se divide en dos categorías:

El registro de exposición registra que un sujeto recibió una variante de Flag específica. Cada evento de exposición incluye la clave del Flag, la variante servida y el contexto de evaluación. Utilice los datos de exposición para analizar los resultados de los experimentos y la adopción de características.

El registro de evaluación registra con qué frecuencia se devuelve cada variante. Los SDK de cliente envían recuentos de evaluación agregados de forma predeterminada. Los SDK de servidor emiten la métrica feature_flag.evaluations solo después de habilitar el registro de evaluaciones.

  1. SDKs de cliente: El registro de exposiciones está habilitado de forma predeterminada. El SDK envía eventos de exposición a la ingesta de exposiciones. Puede verlos en la lista de Feature Flags. Establezca enableExposureLogging: false en la configuración DatadogProvider si no necesita el seguimiento de exposiciones.
Configuración enableRumFeatureFlagTracking a true puede afectar los costos de RUM, ya que agrega evaluaciones de Flags a los eventos de RUM. Ambos enableExposureLogging y enableRumFeatureFlagTracking están activados de forma predeterminada para los SDKs de cliente.
  1. SDKs de servidor: El registro de exposiciones está activado de forma predeterminada. El registro de evaluaciones está desactivado de forma predeterminada. Para enviar métricas de evaluación desde los SDK de servidor, habilite las métricas de OpenTelemetry (por ejemplo, DD_METRICS_OTEL_ENABLED=true) y siga la guía específica del lenguaje en Server-Side Feature Flags.

Contexto del lado del servidor y dinámico

Las secciones anteriores cubren la migración del lado del cliente y del navegador, donde el contexto de evaluación suele ser estático durante la duración de la sesión de un usuario. Las aplicaciones del lado del servidor utilizan un SDK diferente y se autentican con una clave de Datadog API en lugar de un token de cliente. También suelen crear un nuevo contexto de evaluación para cada solicitud entrante.

Configure las variables de entorno necesarias antes de inicializar el SDK de servidor:

DD_API_KEY=<DATADOG_API_KEY>
DD_SITE=<DATADOG_SITE>
DD_ENV=<ENVIRONMENT_NAME>

Consulte Server-Side Feature Flags para obtener la lista completa de opciones de configuración de la aplicación y del Agent.

Instale el SDK del lado del servidor. Este ejemplo utiliza el Node.js Feature Flags SDK:

npm install dd-trace @openfeature/server-sdk

Registre el proveedor a través del trazador de Datadog:

import tracer from 'dd-trace';
import { OpenFeature } from '@openfeature/server-sdk';

tracer.init();

await OpenFeature.setProviderAndWait(tracer.openfeature);

Statsig (antiguo)

// The Statsig server SDK takes the user in each call
const isEnabled = statsig.checkGate(user, 'new_homepage_design');

Datadog (nuevo)

const client = OpenFeature.getClient();

app.get('/my-endpoint', async (req, res) => {
  const evaluationContext = {
    targetingKey: req.session?.userID ?? 'unknown',
  };

  const isEnabled = await client.getBooleanValue('new_homepage_design', false, evaluationContext);
  res.send(isEnabled ? 'New design' : 'Old design');
});

El SDK del navegador utiliza cualquier contexto de evaluación que esté configurado para cada evaluación de Flag. Puede actualizar ese contexto con OpenFeature.setContext() cuando el usuario inicie sesión o sus atributos cambien. El SDK del servidor, en cambio, pasa un nuevo contexto de evaluación en cada llamada de evaluación de Flag, ya que un proceso maneja muchos usuarios diferentes.

Para otros lenguajes de servidor, consulte Server-Side Feature Flags.