Fermer

juin 7, 2018

Comment intégrer MongoDB Atlas et Segment à l'aide de MongoDB Stitch –


Cet article a été publié à l'origine le MongoDB . Merci de soutenir les partenaires qui rendent SitePoint possible.

Il peut être assez difficile d'associer plusieurs systèmes, API et services tiers. Récemment, nous avons fait face à ce problème en interne, lorsque nous voulions obtenir des données de Segment dans MongoDB afin de profiter des capacités analytiques natives de MongoDB et du langage de requête riche. En utilisant des outils astucieux, nous avons réussi à le faire en moins d'une heure – la première fois.

Alors que ce post est détaillé, l'implémentation ne devrait durer qu'environ 20 minutes. Je vais commencer par présenter notre distribution de caractères ( quels outils nous avons utilisés pour faire ceci) et ensuite nous passerons à travers comment nous sommes allés à ce sujet.

Les Personnages [19659005] Pour collecter des données provenant de diverses sources, notamment des applications mobiles, Web, cloud et serveurs, les développeurs se sont tournés vers Segment depuis 2011. Segment consolide tous les événements générés par plusieurs sources de données dans un seul flux de navigation . Vous pouvez ensuite acheminer les données vers plus de 200 intégrations en un seul clic. Des sociétés comme DigitalOcean Nouvelle relique InVision et Instacart comptent toutes sur Segment pour différentes parties de leurs stratégies de croissance.

Pour stocker les données générées par Segment, nous nous tournons vers la base de données MongoDB Atlas – MongoDB en tant que service. Atlas offre le meilleur de MongoDB:

  • Un langage de requête simple qui facilite le travail avec vos données
  • Réplication et sharding natif pour assurer que les données peuvent vivre là où elles le doivent
  • Un modèle de données flexible qui vous permet de ingérer facilement des données provenant de diverses sources sans avoir besoin de savoir exactement comment les données seront structurées (sa forme)

Tout cela est enveloppé dans un service entièrement géré, conçu et géré par la même équipe qui construit la base de données, qui Cela signifie qu'en tant que développeur, vous pouvez réellement avoir votre gâteau et le manger aussi.

Le dernier personnage est MongoDB Stitch la plate-forme sans serveur de MongoDB. Stitch simplifie le développement et le déploiement d'applications grâce à un accès simple et sécurisé aux données et aux services, ce qui accélère la mise en marché de vos applications tout en réduisant les coûts opérationnels. Stitch nous permet d'implémenter une logique côté serveur qui connecte des outils tiers comme Segment, avec MongoDB, tout en assurant que tout est optimisé de la sécurité à la performance.

Order of Operations

Nous allons suivre les étapes suivantes. Si vous avez déjà terminé l'une de ces opérations, n'hésitez pas à sélectionner les éléments pertinents pour lesquels vous avez besoin d'assistance:

  1. Configuration d'un espace de travail Segment
  2. Ajout de la bibliothèque JavaScript Segment à votre application frontend – construit une page HTML ridiculement simple que vous pouvez utiliser pour tester
  3. Envoi d'un événement à Segment lorsqu'un utilisateur clique sur un bouton
  4. Inscription à MongoDB Atlas
  5. Création d'un cluster, vos données ont un emplacement live
  6. Création d'une application MongoDB Stitch qui accepte les données de Segment et les enregistre dans votre cluster MongoDB Atlas

Bien que ce blog traite de l'intégration de Segment à MongoDB, le processus décrit ci-dessous fonctionnera avec d'autres API et services Web. Rejoignez la communauté Slack et posez des questions si vous essayez de suivre un service différent

Chaque fois qu'un Segment voit de nouvelles données, un webhook déclenche un HTTP Post demande à Stitch. Une fonction de point gère ensuite l'authentification de la requête et, sans effectuer aucune manipulation de données, enregistre le corps de la requête directement dans la base de données – prête pour une analyse ultérieure.

Configuration d'un espace de travail dans le segment

Segment.com et créez un compte. Une fois terminé, Segment crée automatiquement un espace de travail pour vous. Les espaces de travail vous permettent de collaborer avec les membres de l'équipe, de contrôler les autorisations et de partager des sources de données dans toute votre équipe. Cliquez sur l'espace de travail que vous venez de créer.

