Een pijplijn maken met de Collector-APICreate a data pipeline with the Data Collector API

De API van Azure Monitor Data Collector kunt u een aangepast logboekgegevens importeren in een Log Analytics-werkruimte in Azure Monitor.The Azure Monitor Data Collector API allows you to import any custom log data into a Log Analytics workspace in Azure Monitor. De enige vereisten zijn dat de gegevens JSON-indeling en splitsen in 30 MB of minder segmenten zijn.The only requirements are that the data be JSON-formatted and split into 30 MB or less segments. Dit is een volledig flexibele mechanisme dat kan worden aangesloten op tal van manieren: van gegevens rechtstreeks vanuit uw toepassing worden verzonden naar eenmalige ad-hoc uploadt.This is a completely flexible mechanism that can be plugged into in many ways: from data being sent directly from your application, to one-off adhoc uploads. In dit artikel wordt een overzicht sommige beginpunten voor een veelvoorkomend scenario: de noodzaak om gegevens die zijn opgeslagen in bestanden op basis van reguliere, geautomatiseerde te uploaden.This article will outline some starting points for a common scenario: the need to upload data stored in files on a regular, automated basis. Terwijl de pijplijn die hier niet de meeste goed presterende of anders geoptimaliseerd, is dit bedoeld om te fungeren als een beginpunt voor het bouwen van een productie-pipeline van uw eigen.While the pipeline presented here will not be the most performant or otherwise optimized, it is intended to serve as a starting point towards building a production pipeline of your own.

Notitie

Dit artikel is onlangs bijgewerkt voor het gebruik van de term Azure Monitor Logboeken in plaats van Log Analytics.This article was recently updated to use the term Azure Monitor logs instead of Log Analytics. Logboek gegevens worden nog steeds opgeslagen in een Log Analytics-werk ruimte en worden nog steeds verzameld en geanalyseerd door dezelfde Log Analytics-service.Log data is still stored in a Log Analytics workspace and is still collected and analyzed by the same Log Analytics service. De terminologie wordt bijgewerkt zodat deze beter overeenkomt met de rol van de Logboeken in azure monitor.We are updating the terminology to better reflect the role of logs in Azure Monitor. Zie Azure monitor terminologie wijzigen voor meer informatie.See Azure Monitor terminology changes for details.

Voorbeeld van probleemExample problem

Voor de rest van dit artikel bespreken we paginaweergavegegevens in Application Insights.For the remainder of this article, we will examine page view data in Application Insights. In ons scenario hypothetische willen we geografische gegevens verzameld standaard door de Application Insights-SDK met aangepaste gegevens met de populatie van elk land/regio in de hele wereld, met het doel om te identificeren waar we moeten worden uitgaven correleren de meeste marketing bedragen.In our hypothetical scenario, we want to correlate geographical information collected by default by the Application Insights SDK to custom data containing the population of every country/region in the world, with the goal of identifying where we should be spending the most marketing dollars.

We gebruiken een openbare gegevensbron, zoals de ongedaan maken ter wereld populatie Prospects voor dit doel.We use a public data source such as the UN World Population Prospects for this purpose. De gegevens hebben de volgende eenvoudige schema:The data will have the following simple schema:

Voorbeeld van eenvoudige schema

In ons voorbeeld veronderstellen we dat we een nieuw bestand met de meest recente jaar gegevens uploaden zodra deze beschikbaar.In our example, we assume that we will upload a new file with the latest year’s data as soon as it becomes available.

Algemeen ontwerpGeneral design

We gebruiken een klassieke ETL-type-logica te ontwerpen van onze pijplijn.We are using a classic ETL-type logic to design our pipeline. De architectuur ziet er als volgt uit:The architecture will look as follows:

Data collection pijplijn-architectuur

