Logboekgegevens verzenden naar Azure Monitor met behulp van de HTTP Data Collector-API (afgeschaft)

In dit artikel leest u hoe u de HTTP Data Collector-API gebruikt om logboekgegevens vanuit een REST API-client naar Azure Monitor te verzenden. Hierin wordt beschreven hoe u gegevens opmaken die worden verzameld door uw script of toepassing, deze opnemen in een aanvraag en deze aanvraag laten geautoriseerd door Azure Monitor. We bieden voorbeelden voor Azure PowerShell, C# en Python.

Notitie

De AZURE Monitor HTTP Data Collector-API is afgeschaft en werkt vanaf 14-9-2026 niet meer. Deze is vervangen door de API voor logboekopname.

Concepten

U kunt de HTTP Data Collector-API gebruiken om logboekgegevens te verzenden naar een Log Analytics-werkruimte in Azure Monitor vanaf elke client die een REST API kan aanroepen. De client kan een runbook in Azure Automation zijn dat beheergegevens verzamelt uit Azure of een andere cloud, of het kan een alternatief beheersysteem zijn dat Gebruikmaakt van Azure Monitor om logboekgegevens samen te voegen en te analyseren.

Alle gegevens in de Log Analytics-werkruimte worden opgeslagen als een record met een bepaald recordtype. U kunt uw gegevens opmaken om naar de HTTP Data Collector-API te verzenden als meerdere records in JavaScript Object Notation (JSON). Wanneer u de gegevens verzendt, wordt er een afzonderlijke record gemaakt in de opslagplaats voor elke record in de nettolading van de aanvraag.

Screenshot illustrating the HTTP Data Collector overview.

Een aanvraag maken

Als u de HTTP Data Collector-API wilt gebruiken, maakt u een POST-aanvraag die de gegevens bevat die moeten worden verzonden in JSON. De volgende drie tabellen bevatten de kenmerken die vereist zijn voor elke aanvraag. We beschrijven elk kenmerk verderop in het artikel.

Aanvraag-URI

Kenmerk Eigenschappen
Wijze POSTEN
URI <https:// CustomerId.ods.opinsights.azure.com/api/logs?api-version=2016-04-01>
Content type application/json

URI-parameters aanvragen

Parameter Omschrijving
CustomerID De unieke id voor de Log Analytics-werkruimte.
Resource De naam van de API-resource: /api/logs.
API-versie De versie van de API die met deze aanvraag moet worden gebruikt. Momenteel is de versie 2016-04-01.

Aanvraagheaders

Kop Omschrijving
Autorisatie De autorisatiehandtekening. Verderop in het artikel leest u hoe u een HMAC-SHA256-header maakt.
Logboektype Geef het recordtype op van de gegevens die worden verzonden. Het mag alleen letters, cijfers en het onderstrepingsteken (_) bevatten en mag niet langer zijn dan 100 tekens.
x-ms-date De datum waarop de aanvraag is verwerkt, in RFC 1123-indeling .
x-ms-AzureResourceId De resource-id van de Azure-resource waaraan de gegevens moeten worden gekoppeld. Hiermee wordt de eigenschap _ResourceId ingevuld en kunnen de gegevens worden opgenomen in resourcecontextquery's . Als dit veld niet is opgegeven, worden de gegevens niet opgenomen in resourcecontextquery's.
tijd gegenereerd veld De naam van een veld in de gegevens die de tijdstempel van het gegevensitem bevat. Als u een veld opgeeft, wordt de inhoud ervan gebruikt voor TimeGenerated. Als u dit veld niet opgeeft, is de standaardwaarde voor TimeGenerated het tijdstip waarop het bericht wordt opgenomen. De inhoud van het berichtveld moet de ISO 8601-indeling JJJJ-MM-DDThh:mm:ssZ volgen. De waarde Gegenereerde tijd kan niet ouder zijn dan 2 dagen voor ontvangsttijd of meer dan een dag in de toekomst. In dat geval wordt het tijdstip waarop het bericht wordt opgenomen, gebruikt.

Autorisatie

Elke aanvraag voor de AZURE Monitor HTTP Data Collector-API moet een autorisatieheader bevatten. Als u een aanvraag wilt verifiëren, ondertekent u de aanvraag met de primaire of secundaire sleutel voor de werkruimte die de aanvraag indient. Geef die handtekening vervolgens door als onderdeel van de aanvraag.