Pour commencer à collecter des données dans votre espace de travail, nous devons ajouter une source. Dans ce cas, je vais collecter des données à partir d'un site Web, donc je vais sélectionner cette option, et sur l'écran suivant, Segment aura ajouté une source JavaScript à mon espace de travail. Toutes les données provenant de notre site Web seront attribuées à cette source. Il y a un lien bascule bleu que je peux cliquer dans la source qui me donnera le code que j'ai besoin d'ajouter à mon site Web afin qu'il puisse envoyer des données à Segment. Prenez note de cela car nous en aurons besoin sous peu.

Ajout d'un segment à votre site Web

J'ai mentionné un simple exemple de page que j'avais créé au cas où vous voudriez tester cette implémentation en dehors des autres codes sur lesquels vous travailliez. Vous pouvez l'obtenir à partir de ce rapport GitHub .

Dans ma page d'exemple, vous verrez que j'ai copié et collé le code Segment et l'ai déposé entre les balises de ma page. Vous devrez faire l'équivalent avec le code ou la langue dans lequel vous travaillez.

Si vous ouvrez cette page dans un navigateur, il devrait automatiquement commencer à envoyer des données à Segment. La façon la plus simple de voir ceci est d'ouvrir Segment dans une autre fenêtre et de cliquer sur le débogueur

Cliquer sur le bouton débogueur dans l'interface utilisateur du Segment pour afficher un flux d'événements en direct par votre application.

Personnalisation des événements que vous envoyez au segment

La bibliothèque de segments vous permet d'obtenir une granularité optimale avec les données que vous envoyez depuis votre application.

Au fur et à mesure de la croissance de votre application, vouloir élargir la portée de ce que vous suivez. La meilleure pratique vous oblige à réfléchir à la manière dont vous nommez les événements et aux données que vous envoyez. Sinon, différents développeurs nommeront les événements différemment et les enverront à des moments différents – lisez cet article pour plus d'informations sur le sujet.

Pour commencer, je vais supposer que nous voulons suivre tous les événements. temps quelqu'un clique sur un bouton favori sur une page Web. Nous allons utiliser du code JavaScript simple pour appeler le code de suivi analytique de Segment et envoyer un événement appelé "track" à l'API Segment. De cette façon, chaque fois que quelqu'un cliquera sur notre bouton favori, nous le saurons.

Vous verrez au bas de ma page web, qu'il y a une fonction jQuery attachée au .btn classe. Ajoutons ce qui suit après la fonction alert () .

 analytics.track ("Favori", {
        itemId: this.id,
        itemName: itemName
      });

Maintenant, actualisez la page dans votre navigateur et cliquez sur l'un des boutons favoris. Vous devriez voir apparaître une boîte d'alerte. Si vous vous dirigez vers votre fenêtre de débogage dans Segment, vous observerez également l'événement de piste.

Vous avez probablement remarqué que le code analytique ci-dessus stocke les données que vous voulez envoyer dans un document JSON. Vous pouvez ajouter des champs avec des informations plus spécifiques quand vous le souhaitez. Traditionnellement, ces données sont envoyées à une sorte de magasin de données tabulaire, comme MySQL ou PostgreSQL, mais chaque fois que de nouvelles informations sont ajoutées, vous devez effectuer une migration pour ajouter une nouvelle colonne à votre table. En plus de cela, vous devrez probablement mettre à jour le code de mappage objet-relationnel responsable de l'enregistrement de l'événement dans votre base de données. MongoDB est un magasin de données flexible, ce qui signifie qu'il n'y a pas besoin de migrations ni de traductions, car nous stockerons les données sous la forme exacte que vous leur avez envoyée.

Premiers pas avec MongoDB Atlas et Stitch

Utilisera deux services différents de MongoDB. Le premier, MongoDB Atlas, est une base de données en tant que service. C'est là que vivront toutes les données générées par Segment, à long terme. Le second, MongoDB Stitch, va jouer le rôle de notre backend. Nous allons utiliser Stitch pour configurer une extrémité où Segment peut envoyer des données, une fois reçu, Stitch valide que la requête Stitch a été envoyée par Segment, puis coordonne toute la logique pour sauvegarder ces données dans MongoDB Atlas pour analyse ultérieure et autres activités

