Inviare eventi a un ambiente Time Series Insights tramite un hub eventiSend events to a Time Series Insights environment using event hub

Questo articolo illustra come creare e configurare un hub eventi ed eseguire un'applicazione di esempio per effettuare il push degli eventi.This article explains how to create and configure event hub and run a sample application to push events. Se è presente un hub eventi con eventi in formato JSON, saltare questa esercitazione e visualizzare l'ambiente in Time Series Insights.If you have an existing event hub with events in JSON format, skip this tutorial and view your environment in Time Series Insights.

Configurare un hub eventiConfigure an event hub

  1. Per creare un hub eventi, seguire le istruzioni contenute nella documentazione sugli hub eventi.To create an event hub, follow instructions from the Event Hub documentation.

  2. Cercare hub eventi nella barra di ricerca.Search for event hub in the search bar. Nell'elenco dei risultati fare clic su Hub eventi.Click Event Hubs in the returned list.

  3. Per selezionare l'hub eventi, fare clic sul relativo nome.Select your event hub by clicking on its name.

  4. In Entità nella finestra di configurazione centrale fare clic di nuovo su Hub eventi.Under Entities in the middle configuration window, click Event Hubs again.

  5. Selezionare il nome dell'hub eventi per configurarlo.Select the name of the event hub to configure it.

    Selezionare il gruppo di consumer dell'hub eventi

  6. In Entità selezionare Gruppi di consumer.Under Entities, select Consumer groups.

  7. Assicurarsi di creare un gruppo di consumer usato esclusivamente dall'origine evento di Time Series Insights.Make sure you create a consumer group that is used exclusively by your Time Series Insights event source.

    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.Make sure this consumer group is not used by any other service (such as Stream Analytics job or another Time Series Insights environment). Se il gruppo di consumer viene usato da altri servizi, l'operazione di lettura viene compromessa per questo ambiente e per gli altri servizi.If the consumer group is used by other services, read operation is negatively affected for this environment and the other services. Se si usa "$Default" come gruppo di consumer, è probabile che venga usato anche da altri lettori.If you are using “$Default” as the consumer group, it could lead to potential reuse by other readers.

  8. Sotto l'intestazione Impostazioni selezionare Criteri di accesso condiviso.Under the Settings heading, select Share access policies.

  9. Nell'hub eventi creare MySendPolicy che viene usato per inviare eventi nell'esempio csharp.On the event hub, create MySendPolicy that is used to send events in the csharp sample.

    Selezionare Criteri di accesso condiviso e fare clic sul pulsante Aggiungi

    Aggiungere nuovi criteri di accesso condiviso

Creare un'origine evento di Time Series InsightsCreate Time Series Insights event source

  1. Se non è ancora stata creata un'origine evento, seguire queste istruzioni per crearne una.If you haven't created an event source, follow these instructions to create an event source.

  2. Specificare deviceTimestamp come nome della proprietà Timestamp. Questa proprietà viene usata come timestamp effettivo nell'esempio C#.Specify deviceTimestamp as the timestamp property name – this property is used as the actual timestamp in the C# sample. 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.The timestamp property name is case-sensitive and values must follow the format yyyy-MM-ddTHH:mm:ss.FFFFFFFK when sent as JSON to event hub. Se la proprietà non esiste nell'evento, verrà usata l'ora in cui l'evento è stato accodato nell'hub eventi.If the property does not exist in the event, then the event hub enqueued time is used.

    Creare un'origine evento

Codice di esempio per effettuare il push degli eventiSample code to push events

  1. Passare al criterio dell'hub eventi denominato MySendPolicy.Go to the event hub policy named MySendPolicy. Copiare la stringa di connessione con la chiave del criterio.Copy the connection string with the policy key.

    Copiare la stringa di connessione MySendPolicy

  2. Eseguire questo codice per inviare 600 eventi per ognuno dei tre dispositivi.Run the following code that to send 600 events per each of the three devices. Aggiornare eventHubConnectionString con la stringa di connessione.Update eventHubConnectionString with your connection string.

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 supportateSupported JSON shapes

Esempio 1Sample 1

InputInput

Un oggetto JSON semplice.A simple JSON object.

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

Output: 1 eventoOutput - 1 event

idid timestamptimestamp
device1device1 2016-01-08T01:08:00Z2016-01-08T01:08:00Z

Esempio 2Sample 2

InputInput

Una matrice JSON con due oggetti JSON.A JSON array with two JSON objects. Ogni oggetto JSON verrà convertito in un evento.Each JSON object will be converted to an event.

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

Output: 2 eventiOutput - 2 Events

idid timestamptimestamp
device1device1 2016-01-08T01:08:00Z2016-01-08T01:08:00Z
device2device2 2016-01-08T01:17:00Z2016-01-08T01:17:00Z

Esempio 3Sample 3

InputInput

Un oggetto JSON con una matrice JSON annidata che contiene due oggetti JSON.A JSON object with a nested JSON array containing two JSON objects.

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

Output: 2 eventiOutput - 2 Events

Si noti che la proprietà "location" viene copiata in ogni evento.Note that the property "location" is copied over to each of the event.

locationlocation events.idevents.id events.timestampevents.timestamp
WestUsWestUs device1device1 2016-01-08T01:08:00Z2016-01-08T01:08:00Z
WestUsWestUs device2device2 2016-01-08T01:17:00Z2016-01-08T01:17:00Z

Esempio 4Sample 4

InputInput

Un oggetto JSON con una matrice JSON annidata che contiene due oggetti JSON.A JSON object with a nested JSON array containing two JSON objects. Questo input dimostra che le proprietà globali possono essere rappresentate dall'oggetto JSON complesso.This input demonstrates that the global properties may be represented by the complex JSON object.

{
    "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 eventiOutput - 2 Events

locationlocation manufacturer.namemanufacturer.name manufacturer.locationmanufacturer.location events.idevents.id events.timestampevents.timestamp events.data.typeevents.data.type events.data.unitsevents.data.units events.data.valueevents.data.value
WestUsWestUs manufacturer1manufacturer1 EastUsEastUs device1device1 2016-01-08T01:08:00Z2016-01-08T01:08:00Z pressurepressure psipsi 108.09108.09
WestUsWestUs manufacturer1manufacturer1 EastUsEastUs device2device2 2016-01-08T01:17:00Z2016-01-08T01:17:00Z vibrationvibration abs Gabs G 217.09217.09

Passaggi successiviNext steps