Senden von Protokolldaten an Azure Monitor mithilfe der HTTP-Datensammler-API (veraltet)
In diesem Artikel wird gezeigt, wie Sie die HTTP-Datensammler-API verwenden, um Protokolldaten von einem REST-API-Client an Azure Monitor zu senden. In dem Dokument wird beschrieben, wie Daten formatiert werden, die von Ihrem Skript oder Ihrer Anwendung gesammelt werden, wie sie in eine Anforderung eingeschlossen werden und wie diese Anforderung von Azure Monitor autorisiert wird. Wir stellen Beispiele für Azure PowerShell, C# und Python bereit.
Anmerkung
Die HTTP-Datensammler-API von Azure Monitor ist veraltet und ist ab dem 14.09.2026 nicht mehr funktionsfähig. Die Protokollaufnahme-API hat die alte Lösungersetzt.
Konzepte
Sie können die HTTP-Datensammler-API verwenden, um Protokolldaten von jedem Client aus, der eine REST-API aufrufen kann, an einen Log Analytics-Arbeitsbereich in Azure Monitor zu senden. Der Client kann ein Runbook in Azure Automation sein, das Verwaltungsdaten aus Azure oder einer anderen Cloud sammelt, oder es kann ein alternatives Verwaltungssystem sein, das Azure Monitor zum Konsolidieren und Analysieren von Protokolldaten verwendet.
Alle Daten im Log Analytics-Arbeitsbereich werden als Datensatz mit einem bestimmten Datensatztyp gespeichert. Sie formatieren Ihre Daten, die an die HTTP-Datensammler-API gesendet werden sollen, als mehrere Datensätze in JavaScript Object Notation (JSON). Wenn Sie die Daten übermitteln, wird für jeden Datensatz in der Anforderungsnutzlast ein eigener Datensatz im Repository erstellt.
Anforderung erstellen
Um die HTTP-Datensammler-API zu verwenden, erstellen Sie eine POST-Anforderung, die die zu sendenden Daten in JSON enthält. In den nächsten drei Tabellen sind die Attribute aufgeführt, die für jede Anforderung erforderlich sind. Die einzelnen Attribute werden weiter unten im Artikel ausführlicher beschrieben.
Anforderungs-URI
Attribut | Eigentum |
---|---|
Methode | BEREITSTELLEN |
URI | https://<CustomerId>.ods.opinsights.azure.com/api/logs?api-version=2016-04-01 |
Inhaltstyp | application/json |
Anforderungs-URI-Parameter
Parameter | Beschreibung |
---|---|
Kundennummer | Der eindeutige Bezeichner für den Log Analytics-Arbeitsbereich. |
Ressource | Der API-Ressourcenname: /api/logs. |
API-Version | Die Version der API, die mit dieser Anforderung verwendet werden soll. Derzeit ist die Version 2016-04-01. |
Anforderungsheader
Überschrift | Beschreibung |
---|---|
Ermächtigung | Die Autorisierungssignatur. Weiter unten im Artikel erfahren Sie, wie Sie eine HMAC-SHA256 Kopfzeile erstellen. |
Log-Type | Geben Sie den Datensatztyp der übermittelten Daten an. Er darf nur Buchstaben, Zahlen und das Unterstrichzeichen (_) enthalten, und er darf 100 Zeichen nicht überschreiten. |
x-ms-date | Das Datum, an dem die Anforderung verarbeitet wurde, im Format RFC 1123. |
x-ms-AzureResourceId | Die Ressourcen-ID der Azure-Ressource, der die Daten zugeordnet werden sollen. Sie füllt die _ResourceId-Eigenschaft aus und ermöglicht die Aufnahme der Daten in Ressourcenkontext--Abfragen. Wenn dieses Feld nicht angegeben ist, werden die Daten nicht in Ressourcenkontextabfragen einbezogen. |
zeitgeneriertes Feld | Der Name eines Felds in den Daten, die den Zeitstempel des Datenelements enthalten. Wenn Sie ein Feld angeben, werden dessen Inhalte für TimeGeneratedverwendet. Wenn Sie dieses Feld nicht angeben, ist die Standardeinstellung für TimeGenerated der Zeitpunkt, zu dem die Nachricht empfangen wird. Der Inhalt des Nachrichtenfelds sollte dem ISO 8601-Format JJJJ-MM-DDThh:mm:ssZ entsprechen. Der Wert der Zeitgenerierung darf nicht älter als zwei Tage vor der Empfangszeit oder mehr als einen Tag in der Zukunft sein. In diesem Fall wird die Uhrzeit, zu der die Nachricht erfasst wird, verwendet. |
Ermächtigung
Jede Anforderung an die Azure Monitor HTTP Data Collector-API muss einen Autorisierungsheader enthalten. Um eine Anforderung zu authentifizieren, signieren Sie die Anforderung entweder mit dem primären oder dem sekundären Schlüssel für den Arbeitsbereich, der die Anforderung vornimmt. Dann übergeben Sie diese Signatur als Teil der Anforderung.
Hier ist das Format für den Autorisierungsheader:
Authorization: SharedKey <WorkspaceID>:<Signature>
WorkspaceID- ist die eindeutige Kennung für den Arbeitsbereich von Log Analytics. Die Signatur ist einen hashbasierten Nachrichtenauthentifizierungscode (HMAC), der aus der Anforderung erstellt und dann mithilfe des SHA256-Algorithmusberechnet wird. Anschließend codieren Sie sie mithilfe der Base64-Codierung.
Verwenden Sie dieses Format, um die SharedKey Signaturzeichenfolge zu codieren:
StringToSign = VERB + "\n" +
Content-Length + "\n" +
Content-Type + "\n" +
"x-ms-date:" + x-ms-date + "\n" +
"/api/logs";
Hier ist ein Beispiel für einen Signaturstring.
POST\n1024\napplication/json\nx-ms-date:Mon, 04 Apr 2016 08:00:00 GMT\n/api/logs
Wenn Sie über die Signaturzeichenfolge verfügen, verschlüsseln Sie sie mithilfe des HMAC-SHA256-Algorithmus auf der UTF-8-codierten Zeichenfolge, und kodieren Sie das Ergebnis anschließend in Base64. Verwenden Sie dieses Format:
Signature=Base64(HMAC-SHA256(UTF8(StringToSign)))
Die Beispiele in den nächsten Abschnitten enthalten Beispielcode, mit dem Sie einen Autorisierungsheader erstellen können.
Anfragekörper
Der Textkörper der Nachricht muss in JSON enthalten sein. Sie muss einen oder mehrere Datensätze mit dem Eigenschaftennamen und den Wertpaaren im folgenden Format enthalten. Der Eigenschaftsname darf nur Buchstaben, Zahlen und das Unterstrichzeichen (_) enthalten.
[
{
"property 1": "value1",
"property 2": "value2",
"property 3": "value3",
"property 4": "value4"
}
]
Sie können mehrere Datensätze in einer einzigen Anforderung mithilfe des folgenden Formats zusammen stapeln. Alle Datensätze müssen denselben Datensatztyp aufweisen.
[
{
"property 1": "value1",
"property 2": "value2",
"property 3": "value3",
"property 4": "value4"
},
{
"property 1": "value1",
"property 2": "value2",
"property 3": "value3",
"property 4": "value4"
}
]
Datensatztyp und -eigenschaften
Sie definieren einen benutzerdefinierten Datensatztyp, wenn Sie Daten über die Azure Monitor-HTTP-Datensammler-API übermitteln. Derzeit können Sie keine Daten in bestehende Datensatztypen schreiben, die von anderen Datentypen und Lösungen erstellt wurden. Azure Monitor liest die eingehenden Daten und erstellt dann Eigenschaften, die den Datentypen der eingegebenen Werte entsprechen.
Jede Anforderung an die Datensammler-API muss einen Log-Type- Header mit dem Namen für den Datensatztyp enthalten. Das Suffix _CL wird automatisch an den Namen angefügt, den Sie eingeben, um ihn von anderen Protokolltypen als benutzerdefiniertes Protokoll zu unterscheiden. Wenn Sie beispielsweise den Namen MyNewRecordTypeeingeben, erstellt Azure Monitor einen Datensatz mit dem Typ MyNewRecordType_CL. Dadurch wird sichergestellt, dass es keine Konflikte zwischen vom Benutzer erstellten Typnamen und den in aktuellen oder zukünftigen Microsoft-Lösungen enthaltenen gibt.
Um den Datentyp einer Eigenschaft zu identifizieren, fügt Azure Monitor dem Eigenschaftennamen ein Suffix hinzu. Wenn eine Eigenschaft einen NULL-Wert enthält, ist die Eigenschaft nicht in diesem Datensatz enthalten. Diese Tabelle listet den Datentyp der Eigenschaft und das entsprechende Suffix auf:
Eigenschafts-Datentyp | Nachsilbe |
---|---|
Schnur | _s |
Boolesch | _b |
Doppelt | _d |
Datum/Uhrzeit | _t |
GUID (als Zeichenfolge gespeichert) | _g |
Anmerkung
Zeichenfolgenwerte, die wie GUIDs erscheinen, erhalten das Suffix _g und werden als GUID formatiert, selbst wenn der eingehende Wert keine Bindestriche enthält. Beispiel: Sowohl "8145d822-13a7-44ad-859c-36f31a84f6dd" als auch "8145d82213a744ad859c36f31a84f6dd" werden als "8145d822-13a7-44ad-859c-36f31a84f6dd" gespeichert. Die einzigen Unterschiede zwischen dieser und einer anderen Zeichenfolge sind das _g im Namen und das Hinzufügen von Bindestrichen, wenn sie in der Eingabe nicht vorhanden sind.
Der Datentyp, den Azure Monitor für jede Eigenschaft verwendet, hängt davon ab, ob der Datensatztyp für den neuen Datensatz bereits vorhanden ist.
- Wenn der Datensatztyp nicht vorhanden ist, erstellt Azure Monitor mithilfe der JSON-Typzuleitung einen neuen Typ, um den Datentyp für jede Eigenschaft für den neuen Datensatz zu bestimmen.
- Wenn der Datensatztyp vorhanden ist, versucht Azure Monitor, einen neuen Datensatz basierend auf vorhandenen Eigenschaften zu erstellen. Wenn der Datentyp für eine Eigenschaft im neuen Datensatz nicht übereinstimmt und nicht in den vorhandenen Typ konvertiert werden kann oder wenn der Datensatz eine Eigenschaft enthält, die nicht vorhanden ist, erstellt Azure Monitor eine neue Eigenschaft mit dem relevanten Suffix.
Beispielsweise würde der folgende Übermittlungseintrag einen Datensatz mit drei Eigenschaften, number_d, boolean_bund string_serstellen:
Wenn Sie diesen nächsten Eintrag übermitteln würden, wobei alle Werte als Zeichenfolgen formatiert sind, würden sich die Eigenschaften nicht ändern. Sie können die Werte in vorhandene Datentypen konvertieren.
Wenn Sie diese nächste Übermittlung vornehmen, erstellt Azure Monitor jedoch die neuen Eigenschaften boolean_d und string_d. Sie können diese Werte nicht konvertieren.
Wenn Sie dann den folgenden Eintrag übermitteln, bevor der Datensatztyp erstellt wird, erstellt Azure Monitor einen Datensatz mit drei Eigenschaften, number_s, boolean_sund string_s. In diesem Eintrag wird jeder der anfangswerte als Zeichenfolge formatiert:
Reservierte Eigenschaften
Die folgenden Eigenschaften sind reserviert und sollten nicht in einem benutzerdefinierten Datensatztyp verwendet werden. Wenn Ihre Nutzlast einen der folgenden Eigenschaftennamen enthält, wird eine Fehlermeldung angezeigt:
- Mieter
- TimeGenerated
- Rohdaten
Datenlimits
Die in der Azure Monitor-Datensammlungs-API bereitgestellten Daten unterliegen bestimmten Einschränkungen:
- Maximal 30 MB pro Beitrag zur Azure Monitor Data Collector-API. Dies ist eine Größenbeschränkung für einen einzelnen Beitrag. Wenn die Daten aus einem einzelnen Beitrag 30 MB überschreiten, sollten Sie die Daten in kleinere Blöcke aufteilen und gleichzeitig senden.
- Maximal 32 KB für Feldwerte. Wenn der Feldwert größer als 32 KB ist, werden die Daten gekürzt.
- Empfohlener Maximalwert von 50 Feldern für einen bestimmten Typ. Dies ist ein praktischer Grenzwert aus Sicht der Benutzerfreundlichkeit und Sucherfahrung.
- Tabellen in Log Analytics-Arbeitsbereichen unterstützen nur bis zu 500 Spalten (in diesem Artikel als Felder bezeichnet).
- Maximal 45 Zeichen für Spaltennamen.
Rückgabecodes
Der HTTP-Statuscode 200 bedeutet, dass die Anforderung zur Verarbeitung empfangen wurde. Dies gibt an, dass der Vorgang erfolgreich abgeschlossen wurde.
Der vollständige Satz von Statuscodes, die der Dienst zurückgeben kann, ist in der folgenden Tabelle aufgeführt:
Code | Status | Fehlercode | Beschreibung |
---|---|---|---|
200 | OKAY | Die Anforderung wurde erfolgreich akzeptiert. | |
400 | Fehlerhafte Anfrage | InaktiverKunde | Der Arbeitsbereich wurde geschlossen. |
400 | Ungültige Anforderung | UngültigeApiVersion | Die angegebene API-Version wurde vom Dienst nicht erkannt. |
400 | Ungültige Anforderung | UngültigeKundenID | Die angegebene Arbeitsbereichs-ID ist ungültig. |
400 | Ungültige Anforderung | Ungültiges Datenformat | Ein ungültiger JSON-Code wurde übermittelt. Der Antworttext enthält möglicherweise weitere Informationen zum Beheben des Fehlers. |
400 | Fehlerhafte Anfrage | UngültigerProtokolltyp | Der angegebene Protokolltyp enthielt Sonderzeichen oder Zahlen. |
400 | Ungültige Anforderung | Fehlende API-Version | Die API-Version wurde nicht angegeben. |
400 | Ungültige Anforderung | FehlenderInhaltstyp | Der Inhaltstyp wurde nicht angegeben. |
400 | Ungültige Anforderung | MissingLogType | Der erforderliche Wertprotokolltyp wurde nicht angegeben. |
400 | Fehlerhafte Anfrage | Nicht unterstützter Inhaltstyp | Der Inhaltstyp wurde nicht auf application/jsonfestgelegt. |
403 | Verboten | Ungültige Autorisierung | Fehler beim Authentifizieren der Anforderung durch den Dienst. Überprüfen Sie, ob die Arbeitsbereichs-ID und der Verbindungsschlüssel gültig sind. |
404 | Nicht gefunden | Entweder ist die bereitgestellte URL falsch, oder die Anforderung ist zu groß. | |
429 | Zu viele Anforderungen | Der Dienst erfährt ein hohes Datenvolumen von Ihrem Konto. Versuchen Sie die Anforderung später erneut. | |
500 | Interner Serverfehler | UnbestimmterFehler | Der Dienst hat einen internen Fehler festgestellt. Versuchen Sie die Anforderung erneut. |
503 | Dienst nicht verfügbar | Dienst nicht verfügbar | Der Dienst ist zurzeit nicht verfügbar, um Anfragen zu empfangen. Versuchen Sie Ihre Anfrage erneut. |
Abfragedaten
Um die von der Azure Monitor HTTP-Datensammler-API übermittelten Daten abzufragen, suchen Sie nach Datensätzen, deren Typ dem von Ihnen angegebenen und mit _CLangehängten LogType-Wert entspricht. Wenn Sie z. B. MyCustomLogverwendet haben, würden Sie alle Datensätze mit MyCustomLog_CL
zurückgeben.
Beispielanforderungen
In diesem Abschnitt finden Sie Beispiele, die veranschaulichen, wie Daten mithilfe verschiedener Programmiersprachen an die AZURE Monitor-HTTP-Datensammler-API übermittelt werden.
Legen Sie für jedes Beispiel die Variablen für den Autorisierungsheader wie folgt fest:
- Suchen Sie im Azure-Portal Ihren Log Analytics-Arbeitsbereich.
- Wählen Sie Agentsaus.
- Wählen Sie rechts neben Arbeitsbereichs-IDdas Symbol Kopieren aus, und fügen Sie dann die ID als Wert der Variablen Kunden-ID ein.
- Wählen Sie rechts neben Primärschlüsseldas Symbol Kopieren aus, und fügen Sie dann die ID als Wert der Variablen GemeinsamerSchlüssel ein.
Alternativ können Sie die Variablen für den Protokolltyp und JSON-Daten ändern.
# 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
Alternativen und Überlegungen
Obwohl die Datensammler-API die meisten Ihrer Anforderungen abdecken sollte, während Sie Freiformdaten in Azure-Protokolle sammeln, benötigen Sie möglicherweise einen alternativen Ansatz, um einige der Einschränkungen der API zu überwinden. Ihre Optionen, einschließlich wichtiger Überlegungen, sind in der folgenden Tabelle aufgeführt:
Alternative | Beschreibung | Am besten geeignet für |
---|---|---|
Benutzerdefinierte Ereignisse: Native SDK-basierte Erfassung in Application Insights | Application Insights, in der Regel über ein SDK in Ihrer Anwendung instrumentiert, bietet Ihnen die Möglichkeit, benutzerdefinierte Daten über benutzerdefinierte Ereignisse zu senden. |
|
Datensammler-API in Azure Monitor-Protokollen | Die Datensammler-API in Azure Monitor-Protokollen ist eine völlig offene Möglichkeit zum Aufnehmen von Daten. Alle Daten, die in einem JSON-Objekt formatiert sind, können hier gesendet werden. Nachdem sie gesendet wurde, wird sie verarbeitet und in Monitorprotokollen zur Verfügung gestellt, um mit anderen Daten in Monitorprotokollen oder mit anderen Application Insights-Daten korreliert zu werden. Es ist ziemlich einfach, die Daten als Dateien in ein Azure Blob Storage-Blob hochzuladen, in dem die Dateien verarbeitet und dann in Log Analytics hochgeladen werden. Eine Beispielimplementierung finden Sie unter Erstellen einer Datenpipeline mit der Datensammler-API. |
|
Azure Data Explorer | Azure Data Explorer, der jetzt allgemein für die Öffentlichkeit verfügbar ist, ist die Datenplattform, die Application Insights Analytics und Azure Monitor Logs unterstützt. Durch die Nutzung der Datenplattform in ihrer Rohform haben Sie vollständige Flexibilität, erfordert jedoch den Verwaltungsaufwand über den Cluster; Kubernetes rollenbasierte Zugriffskontrolle (RBAC), Aufbewahrungsrate, Schema usw. Azure Data Explorer bietet viele Eingabeoptionen, einschließlich CSV-, TSV- und JSON-Dateien. |
|
Nächste Schritte
- Verwenden Sie die Protokollsuche-API, um Daten aus dem Log Analytics-Arbeitsbereich abzurufen.
- Erfahren Sie mehr darüber, wie Sie eine Datenpipeline mit der Datensammler-API erstellen, indem Sie einen Logic Apps-Workflow für Azure Monitor verwenden.