Première utilisation de MongoDB Atlas

Cliquez ici pour créer un compte dans MongoDB Atlas.

Une fois que vous avez créé un compte, nous allons utiliser Atlas Cluster Builder pour: mettre en place notre premier cluster (chaque déploiement de MongoDB Atlas est composé de plusieurs nœuds qui aident à la haute disponibilité, c'est pourquoi nous l'appelons un cluster ). Pour cette démonstration, nous pouvons sortir avec une instance M0 – c'est gratuit pour toujours et idéal pour le bac à sable. Ce n'est pas sur une infrastructure dédiée, donc pour toute charge de travail de production, il vaut la peine d'étudier d'autres tailles d'instances.

Lorsque le Cluster Builder apparaît à l'écran, le fournisseur de cloud par défaut est AWS et la région sélectionnée est North Virginia. Laissez-les tels quels. Faites défiler vers le bas et cliquez sur la section Cluster Tier, et cela se développera pour montrer nos différentes options de dimensionnement. Sélectionnez M0 en haut de la liste.

Vous pouvez également personnaliser le nom de votre cluster en cliquant sur la section Nom du cluster.

Une fois terminé, cliquez sur Créer un cluster. Il faut de 7 à 10 minutes pour configurer votre cluster, alors prenez un verre, étirez vos jambes et revenez … Quand vous êtes prêt, poursuivez votre lecture.

Création d'une application de point

bâtiment, dans le menu de gauche, cliquez sur Stitch Apps. Vous serez redirigé vers la page des applications de points, d'où vous pouvez cliquer sur Créer une nouvelle application

Donnez un nom à votre application, dans ce cas, je l'appelle "SegmentIntegration" et reliez-la à la bonne grappe. Cliquez sur Créer

Une fois l'application prête, vous serez redirigé vers la page d'accueil de Stitch. Dans ce cas, nous pouvons désactiver l'authentification anonyme.

Nous devons activer l'accès à une collection MongoDB pour stocker nos données à partir du segment. Pour le nom de la base de données, j'utilise "segment", et pour la collection, j'utilise "events". Cliquez sur Ajouter une collection

Ensuite, nous allons devoir ajouter un service. Dans ce cas, nous allons configurer manuellement un service HTTP qui peut communiquer sur le Web avec le service Segment. Faites défiler vers le bas et cliquez sur Ajouter un service.

Vous allez sauter une page et devriez voir un grand panneau disant: "Cette application n'a pas de services" … pas pour longtemps. Cliquez à nouveau sur Ajouter un service …

Parmi les options maintenant visibles, sélectionnez HTTP, puis attribuez un nom au service. Je vais utiliser "SegmentHTTP". Cliquez sur Ajouter un service.

Ensuite, nous devons ajouter un Webhook entrant. Un Webhook est un point de terminaison HTTP qui écoute continuellement les appels entrants provenant de Segment, et lorsqu'il est appelé, il déclenche une fonction dans Stitch pour fonctionner

Cliquez sur Add Incoming Webhook

  • Laissez le nom par défaut tel quel et modifiez les éléments suivants fields:
  • Activez Respond avec le résultat car cela retournera le résultat de notre opération d'insertion
  • Change Request Validation à "Require Secret comme paramètre de requête"
  • Ajoutez un code secret au dernier champ de la page. Note importante: Nous considérerons cela comme notre "secret public" car il n'est PAS protégé du monde extérieur, c'est plutôt une simple validation que Stitch peut utiliser avant d'exécuter la fonction que nous allons créer. Bientôt, nous définirons également un "secret privé" qui ne sera pas visible en dehors de Stitch and Segment.

Enfin, cliquez sur "Enregistrer".

Définition de la logique de traitement des requêtes avec fonctions dans Stitch

Nous définissons le comportement personnalisé dans Stitch en utilisant fonctions JavaScript simple (ES6) qui peut être utilisé pour implémenter la logique et travailler avec tous les services intégrés Stitch

Heureusement, nous n'avons pas besoin de faire trop de travail ici. Stitch a déjà les bases mis en place pour nous. Nous devons définir une logique qui effectue les opérations suivantes:

  1. Récupère la signature de requête des en-têtes HTTP
  2. Utilise la signature pour valider l'authenticité des requêtes (ie, elle provient du Segment)
  3. Écrivez la requête à notre ] segment.events collection dans MongoDB Atlas

