Inviare eventi a un ambiente Time Series Insights tramite un hub eventi

Questa esercitazione illustra come creare e configurare un hub eventi ed eseguire un'applicazione di esempio per effettuare il push degli eventi. Se è presente un hub eventi con eventi in formato JSON, saltare questa esercitazione e visualizzare l'ambiente in Time Series Insights.

Configurare un hub eventi

  1. Per creare un hub eventi, seguire le istruzioni contenute nella documentazione sugli hub eventi.

  2. Assicurarsi di creare un gruppo di consumer usato esclusivamente dall'origine evento di Time Series Insights.

    Importante

    Verificare che questo gruppo di consumer non venga usato da altri servizi, ad esempio un processo di Analisi di flusso o un altro ambiente Time Series Insights. Se il gruppo di consumer viene usato da altri servizi, l'operazione di lettura viene compromessa per questo ambiente e per gli altri servizi. Se si usa "$Default" come gruppo di consumer, è probabile che venga usato anche da altri lettori.

    Selezionare il gruppo di consumer dell'hub eventi

  3. Nell'hub eventi creare "MySendPolicy" che viene usato per inviare eventi nell'esempio csharp.

    Selezionare Criteri di accesso condiviso e fare clic sul pulsante Aggiungi

    Aggiungere nuovi criteri di accesso condiviso

Creare un'origine evento di Time Series Insights

  1. Se non è ancora stata creata un'origine evento, seguire queste istruzioni per crearne una.

  2. Specificare "deviceTimestamp" come nome della proprietà Timestamp. Questa proprietà viene usata come timestamp effettivo nell'esempio csharp. Il nome della proprietà timestamp applica la distinzione tra maiuscole e minuscole e i valori devono avere il formato aaaa-MM-ggTHH:mm:ss.FFFFFFFK quando viene inviato come file JSON all'hub eventi. Se la proprietà non esiste nell'evento, verrà usata l'ora in cui l'evento è stato accodato nell'hub eventi.

    Creare un'origine evento

Codice di esempio per effettuare il push degli eventi

  1. Passare al criterio dell'hub eventi "MySendPolicy" e copiare la stringa di connessione con la chiave del criterio.

    Copiare la stringa di connessione MySendPolicy

  2. Eseguire questo codice per inviare 600 eventi per ognuno dei tre dispositivi. Aggiornare eventHubConnectionString con la stringa di connessione.

using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using Microsoft.ServiceBus.Messaging;

namespace Microsoft.Rdx.DataGenerator
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var from = new DateTime(2017, 4, 20, 15, 0, 0, DateTimeKind.Utc);
            Random r = new Random();
            const int numberOfEvents = 600;

            var deviceIds = new[] { "device1", "device2", "device3" };

            var events = new List<string>();
            for (int i = 0; i < numberOfEvents; ++i)
            {
                for (int device = 0; device < deviceIds.Length; ++device)
                {
                    // Generate event and serialize as JSON object:
                    // { "deviceTimestamp": "utc timestamp", "deviceId": "guid", "value": 123.456 }
                    events.Add(
                        String.Format(
                            CultureInfo.InvariantCulture,
                            @"{{ ""deviceTimestamp"": ""{0}"", ""deviceId"": ""{1}"", ""value"": {2} }}",
                            (from + TimeSpan.FromSeconds(i * 30)).ToString("o"),
                            deviceIds[device],
                            r.NextDouble()));
                }
            }

            // Create event hub connection.
            var eventHubConnectionString = @"Endpoint=sb://...";
            var eventHubClient = EventHubClient.CreateFromConnectionString(eventHubConnectionString);

            using (var ms = new MemoryStream())
            using (var sw = new StreamWriter(ms))
            {
                // Wrap events into JSON array:
                sw.Write("[");
                for (int i = 0; i < events.Count; ++i)
                {
                    if (i > 0)
                    {
                        sw.Write(',');
                    }
                    sw.Write(events[i]);
                }
                sw.Write("]");

                sw.Flush();
                ms.Position = 0;

                // Send JSON to event hub.
                EventData eventData = new EventData(ms);
                eventHubClient.Send(eventData);
            }
        }
    }
}

Forme JSON supportate

Esempio 1

Input

Un oggetto JSON semplice.

{
    "id":"device1",
    "timestamp":"2016-01-08T01:08:00Z"
}

Output: 1 evento

id timestamp
device1 2016-01-08T01:08:00Z

Esempio 2

Input

Una matrice JSON con due oggetti JSON. Ogni oggetto JSON verrà convertito in un evento.

[
    {
        "id":"device1",
        "timestamp":"2016-01-08T01:08:00Z"
    },
    {
        "id":"device2",
        "timestamp":"2016-01-17T01:17:00Z"
    }
]

Output: 2 eventi

id timestamp
device1 2016-01-08T01:08:00Z
device2 2016-01-08T01:17:00Z

Esempio 3

Input

Un oggetto JSON con una matrice JSON annidata che contiene due oggetti JSON.

{
    "location":"WestUs",
    "events":[
        {
            "id":"device1",
            "timestamp":"2016-01-08T01:08:00Z"
        },
        {
            "id":"device2",
            "timestamp":"2016-01-17T01:17:00Z"
        }
    ]
}

Output: 2 eventi

Si noti che la proprietà "location" viene copiata in ogni evento.

location events.id events.timestamp
WestUs device1 2016-01-08T01:08:00Z
WestUs device2 2016-01-08T01:17:00Z

Esempio 4

Input

Un oggetto JSON con una matrice JSON annidata che contiene due oggetti JSON. Questo input dimostra che le proprietà globali possono essere rappresentate dall'oggetto JSON complesso.

{
    "location":"WestUs",
    "manufacturer":{
        "name":"manufacturer1",
        "location":"EastUs"
    },
    "events":[
        {
            "id":"device1",
            "timestamp":"2016-01-08T01:08:00Z",
            "data":{
                "type":"pressure",
                "units":"psi",
                "value":108.09
            }
        },
        {
            "id":"device2",
            "timestamp":"2016-01-17T01:17:00Z",
            "data":{
                "type":"vibration",
                "units":"abs G",
                "value":217.09
            }
        }
    ]
}

Output: 2 eventi

location manufacturer.name manufacturer.location events.id events.timestamp events.data.type events.data.units events.data.value
WestUs manufacturer1 EastUs device1 2016-01-08T01:08:00Z pressure psi 108.09
WestUs manufacturer1 EastUs device2 2016-01-08T01:17:00Z vibration abs G 217.09

Passaggi successivi