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 Logboekopname-API.
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 indient, wordt er een afzonderlijke record gemaakt in de repository voor elke record in de gegevensset van de aanvraag.
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
Attribuut | Eigenschap |
---|---|
Methode | VERZENDEN |
URI | https://<CustomerId>.ods.opinsights.azure.com/api/logs?api-version=2016-04-01 |
Inhoudstype | application/json |
URI-parameters aanvragen
Parameter | Beschrijving |
---|---|
KlantID | De unieke identificator voor de Log Analytics-werkruimte. |
Hulpbron | 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
Koptekst | Beschrijving |
---|---|
Machtiging | De autorisatiehandtekening. Verderop in het artikel kunt u lezen hoe u een HMAC-SHA256-header maakt. |
Log-Type | 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-indeling 1123. |
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 resource-context query'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 Genereerde Tijd kan niet ouder zijn dan 2 dagen vóór de ontvangsttijd of meer dan een dag in de toekomst. In dat geval wordt het tijdstip waarop het bericht wordt opgenomen, gebruikt. |
Machtiging
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. Signature is een HMAC (Hash-based Message Authentication Code) die is samengesteld uit 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.
Aanvraaginhoud
De hoofdtekst van het bericht moet in JSON staan. Het moet een of meer records bevatten met eigenschapsnaam- en waardekoppels in het volgende formaat. 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 log-type 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 MyNewRecordTypeinvoert, 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:
Eigenschap gegevenstype | Achtervoegsel |
---|---|
Snaar | _s |
Booleaans | _b |
Dubbel | _d |
Datum/tijd | _t |
GUID (opgeslagen als een tekenreeks) | _g |
Notitie
Tekenreekswaarden die op GUID's lijken, krijgen het achtervoegsel _g en worden opgemaakt als een GUID, ook 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_ben string_s:
Als u deze inzending indient en alle waarden als tekenreeksen zijn opgemaakt, zullen de eigenschappen niet veranderen. U kunt de waarden converteren naar bestaande gegevenstypen.
Maar als u deze volgende inzending maakt, maakt Azure Monitor de nieuwe eigenschappen boolean_d en string_d. U kunt deze waarden niet converteren.
Als u vervolgens de volgende vermelding indient voordat het recordtype wordt gemaakt, maakt Azure Monitor een record met drie eigenschappen, number_s, boolean_sen string_s. In deze vermelding wordt elk van de initiële waarden opgemaakt als een tekenreeks:
Gereserveerde eigenschappen
De volgende eigenschappen zijn gereserveerd en mogen niet worden gebruikt in een aangepast recordtype. Er wordt een fout weergegeven als uw lading een van deze eigenschapsnamen bevat:
- huurder
- 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 de 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 perspectief 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 | Beschrijving |
---|---|---|---|
200 | OK | De aanvraag is geaccepteerd. | |
400 | Foutieve aanvraag | InactieveKlant | De werkruimte is gesloten. |
400 | Foute aanvraag | InvalidApiVersion | De API-versie die u hebt opgegeven, is niet herkend door de service. |
400 | Ongeldig verzoek | OngeldigeKlantId | De opgegeven werkruimte-id is ongeldig. |
400 | Verkeerd verzoek | OngeldigGegevensformaat | Er is een ongeldige JSON verzonden. De hoofdtekst van het antwoord bevat mogelijk meer informatie over het oplossen van de fout. |
400 | Slechte aanvraag | InvalidLogType | Het opgegeven logboektype bevat speciale tekens of numerieke tekens. |
400 | Foute aanvraag | MissingApiVersion | De API-versie is niet opgegeven. |
400 | Verkeerd verzoek | OntbrekendInhoudstype | Het inhoudstype is niet opgegeven. |
400 | Foutieve aanvraag | OntbrekendLogType | Het vereiste type waardelogboek is niet opgegeven. |
400 | Onjuiste aanvraag | Niet-ondersteunde ContentType | Het inhoudstype is niet ingesteld op application/json-. |
403 | Verboden | OngeldigeAutorisatie | 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 | Niet-gespecificeerde fout | Er is een interne fout opgetreden in de service. Probeer de aanvraag opnieuw. |
503 | Service niet beschikbaar | DienstNietBeschikbaar | De service is momenteel niet beschikbaar voor het ontvangen van aanvragen. Probeer uw aanvraag opnieuw. |
Query's uitvoeren op gegevens
Als u query's wilt uitvoeren op gegevens die zijn verzonden door de AZURE Monitor HTTP-gegevensverzamelaar-API, zoekt u naar records waarvan 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 met MyCustomLog_CL
retourneren.
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:
- Zoek in Azure Portal uw Log Analytics-werkruimte.
- Selecteer Agenten.
- Selecteer rechts van werkruimte-idhet pictogram Kopiëren en plak de ID vervolgens als de waarde van de klant-id variabele.
- Selecteer rechts van Primaire Sleutelhet pictogram Kopiëren, en plak vervolgens 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 | Beschrijving | Meest geschikt voor |
---|---|---|
Aangepaste gebeurtenissen: Invoer gebaseerd op native SDK 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. |
|
Gegevensverzamelaar-API in Azure Monitor-logboeken | De Data Collector-API in Azure Monitor-logboeken is een volledig flexibele manier om gegevens binnen te halen. 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-APIvoor een voorbeeldimplementatie. |
|
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. |
|
Volgende stappen
- Gebruik de Api voor zoeken in logboeken om gegevens op te halen uit de Log Analytics-werkruimte.
- Meer informatie over hoe je met de Data Collector-API een gegevenspijplijn kunt maken door gebruik te maken van een Logic Apps-werkstroom voor Azure Monitor.