Dit is de indeling voor de autorisatieheader:

Authorization: SharedKey <WorkspaceID>:<Signature>

WorkspaceID is de unieke id voor de Log Analytics-werkruimte. Handtekening is een HMAC (Hash-based Message Authentication Code) die is samengesteld op basis van de aanvraag en vervolgens wordt berekend met behulp van het SHA256-algoritme. Vervolgens codeert u deze met base64-codering.

Gebruik deze indeling om de sharedKey-handtekeningtekenreeks te coderen:

StringToSign = VERB + "\n" +
                  Content-Length + "\n" +
                  Content-Type + "\n" +
                  "x-ms-date:" + x-ms-date + "\n" +
                  "/api/logs";

Hier volgt een voorbeeld van een handtekeningtekenreeks:

POST\n1024\napplication/json\nx-ms-date:Mon, 04 Apr 2016 08:00:00 GMT\n/api/logs

Wanneer u de handtekeningtekenreeks hebt, codeert u deze met behulp van het HMAC-SHA256-algoritme op de UTF-8-gecodeerde tekenreeks en codeert u het resultaat vervolgens als Base64. Gebruik deze indeling:

Signature=Base64(HMAC-SHA256(UTF8(StringToSign)))

De voorbeelden in de volgende secties bevatten voorbeeldcode om u te helpen bij het maken van een autorisatieheader.

Aanvraagtekst

De hoofdtekst van het bericht moet in JSON staan. Deze moet een of meer records bevatten met de eigenschapsnaam en waardeparen in de volgende indeling. De naam van de eigenschap mag alleen letters, cijfers en het onderstrepingsteken (_) bevatten.

[
    {
        "property 1": "value1",
        "property 2": "value2",
        "property 3": "value3",
        "property 4": "value4"
    }
]

U kunt meerdere records samenvoegen in één aanvraag met behulp van de volgende indeling. Alle records moeten hetzelfde recordtype hebben.

[
    {
        "property 1": "value1",
        "property 2": "value2",
        "property 3": "value3",
        "property 4": "value4"
    },
    {
        "property 1": "value1",
        "property 2": "value2",
        "property 3": "value3",
        "property 4": "value4"
    }
]

Recordtype en eigenschappen

U definieert een aangepast recordtype wanneer u gegevens verzendt via de AZURE Monitor HTTP-gegevensverzamelaar-API. Op dit moment kunt u geen gegevens schrijven naar bestaande recordtypen die zijn gemaakt door andere gegevenstypen en oplossingen. Azure Monitor leest de binnenkomende gegevens en maakt vervolgens eigenschappen die overeenkomen met de gegevenstypen van de waarden die u invoert.

Elke aanvraag voor de Data Collector-API moet een logboektype-header bevatten met de naam voor het recordtype. Het achtervoegsel _CL wordt automatisch toegevoegd aan de naam die u invoert om dit te onderscheiden van andere logboektypen als een aangepast logboek. Als u bijvoorbeeld de naam MyNewRecordType invoert, maakt Azure Monitor een record met het type MyNewRecordType_CL. Dit helpt ervoor te zorgen dat er geen conflicten zijn tussen door de gebruiker gemaakte typenamen en namen die worden verzonden in huidige of toekomstige Microsoft-oplossingen.

Om het gegevenstype van een eigenschap te identificeren, voegt Azure Monitor een achtervoegsel toe aan de naam van de eigenschap. Als een eigenschap een null-waarde bevat, wordt de eigenschap niet opgenomen in die record. In deze tabel ziet u het gegevenstype van de eigenschap en het bijbehorende achtervoegsel:

Gegevenstype eigenschap Achtervoegsel
String _S
Booleaanse waarde _B
Dubbel _D
Datum/tijd _T
GUID (opgeslagen als een tekenreeks) _G

Notitie

Tekenreekswaarden die GUID's lijken te zijn, krijgen het _g achtervoegsel en opgemaakt als een GUID, zelfs als de binnenkomende waarde geen streepjes bevat. Bijvoorbeeld: '8145d822-13a7-44ad-859c-36f31a84f6dd' en '8145d82213a744ad859c36f31a84f6dd' worden opgeslagen als '8145d822-13a7-44ad-859c-36f31a84f6dd'. De enige verschillen tussen deze en een andere tekenreeks zijn de _g in de naam en de invoeging van streepjes als ze niet zijn opgegeven in de invoer.