Obtention d'un en-tête HTTP et génération d'une signature HMAC

Ajoutez ce qui suit à la ligne 8, après l'accolade fermante}.

 const signature = payload.headers ['X-Signature'];

Puis, utilisez la bibliothèque de Crypto intégrée de Stitch pour générer un condensé que nous comparerons à la signature

 const digest = utils.crypto.hmac (payload.body.text (), context.values.get ("segment_shared_secret"), "sha1", "hex");

Il se passe beaucoup de choses ici, donc je vais parcourir chaque partie et expliquer. Segment signe les demandes avec une signature qui est une combinaison du corps HTTP et d'un secret partagé. Nous pouvons essayer de générer une signature identique en utilisant la fonction utils.crytop.hmac si nous connaissons le corps de la requête, le secret partagé, la fonction de hachage Segment utilisée pour créer ses signatures et le format de sortie. Si nous pouvons répliquer ce qui est contenu dans l'en-tête X-Signature de Segment, nous considérons qu'il s'agit d'une requête authentifiée.

Note : Cela va utiliser un secret privé, pas le secret public défini dans la page Paramètres lorsque nous avons créé le webhook. Ce secret ne devrait jamais être publiquement visible. Stitch nous permet de définir des valeurs que nous pouvons utiliser pour stocker des variables comme des clés API et des secrets.

Validation de l'authenticité de la requête et écriture dans MongoDB Atlas

Pour valider la requête, il suffit de comparer le résumé et la signature . Si elles sont équivalentes, nous écrirons dans la base de données. Ajoutez le code suivant directement après avoir généré le résumé .

 if (digest == signature) {
    // La demande est valide
} autre {
    // La requête est invalide
    console.log ("La requête est invalide");
}

Enfin, nous allons augmenter l'instruction if avec le comportement approprié nécessaire pour sauvegarder nos données. Sur la première ligne de la déclaration if, nous obtiendrons notre service "mongodb-atlas". Ajoutez le code suivant:

 let mongodb = context.services.get ("mongodb-atlas");

Ensuite, nous obtiendrons notre collection de base de données pour que nous puissions y écrire des données

 let events = mongodb.db ("segment"). Collection ("events");

Enfin, nous écrivons les données.

 events.insertOne (body);

Cliquez sur le bouton Enregistrer en haut à gauche de l'éditeur de code. À la fin de ceci, notre fonction entière devrait ressembler à ceci:

 exports = function (payload) {

  var queryArg = payload.query.arg || '';
  var body = {};

  if (payload.body) {
    body = JSON.parse (payload.body.text ());
  }

  // Récupère l'en-tête de la signature x et crée un condensé pour la comparaison
  const signature = payload.headers ['X-Signature'];
  const digest = utils.crypto.hmac (payload.body.text (),
    context.values.get ("segment_shared_secret"), "sha1", "hex");

  // N'écrit les données que si le résumé correspond à la x-signature du Segment!
  if (digest == signature) {

    Laissez mongodb = context.services.get ("mongodb-atlas");

    // Définit la collection pour écrire des données
    let events = mongodb.db ("segment"). collection ("événements");

    // Ecrire les données
    events.insertOne (corps);

  } autre  {
    console.log ("Le résumé ne correspond pas");
  }

  return queryArg + '' + body.msg;
}

Définition de règles pour une collection MongoDB Atlas

Ensuite, nous allons devoir mettre à jour nos règles qui permettent à Stitch d'écrire dans notre collection de base de données. Pour ce faire, dans le menu de gauche, cliquez sur "mongodb-atlas"

Sélectionnez la collection que nous avons créée précédemment, appelée " segment.events ". Cela affichera les règles de champ pour notre document de premier niveau. Nous pouvons utiliser ces règles pour définir les conditions qui doivent exister pour que notre fonction Stitch puisse lire ou écrire dans la collection.

Nous allons laisser les règles de lecture telles quelles pour l'instant, car nous ne lirons pas directement à partir de notre point application. Nous allons cependant modifier la règle d'écriture pour "évaluer" afin que notre fonction puisse écrire dans la base de données.