In dit artikel wordt niet uitgelegd hoe u gegevens maakt of uploaden naar een Azure Blob Storage-account.This article will not cover how to create data or upload it to an Azure Blob Storage account. In plaats daarvan kiezen we de stroom van zodra een nieuw bestand wordt geüpload naar de blob.Rather, we pick the flow up as soon as a new file is uploaded to the blob. Vanaf hier:From here:

  1. Een proces wordt gedetecteerd dat nieuwe gegevens zijn geüpload.A process will detect that new data has been uploaded. Ons voorbeeld wordt een Azure Logic App, die beschikbaar is voor een trigger voor het detecteren van nieuwe gegevens naar een blob geüpload.Our example uses an Azure Logic App, which has available a trigger to detect new data being uploaded to a blob.

  2. Een processor van deze nieuwe gegevens leest en converteert deze naar JSON, de indeling die vereist zijn voor Azure Monitor In dit voorbeeld, gebruiken we een Azure Function als een lichtgewicht, betaalbare manier voor het uitvoeren van onze verwerkingscode.A processor reads this new data and converts it to JSON, the format required by Azure Monitor In this example, we use an Azure Function as a lightweight, cost-efficient way of executing our processing code. De functie wordt gestart door de dezelfde logische App die we hebben gebruikt voor het detecteren van een van de nieuwe gegevens.The function is kicked off by the same Logic App that we used to detect a the new data.

  3. Ten slotte, als het JSON-object beschikbaar is, wordt het verzonden naar Azure Monitor.Finally, once the JSON object is available, it is sent to Azure Monitor. Dezelfde logische App verzendt die gegevens naar Azure Monitor met behulp van de ingebouwde in Log Analytics-gegevensverzamelaar-activiteit.The same Logic App sends the data to Azure Monitor using the built in Log Analytics Data Collector activity.

Terwijl de gedetailleerde instellingen van de blob-opslag, logische App of Azure-functie niet in dit artikel beschreven wordt, vindt gedetailleerde instructies u op de specifieke producten pagina's.While the detailed setup of the blob storage, Logic App, or Azure Function is not outlined in this article, detailed instructions are available on the specific products’ pages.

Voor het bewaken van deze pijplijn, gebruiken we Application Insights voor het bewaken van onze Azure-functie hier details, en Azure Monitor voor het bewaken van de logische App hier details.To monitor this pipeline, we use Application Insights to monitor our Azure Function details here, and Azure Monitor to monitor our Logic App details here.

Instellen van de pijplijnSetting up the pipeline

Zorg ervoor dat u hebt uw blob-container gemaakt en geconfigureerd om in te stellen de pijplijn.To set the pipeline, first make sure you have your blob container created and configured. Evenzo, zorg ervoor dat de Log Analytics-werkruimte waar u wilt verzenden van de gegevens is gemaakt.Likewise, make sure that the Log Analytics workspace where you’d like to send the data to is created.

JSON-gegevens opnemenIngesting JSON data

Ophalen van JSON-gegevens is heel eenvoudig met Logic Apps en omdat er geen transformatie plaatsvinden moet, kunnen we de hele pijplijn in één logische App encase.Ingesting JSON data is trivial with Logic Apps, and since no transformation needs to take place, we can encase the entire pipeline in a single Logic App. Als zowel de blob-container en de Log Analytics-werkruimte hebt geconfigureerd, een nieuwe logische App maken en deze als volgt configureren:Once both the blob container and the Log Analytics workspace have been configured, create a new Logic App and configure it as follows:

Voorbeeld van logische apps-werkstroom

Uw logische App opslaan en doorgaan om dit te testen.Save your Logic App and proceed to test it.

XML, CSV of andere indelingen van de gegevens opnemenIngesting XML, CSV, or other formats of data

Logic Apps vandaag heeft geen ingebouwde mogelijkheden voor het eenvoudig XML, CSV of andere typen transformeren naar JSON-indeling.Logic Apps today does not have built-in capabilities to easily transform XML, CSV, or other types into JSON format. Daarom moet een andere manier gebruiken om te voltooien van deze transformatie.Therefore, we need to use another means to complete this transformation. In dit artikel gebruiken we de serverless Computing-mogelijkheden van Azure Functions als een zeer lichte en kosten-vriendelijk manier hiervan.For this article, we use the serverless compute capabilities of Azure Functions as a very lightweight and cost-friendly way of doing so.