Het gegevenstype dat Azure Monitor voor elke eigenschap gebruikt, is afhankelijk van of het recordtype voor de nieuwe record al bestaat.

  • Als het recordtype niet bestaat, maakt Azure Monitor een nieuw record met behulp van de JSON-typedeductie om het gegevenstype voor elke eigenschap voor de nieuwe record te bepalen.
  • Als het recordtype bestaat, probeert Azure Monitor een nieuwe record te maken op basis van bestaande eigenschappen. Als het gegevenstype voor een eigenschap in de nieuwe record niet overeenkomt en niet kan worden geconverteerd naar het bestaande type, of als de record een eigenschap bevat die niet bestaat, maakt Azure Monitor een nieuwe eigenschap met het relevante achtervoegsel.

Met de volgende inzendingsvermelding wordt bijvoorbeeld een record gemaakt met drie eigenschappen, number_d, boolean_b en string_s:

Screenshot of sample record 1.

Als u deze volgende vermelding indient, waarbij alle waarden die zijn opgemaakt als tekenreeksen, worden de eigenschappen niet gewijzigd. U kunt de waarden converteren naar bestaande gegevenstypen.

Screenshot of sample record 2.

Maar als u deze volgende inzending maakt, maakt Azure Monitor de nieuwe eigenschappen boolean_d en string_d. U kunt deze waarden niet converteren.

Screenshot of sample record 3.

Als u vervolgens de volgende vermelding indient voordat het recordtype wordt gemaakt, maakt Azure Monitor een record met drie eigenschappen, number_s, boolean_s en string_s. In deze vermelding wordt elk van de initiële waarden opgemaakt als een tekenreeks:

Screenshot of sample record 4.

Gereserveerde eigenschappen

De volgende eigenschappen zijn gereserveerd en mogen niet worden gebruikt in een aangepast recordtype. Er wordt een foutbericht weergegeven als uw nettolading een van deze eigenschapsnamen bevat:

  • AD-tenant
  • TimeGenerated
  • RawData

Gegevenslimieten

De gegevens die zijn gepost in de Azure Monitor-gegevensverzamelings-API, zijn onderhevig aan bepaalde beperkingen:

  • Maximaal 30 MB per post naar de Azure Monitor Data Collector-API. Dit is een groottelimiet voor één bericht. Als de gegevens uit één post groter zijn dan 30 MB, moet u de gegevens opsplitsen in kleinere segmenten en ze gelijktijdig verzenden.
  • Maximum van 32 kB voor veldwaarden. Als een veldwaarde groter is dan 32 kB, worden de gegevens afgekapt.
  • Aanbevolen maximum van 50 velden voor een bepaald type. Dit is een praktische limiet vanuit het oogpunt van bruikbaarheid en zoekervaring.
  • Tabellen in Log Analytics-werkruimten ondersteunen slechts 500 kolommen (ook wel velden in dit artikel genoemd).
  • Maximaal 45 tekens voor kolomnamen.

Retourcodes

De HTTP-statuscode 200 betekent dat de aanvraag is ontvangen voor verwerking. Dit geeft aan dat de bewerking is voltooid.

De volledige set statuscodes die door de service kunnen worden geretourneerd, wordt vermeld in de volgende tabel:

Code Status Foutcode Omschrijving
200 OK De aanvraag is geaccepteerd.
400 Ongeldige aanvraag InactiveCustomer De werkruimte is gesloten.
400 Ongeldige aanvraag InvalidApiVersion De API-versie die u hebt opgegeven, is niet herkend door de service.
400 Ongeldige aanvraag InvalidCustomerId De opgegeven werkruimte-id is ongeldig.
400 Ongeldige aanvraag InvalidDataFormat Er is een ongeldige JSON verzonden. De hoofdtekst van het antwoord bevat mogelijk meer informatie over het oplossen van de fout.
400 Ongeldige aanvraag InvalidLogType Het opgegeven logboektype bevat speciale tekens of numerieke tekens.
400 Ongeldige aanvraag MissingApiVersion De API-versie is niet opgegeven.
400 Ongeldige aanvraag MissingContentType Het inhoudstype is niet opgegeven.
400 Ongeldige aanvraag MissingLogType Het vereiste type waardelogboek is niet opgegeven.
400 Ongeldige aanvraag Niet-ondersteundContentType Het inhoudstype is niet ingesteld op application/json.
403 Verboden InvalidAuthorization De service kan de aanvraag niet verifiëren. Controleer of de werkruimte-id en verbindingssleutel geldig zijn.
404 Niet gevonden De opgegeven URL is onjuist of de aanvraag is te groot.
429 Te veel aanvragen De service ondervindt een grote hoeveelheid gegevens uit uw account. Probeer de aanvraag later opnieuw.
500 Interne serverfout UnspecifiedError Er is een interne fout opgetreden in de service. Probeer de aanvraag opnieuw.
503 Service niet beschikbaar ServiceUnavailable De service is momenteel niet beschikbaar voor het ontvangen van aanvragen. Probeer uw aanvraag opnieuw.

Querygegevens

Als u query's wilt uitvoeren op gegevens die zijn verzonden door de AZURE Monitor HTTP-gegevensverzamelaar-API, zoekt u naar records waarvan het type gelijk is aan de LogType-waarde die u hebt opgegeven en toegevoegd aan _CL. Als u bijvoorbeeld MyCustomLog hebt gebruikt, zou u alle records retourneren met MyCustomLog_CL.

Voorbeeldaanvragen

In deze sectie vindt u voorbeelden die laten zien hoe u gegevens verzendt naar de AZURE Monitor HTTP-gegevensverzamelaar-API met behulp van verschillende programmeertalen.

Stel voor elk voorbeeld de variabelen voor de autorisatieheader als volgt in:

  1. Zoek in Azure Portal uw Log Analytics-werkruimte.
  2. Selecteer agents.
  3. Selecteer rechts van werkruimte-id het pictogram Kopiëren en plak de id als de waarde van de variabele Klant-id.
  4. Selecteer rechts van de primaire sleutel het pictogram Kopiëren en plak de id als de waarde van de variabele Gedeelde sleutel .

U kunt ook de variabelen voor het logboektype en JSON-gegevens wijzigen.

# Replace with your Workspace ID
$CustomerId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"  

# Replace with your Primary Key
$SharedKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Specify the name of the record type that you'll be creating
$LogType = "MyRecordType"

# Optional name of a field that includes the timestamp for the data. If the time field is not specified, Azure Monitor assumes the time is the message ingestion time
$TimeStampField = ""


# Create two records with the same set of properties to create
$json = @"
[{  "StringValue": "MyString1",
    "NumberValue": 42,
    "BooleanValue": true,
    "DateValue": "2019-09-12T20:00:00.625Z",
    "GUIDValue": "9909ED01-A74C-4874-8ABF-D2678E3AE23D"
},
{   "StringValue": "MyString2",
    "NumberValue": 43,
    "BooleanValue": false,
    "DateValue": "2019-09-12T20:00:00.625Z",
    "GUIDValue": "8809ED01-A74C-4874-8ABF-D2678E3AE23D"
}]
"@

# Create the function to create the authorization signature
Function Build-Signature ($customerId, $sharedKey, $date, $contentLength, $method, $contentType, $resource)
{
    $xHeaders = "x-ms-date:" + $date
    $stringToHash = $method + "`n" + $contentLength + "`n" + $contentType + "`n" + $xHeaders + "`n" + $resource

    $bytesToHash = [Text.Encoding]::UTF8.GetBytes($stringToHash)
    $keyBytes = [Convert]::FromBase64String($sharedKey)

    $sha256 = New-Object System.Security.Cryptography.HMACSHA256
    $sha256.Key = $keyBytes
    $calculatedHash = $sha256.ComputeHash($bytesToHash)
    $encodedHash = [Convert]::ToBase64String($calculatedHash)
    $authorization = 'SharedKey {0}:{1}' -f $customerId,$encodedHash
    return $authorization
}