Modifier le contenu de la boîte "Ecrire":

  • Spécifier un document JSON vide {} comme règle d'écriture
  • Définir Autoriser tous les autres champs sur Activé, s'il n'est pas déjà défini.

Cliquez sur Enregistrer en haut de l'éditeur.

Ajout d'une valeur secrète dans MongoDB Stitch

Comme d'habitude, les clés API et les mots de passe sont stockés en tant que variables, ce qui signifie qu'ils ne sont jamais affectés à un repo de code – la visibilité est réduite. Stitch nous permet de créer des variables privées (valeurs) qui ne sont accessibles que par les webhooks entrants, les règles et les fonctions nommées.

Pour ce faire, cliquez sur Values ​​dans le menu Stitch, cliquez sur Create New Value et donnez un nom à notre valeur – dans ce cas segment_shared_secret (nous parlerons de notre secret privé). Nous entrons le contenu dans la grande zone de texte. Assurez-vous de cliquer sur Enregistrer une fois que vous avez terminé.

Obtenir notre URL Webhook

Pour copier l'URL du Web vers Segment from Stitch, naviguez en utilisant le menu Control: Services> SegmentHTTP> webhook0> Settings (en haut de la page). Maintenant, copiez le "Webhook URL".

Dans notre cas, les Webhooks ressemblent à ceci:

 https://webhooks.mongodb-stitch.com/api/client/v2.0 / app / segmentintegration / service / SegmentHTTP / incoming_webhook / webhook0

Ajout de l'URL du Webhook au segment

Passez à Segment et connectez-vous à votre espace de travail. Dans les destinations, nous allons cliquer sur Ajouter une destination.

Recherchez Webhook dans le catalogue des destinations et cliquez sur Webhooks. Une fois à la page suivante, cliquez sur Configurer Webhooks. Sélectionnez ensuite les sources à partir desquelles vous souhaitez envoyer des données. Une fois sélectionné, cliquez sur Confirmer la source.

Ensuite, nous nous retrouverons sur la page des paramètres de destination. Nous aurons besoin de configurer nos paramètres de connexion. Cliquez sur la case qui indique Webhooks (max 5).

Copiez l'URL de votre webhook depuis Stitch, et assurez-vous d'ajouter votre secret public à la fin en utilisant la syntaxe suivante:

URL initiale:

 https: //webhooks.mongodb-stitch.com/api/client/v2.0/app/segmentintegration/service/SegmentHTTP/incoming_webhook/webhook0

Ajoutez ce qui suit à la fin: ? Secret =

Final URL:

 https://webhooks.mongodb-stitch.com/api/client/v2.0 / app / segmentintegration / service / SegmentHTTP / incoming_webhook / webhook0? secret = PUBLIC_SECRET

Cliquez sur Enregistrer

Nous devons également dire à Segment quel est notre secret privé afin qu'il puisse créer une signature que nous pouvons vérifier dans Stitch. Pour ce faire, cliquez sur le champ Secret partagé et entrez la même valeur que celle utilisée pour le segment_shared_secret . Cliquez sur Enregistrer

Enfin, tout ce que nous devons faire est d'activer le webhook en cliquant sur le commutateur en haut de la page Paramètres de destination:

Générer des événements, et voir vos données dans MongoDB

Maintenant, tout ce que nous devons faire est d'utiliser notre page HTML de test pour générer quelques événements qui seront envoyés à Segment – nous pouvons utiliser le débogueur Segment pour nous assurer qu'ils arrivent Une fois que nous les verrons couler, ils iront aussi à MongoDB Stitch, qui écrira les événements à MongoDB Atlas.

Nous allons jeter un coup d'œil en utilisant Compass pour nous assurer que nos données sont visible. Une fois que nous nous connectons à notre cluster, nous devrions voir une base de données appelée "segment". Cliquez sur le segment et vous verrez notre collection appelée "événements". Si vous cliquez dessus, vous verrez un échantillon des données générées par notre interface!

The End

Merci pour votre lecture – j'espère que vous l'avez trouvé utile. Si vous construisez de nouvelles choses avec MongoDB Stitch, nous aimerions en entendre parler. Jesse Krasnostein  » class= »avatar avatar-96 wp-user-avatar wp-user-avatar-96 alignnone photo »/>

Jesse Krasnostein est responsable du marketing produit chez MongoDB .




Source link