Documentation

Du premier événement au premier tableau de bord.

Pas besoin d'un projet de data engineering pour commencer.Créez une organisation, définissez un bucket d'événements, envoyez quelques données et construisez votre première requête.

01

Créez votre compte

Créez un compte et votre organisation.

Le premier membre de l'organisation devient administrateur et peut inviter le reste de l'équipe.

Paramètres → Organisation contient le nom de l'entreprise, l'e-mail de facturation et l'adresse. Paramètres → Marque est l'endroit où vous définissez le logo et les couleurs que vos clients voient sur les tableaux de bord partagés et intégrés.

Le formulaire d'inscription d'Event Horizon DataL'onglet Organisation dans les Paramètres, avec le nom, l'e-mail et l'adresse de l'entreprise

02

Définissez vos données

Créez un bucket d'événements à partir d'un événement d'exemple ou définissez vous-même ses champs.

Indiquez les horodatages, les dimensions et les métriques.

Event Horizon utilise cette structure pour rendre les données interrogeables.

Un bucket d’événements définit à la fois ce que vous envoyez et la façon de l’analyser. Collez un événement d’exemple et les colonnes vous sont proposées, typées, classées et motivées ; vous confirmez ou corrigez. Rien n’est créé avant cela. Vous pouvez aussi les déclarer à la main, en choisissant ce qu’est chacune :

La section Buckets affichant les buckets d'événements d'un espace de travail
timestamp_keyLe moment de l'événement. Obligatoire, et c'est ce que lisent tous les filtres temporels.
dimensionCe par quoi vous regroupez et filtrez : pays, campagne, plan d'abonnement. La valeur est enregistrée telle qu'elle était au moment de l'événement, donc ce qu'une entreprise s'appelait en 2020 se lit toujours 2020.
metricCe que vous additionnez ou moyennez : chiffre d'affaires, durée, quantité.

Déclarez le fuseau horaire d'où viennent vos données. Tout est stocké en UTC, et un fuseau non déclaré est supposé être UTC. Une heure mal interprétée ne se corrige pas après coup.

Les horodatages peuvent être une chaîne ISO-8601 ou un nombre epoch en secondes ou en millisecondes. Nous déduisons l'unité de l'ordre de grandeur, donc `1787232000` et `1787232000000` désignent le même instant. Un nombre reçu sous forme de chaîne est lu de la même façon.

03

Connectez une source

Envoyez des données par webhook, flux de changements d'une base de données, workflow d'API ou une autre méthode d'ingestion prise en charge.

Démarrez le workflow. Event Horizon prend en charge le chemin d'ingestion.

Le chemin le plus court est un webhook, et un nouveau workflow s’ouvre déjà avec un webhook relié à un Loader. Si vos données viennent d’ailleurs, la barre au-dessus du canevas le remplace par une autre forme courante : une base de données que nous suivons au fil de ses changements, ou une API que nous appelons selon une périodicité. Enregistrez, et l’adresse est générée par nos soins et non modifiable, car elle dérive de votre organisation et de ce nœud, si bien qu’elle ne peut ni entrer en collision ni être falsifiée.

La liste des workflows, où se construisent les pipelines d'ingestion

Dans l'inspecteur du nœud, choisissez Gérer le secret → Générer. La clé est affichée une seule fois et stockée uniquement sous forme de hachage : même nous ne pouvons pas la récupérer. Si vous la perdez, vous en générez une autre. Envoyez ensuite à l'adresse affichée dans le champ URL du nœud :

curl -X POST "https://ingest.eventhorizondata.com/webhooks/<org>/<node>" \
  -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{"event_id":"evt-1","value":42}'

Notez l'hôte ingest. L'ingestion a sa propre entrée, distincte de l'application, et une requête envoyée au domaine de l'application sera refusée.

Démarrez le workflow. Un nœud webhook n'accepte de trafic que tant que son workflow tourne.

Envoyez un `event_id` dans le corps, ou un en-tête `Idempotency-Key`, et une répétition du même identifiant dans les cinq minutes est écartée plutôt qu'enregistrée deux fois. Sans l'un ni l'autre, chaque requête est acceptée comme nouvelle : nous préférons ne pas deviner ce qui fait que deux de vos événements n'en sont qu'un.

Un 401 signifie l'une de deux choses : l'en-tête Authorization manque, ou la clé ne correspond pas. Un nœud dont la clé n'a jamais été générée refuse tout, par conception.

04

Regardez vos données

Ouvrez Explorer et choisissez :

Que s'est-il passé ?
Métrique.
À qui ou où ?
Dimension.
Quand ?
Période.

Construisez ensuite la requête visuellement. Sans SQL.

L'explorateur de requêtes n'a pas besoin de SQL : choisissez un bucket d'événements, une mesure, un axe de regroupement et une période. Vous pouvez aussi écrire la question avec des mots et appuyer sur Ask : le brouillon revient rempli, avec une note qui dit ce qu'il a couvert et ce qu'il a laissé de côté. Rien ne s'exécute avant que vous l'ayez regardé. Les tableaux de bord se construisent de la même façon et peuvent être partagés par lien ou intégrés dans votre propre produit à votre marque.

L'explorateur de requêtes, avec la boîte Ask au-dessus d'une requête construite visuellement

05

Construisez le tableau de bord

Transformez les questions qui comptent pour vous en widgets de tableau de bord. Filtrez les résultats et descendez dans le détail.