# Create the function to create and post the request
Function Post-LogAnalyticsData($customerId, $sharedKey, $body, $logType)
{
    $method = "POST"
    $contentType = "application/json"
    $resource = "/api/logs"
    $rfc1123date = [DateTime]::UtcNow.ToString("r")
    $contentLength = $body.Length
    $signature = Build-Signature `
        -customerId $customerId `
        -sharedKey $sharedKey `
        -date $rfc1123date `
        -contentLength $contentLength `
        -method $method `
        -contentType $contentType `
        -resource $resource
    $uri = "https://" + $customerId + ".ods.opinsights.azure.com" + $resource + "?api-version=2016-04-01"

    $headers = @{
        "Authorization" = $signature;
        "Log-Type" = $logType;
        "x-ms-date" = $rfc1123date;
        "time-generated-field" = $TimeStampField;
    }

    $response = Invoke-WebRequest -Uri $uri -Method $method -ContentType $contentType -Headers $headers -Body $body -UseBasicParsing
    return $response.StatusCode

}

# Submit the data to the API endpoint
Post-LogAnalyticsData -customerId $customerId -sharedKey $sharedKey -body ([System.Text.Encoding]::UTF8.GetBytes($json)) -logType $logType  

Alternatieven en overwegingen

Hoewel de Data Collector-API het grootste deel van uw behoeften moet dekken wanneer u vrije gegevens verzamelt in Azure-logboeken, is het mogelijk dat u een alternatieve benadering nodig hebt om enkele van de beperkingen van de API te overwinnen. Uw opties, inclusief belangrijke overwegingen, worden vermeld in de volgende tabel:

Alternatief Omschrijving Meest geschikt voor
Aangepaste gebeurtenissen: op systeemeigen SDK gebaseerde opname in Application Insights Application Insights, meestal geïnstrueerd via een SDK binnen uw toepassing, biedt u de mogelijkheid om aangepaste gegevens te verzenden via aangepaste gebeurtenissen.
  • Gegevens die in uw toepassing worden gegenereerd, maar niet door de SDK worden opgehaald via een van de standaardgegevenstypen (aanvragen, afhankelijkheden, uitzonderingen, enzovoort).
  • Gegevens die het vaakst worden gecorreleerd met andere toepassingsgegevens in Application Insights.
Gegevensverzamelaar-API in Azure Monitor-logboeken De Data Collector-API in Azure Monitor-logboeken is een volledig open-beëindigde manier om gegevens op te nemen. Alle gegevens die zijn opgemaakt in een JSON-object, kunnen hier worden verzonden. Nadat het is verzonden, wordt deze verwerkt en beschikbaar gemaakt in Monitorlogboeken om te worden gecorreleerd met andere gegevens in Monitorlogboeken of op basis van andere Application Insights-gegevens.

Het is vrij eenvoudig om de gegevens als bestanden te uploaden naar een Azure Blob Storage-blob, waar de bestanden worden verwerkt en vervolgens worden geüpload naar Log Analytics. Zie Een gegevenspijplijn maken met de Data Collector-API voor een voorbeeldimplementatie.
  • Gegevens die niet noodzakelijkerwijs worden gegenereerd binnen een toepassing die is geïnstrueerd in Application Insights.
    Voorbeelden hiervan zijn opzoek- en feitentabellen, referentiegegevens, vooraf geaggregeerde statistieken, enzovoort.
  • Gegevens waarnaar wordt verwezen op basis van andere Azure Monitor-gegevens (Application Insights, andere gegevenstypen Logboeken bewaken, Defender voor Cloud, Container insights en virtuele machines, enzovoort).
Azure Data Explorer Azure Data Explorer, nu algemeen beschikbaar voor het publiek, is het gegevensplatform dat Application Insights Analytics en Azure Monitor-logboeken mogelijk maakt. Door het gegevensplatform in de onbewerkte vorm te gebruiken, hebt u volledige flexibiliteit (maar de overhead van beheer vereist) over het cluster (op rollen gebaseerd toegangsbeheer (Kubernetes), retentiepercentage, schema, enzovoort). Azure Data Explorer biedt veel opnameopties, waaronder CSV-, TSV- en JSON-bestanden .
  • Gegevens die niet worden gecorreleerd met andere gegevens onder Application Insights of Monitor-logboeken.
  • Gegevens waarvoor geavanceerde opname- of verwerkingsmogelijkheden zijn vereist die momenteel niet beschikbaar zijn in Azure Monitor-logboeken.

Volgende stappen