In dit voorbeeld wordt een CSV-bestand parseren, maar alle andere bestandstypen op dezelfde manier kan worden verwerkt.In this example, we parse a CSV file, but any other file type can be similarly processed. Het deserialiseren gedeelte van de Azure-functie in overeenstemming met de juiste logica voor uw specifieke gegevens van het type wijzigen.Simply modify the deserializing portion of the Azure Function to reflect the correct logic for your specific data type.

  1. Maak een nieuwe Azure-functie, met behulp van de functie runtime v1- en op basis van gebruik wanneer u hierom wordt gevraagd.Create a new Azure Function, using the Function runtime v1 and consumption-based when prompted. Selecteer de HTTP-trigger sjabloon gericht op C# als uitgangspunt dat Hiermee configureert u de bindingen die we nodig hebt.Select the HTTP trigger template targeted at C# as a starting point that configures your bindings as we require.

  2. Uit de bestanden weergeven tabblad in het rechterdeelvenster, maak een nieuw bestand met de naam project.json en plak de volgende code uit de NuGet-pakketten die we gebruiken:From the View Files tab on the right pane, create a new file called project.json and paste the following code from NuGet packages that we are using:

    Azure Functions-voorbeeld-project

    {
      "frameworks": {
        "net46":{
          "dependencies": {
            "CsvHelper": "7.1.1",
            "Newtonsoft.Json": "11.0.2"
          }  
        }  
       }  
     }  
    
  3. Schakel over naar run.csx in het rechter deelvenster en vervang de standaard-code met de volgende stappen.Switch to run.csx from the right pane, and replace the default code with the following.

    Notitie

    Voor uw project moet u de record model (de klasse 'PopulationRecord') vervangen door uw eigen gegevensschema.For your project, you have to replace the record model (the “PopulationRecord” class) with your own data schema.

    using System.Net;
    using Newtonsoft.Json;
    using CsvHelper;
    
    class PopulationRecord
    {
        public String Location { get; set; }
        public int Time { get; set; }
        public long Population { get; set; }
    }
    
    public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
    {
        string filePath = await req.Content.ReadAsStringAsync(); //get the CSV URI being passed from Logic App
        string response = "";
    
        //get a stream from blob
        WebClient wc = new WebClient();
        Stream s = wc.OpenRead(filePath);         
    
        //read the stream
        using (var sr = new StreamReader(s))
        {
            var csvReader = new CsvReader(sr);
    
            var records = csvReader.GetRecords<PopulationRecord>(); //deserialize the CSV stream as an IEnumerable
    
            response = JsonConvert.SerializeObject(records); //serialize the IEnumerable back into JSON
        }    
    
        return response == null
            ? req.CreateResponse(HttpStatusCode.BadRequest, "There was an issue getting data")
            : req.CreateResponse(HttpStatusCode.OK, response);
     }  
    
  4. Sla uw functie.Save your function.

  5. Test de functie om ervoor te zorgen dat de code correct werkt.Test the function to make sure the code is working correctly. Schakel over naar de testen tabblad in het rechterdeelvenster de test als volgt configureren.Switch to the Test tab in the right pane, configuring the test as follows. Plaats een koppeling naar een blob met voorbeeldgegevens in de aanvraagtekst tekstvak.Place a link to a blob with sample data into the Request body textbox. Nadat u hebt geklikt uitvoeren, moet u ziet JSON-uitvoer in de uitvoer vak:After clicking Run, you should see JSON output in the Output box:

    Functie-Apps testen van code

Nu moeten we teruggaan en de logische App die we begonnen met het bouwen van eerder zodanig dat de gegevens die zijn opgenomen en geconverteerd naar JSON-indeling wijzigen.Now we need to go back and modify the Logic App we started building earlier to include the data ingested and converted to JSON format. Met behulp van ontwerper, configureren als volgt te werk en sla vervolgens uw logische App:Using View Designer, configure as follows and then save your Logic App:

Compleet voorbeeld van Logic Apps-werkstroom

De pijplijn testenTesting the pipeline

U kunt nu een nieuw bestand uploaden naar de blob die eerder hebt geconfigureerd en deze door uw logische App bewaakt.Now you can upload a new file to the blob configured earlier and have it monitored by your Logic App. U moet snel, ziet een nieuw exemplaar van de logische App beluisteren, naar uw Azure-functie aanroepen en de gegevens kunnen naar Azure Monitor te verzenden.Soon, you should see a new instance of the Logic App kick off, call out to your Azure Function, and then successfully send the data to Azure Monitor.