Partagez le tableau de bord ou intégrez-le à votre propre produit.

06

Contrôlez l'accès

Invitez votre équipe. Attribuez des rôles. Utilisez les portées de lignes quand quelqu'un ne doit voir qu'une partie des données.

Paramètres → Équipe pour inviter des personnes, Rôles pour définir ce que chacune peut faire, et portées de lignes pour limiter quelqu'un à une partie des données, par exemple un de vos clients qui ne doit voir que sa propre région.

L'onglet Équipe dans les Paramètres, listant les membres et leurs rôles

07

Utilisez le SQL quand vous en avez besoin

Quand l'interface visuelle ne suffit pas, utilisez l'interface SQL. Les requêtes sont validées, limitées à votre tenant et leur coût est vérifié avant exécution.

Enregistrez les requêtes utiles comme widgets de tableau de bord. Connectez Python, R ou Jupyter quand votre travail a besoin d'un notebook.

La plupart des questions ne demandent aucun SQL, mais quand vous le souhaitez, Explore propose un onglet SQL. Vous écrivez du SQL ordinaire sur vos buckets d'événements comme si chacun était une table, sans voir comment le warehouse les stocke en dessous. Votre requête est validée et reconstruite de notre côté, verrouillée à votre organisation, si bien qu'elle ne peut lire que vos propres données.

Chaque requête est estimée avant de s'exécuter, à la manière du dry-run de BigQuery : une requête qui lirait plus que ne l'autorise votre offre est refusée d'emblée, l'estimation affichée, pour qu'une requête lourde échoue vite au lieu de faire grimper la facture. Enregistrez une requête qui vous convient et déposez-la sur un tableau de bord comme widget.

La page Explore avec l'onglet SQL ouvert : vos buckets listés comme des tables, un éditeur SQL et les actions Exécuter, Estimer le coût et Enregistrer.

Pour interroger depuis un notebook, générez un jeton dans Paramètres → Jetons d’API, puis envoyez du SQL au point de terminaison de données depuis Python, R ou Jupyter. Le tenant provient du jeton, si bien qu'un jeton ne peut atteindre que les données de sa propre organisation :

curl -X POST "https://eventhorizondata.com/api/v1/data/sql" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"sql":"SELECT toStartOfDay(time) AS day, sum(value) AS total FROM orders GROUP BY day ORDER BY day"}'

Le jeton se place dans l'en-tête Authorization et peut être révoqué à tout moment ; un jeton révoqué cesse de fonctionner immédiatement. La réponse est en JSON par défaut, ou en CSV avec `?format=csv` ou un en-tête `Accept: text/csv`. `GET /api/v1/data/schema` liste les buckets que vous pouvez interroger.

Envoyer des événements en continu

Le webhook ci-dessus est le démarrage le plus rapide. Pour un flux qui ne s'arrête pas, deux autres chemins arrivent au même type de nœud d'ingestion, sur le même hôte d'ingestion, derrière une clé que vous générez une fois et que nous ne conservons que sous forme de hachage.

Depuis votre propre code, installez le SDK. Il fonctionne sous Node et dans le navigateur, regroupe les enregistrements par lots et réessaie pour vous :

npm install @event-horizon-data/probe

import { Probe } from '@event-horizon-data/probe';

const probe = new Probe({
  endpoint: 'https://ingest.eventhorizondata.com/ingest/probe/<org>/<node>',
  key: 'ehp_<key>',
});

probe.send({ user_id: '123', action: 'click', value: 42 });
await probe.flush();

Depuis des fichiers journaux ou syslog, pointez l'agent de collecte vers un chemin et il envoie chaque ligne, déjà typée. Lancez-le avec npx, ou téléchargez un binaire autonome unique qui n'a besoin d'aucun Node installé :

npx @event-horizon-data/agent \
  --endpoint https://ingest.eventhorizondata.com/ingest/probe/<org>/<node> \
  --key ehp_<key> \
  --tail /var/log/app.log

Les deux envoient un événement de la même façon que le webhook, donc les règles d'idempotence ci-dessus s'appliquent toujours : un identifiant répété dans les cinq minutes est ignoré. L'agent survit aussi à un redémarrage sans perdre une ligne ni l'envoyer deux fois. Les deux sont open source, MIT, sur npm.

Forfaits et facturation

Vous êtes facturé à l'événement. Un événement est un enregistrement chargé dans un bucket : une commande, un paiement, une mesure de capteur, une livraison de webhook. Il est compté une fois, à son arrivée, et un lot réessayé n'est pas compté de nouveau. La taille ne fait pas partie du comptage, et relire les données non plus : le stockage et le budget de lecture de chaque requête sont des limites distinctes de votre forfait.

Chaque forfait (Starter, Studio, Agency, Scale) fixe ces plafonds, et la page des tarifs affiche les mêmes chiffres que le produit applique. Vous commencez par un essai de 14 jours et choisissez un forfait dans Paramètres, sous Forfait et utilisation.

Cet écran montre aussi ce que vous avez consommé. À 80% d'une limite, vous êtes averti ; à 100%, la nouvelle ingestion est mise en file plutôt que rejetée, jusqu'à ce que vous passiez à un forfait supérieur ou que le mois se réinitialise, donc rien n'est perdu. La lecture de vos données reste ouverte en permanence, afin que les chiffres et le bouton de mise à niveau soient toujours à portée.

Envoyez votre premier événement.

Créez un compte et passez des données brutes à un tableau de bord en quelques minutes.