Notitie

Het kan duren voordat de gegevens worden weergegeven in Azure Monitor de eerste keer dat u een nieuw gegevenstype verzendt tot 30 minuten.It can take up to 30 minutes for the data to appear in Azure Monitor the first time you send a new data type.

Correleren met andere gegevens in Log Analytics en Application InsightsCorrelating with other data in Log Analytics and Application Insights

Om te voltooien ons doel voor het correleren van gegevens van Application Insights pagina weergeven met de vullen met gegevens die we afkomstig zijn van onze aangepaste gegevensbron, voert u de volgende query uit uw Application Insights Analytics venster of Log Analytics-werkruimte:To complete our goal of correlating Application Insights page view data with the population data we ingested from our custom data source, run the following query from either your Application Insights Analytics window or Log Analytics workspace:

app("fabrikamprod").pageViews
| summarize numUsers = count() by client_CountryOrRegion
| join kind=leftouter (
   workspace("customdatademo").Population_CL
) on $left.client_CountryOrRegion == $right.Location_s
| project client_CountryOrRegion, numUsers, Population_d

De twee gegevens moet worden weergegeven in de uitvoer nu lid geworden van bronnen.The output should show the two data sources now joined.

Correleren geen lid meer gegevens in het voorbeeld van een zoekopdracht-resultaat

Voorgestelde verbeteringen voor een productie-pijplijnSuggested improvements for a production pipeline

In dit artikel weergegeven een prototype werken, de logica achter die kan worden gebruikt voor een echte oplossing voor productiekwaliteit.This article presented a working prototype, the logic behind which can be applied towards a true production-quality solution. Voor een dergelijke kwaliteit van de productie oplossing, worden de volgende verbeteringen aanbevolen:For such a production-quality solution, the following improvements are recommended:

  • Foutafhandeling toevoegen en logica in uw logische App en de functie voor opnieuw proberen.Add error handling and retry logic in your Logic App and Function.
  • Voeg logica om ervoor te zorgen dat de limiet van 30MB/één Log Analytics-gegevensopname API-aanroep niet is overschreden.Add logic to ensure that the 30MB/single Log Analytics Ingestion API call limit is not exceeded. De gegevens splitsen in kleinere segmenten, indien nodig.Split the data into smaller segments if needed.
  • Instellen van een beleid voor opschonen van de blob-opslag.Set up a clean-up policy on your blob storage. Nadat is verzonden naar de Log Analytics-werkruimte, tenzij u wilt de onbewerkte gegevens beschikbaar houden voor archiveringsdoeleinden, is er geen reden om door te gaan op te slaan.Once successfully sent to the Log Analytics workspace, unless you’d like to keep the raw data available for archival purposes, there is no reason to continue storing it.
  • Controleer of de controle is ingeschakeld voor de volledige pijplijn, trace-punten toe te voegen en een waarschuwing indien van toepassing.Verify monitoring is enabled across the full pipeline, adding trace points and alerts as appropriate.
  • Maak gebruik van broncodebeheer voor het beheren van de code voor uw functie en de logische App.Leverage source control to manage the code for your function and Logic App.
  • Zorg ervoor dat een juiste wijziging management-beleid wordt gevolgd, zodat als het schema wordt gewijzigd, de functie en Logic Apps dienovereenkomstig worden aangepast.Ensure that a proper change management policy is followed, such that if the schema changes, the function and Logic Apps are modified accordingly.
  • Als u meerdere verschillende gegevenstypen uploaden wilt, ze te scheiden in afzonderlijke mappen in uw blobcontainer en logica voor de logica uit op basis van het gegevenstype ventilator maken.If you are uploading multiple different data types, segregate them into individual folders within your blob container, and create logic to fan the logic out based on the data type.

Volgende stappenNext steps

Meer informatie over de Data Collector API gegevens schrijven naar Log Analytics-werkruimte van een REST-API-client.Learn more about the Data Collector API to write data to Log Analytics workspace from any REST API client.