Envoyer des données de journal à Azure Monitor à l’aide de l’API collecteur de données HTTP (déconseillée)
Cet article explique comment utiliser l’API collecteur de données HTTP pour envoyer des données de journal à Azure Monitor à partir d’un client d’API REST. Il décrit comment mettre en forme les données collectées par votre script ou votre application, les inclure dans une demande et demander cette demande autorisée par Azure Monitor. Nous fournissons des exemples pour Azure PowerShell, C# et Python.
Note
L’API collecteur de données HTTP Azure Monitor a été déconseillée et ne sera plus fonctionnelle à compter du 14/9/2026. Elle a été remplacée par l’API d’ingestion Logs.
Concepts
Vous pouvez utiliser l’API collecteur de données HTTP pour envoyer des données de journal à un espace de travail Log Analytics dans Azure Monitor à partir de n’importe quel client qui peut appeler une API REST. Le client peut être un runbook dans Azure Automation qui collecte des données de gestion à partir d’Azure ou d’un autre cloud, ou il peut s’agir d’un autre système de gestion qui utilise Azure Monitor pour consolider et analyser les données de journal.
Toutes les données de l’espace de travail Log Analytics sont stockées sous forme d’enregistrement avec un type d’enregistrement particulier. Vous mettez en forme vos données à envoyer à l’API collecteur de données HTTP en tant qu’enregistrements multiples dans JavaScript Object Notation (JSON). Lorsque vous envoyez les données, un enregistrement individuel est créé dans le référentiel pour chaque enregistrement de la charge utile de la demande.
Créer une demande
Pour utiliser l’API collecteur de données HTTP, vous créez une requête POST qui inclut les données à envoyer au format JSON. Les trois tables suivantes répertorient les attributs requis pour chaque requête. Nous décrivons chaque attribut plus en détail plus loin dans l’article.
URI de requête
Attribut | Propriété |
---|---|
Méthode | PUBLIER |
URI | https://<CustomerId>.ods.opinsights.azure.com/api/logs?api-version=2016-04-01 |
Type de contenu | application/json |
Paramètres de l’URI de requête
Paramètre | Description |
---|---|
CustomerID | Identificateur unique de l’espace de travail Log Analytics. |
Ressource | Nom de la ressource d’API : /api/logs. |
Version de l’API | Version de l’API à utiliser avec cette requête. Actuellement, la version est 2016-04-01. |
En-têtes de requête
En-tête | Description |
---|---|
Autorisation | Signature d’autorisation. Plus loin dans l’article, vous pouvez découvrir comment créer un en-tête HMAC-SHA256. |
Log-Type | Spécifiez le type d’enregistrement des données envoyées. Il ne peut contenir que des lettres, des chiffres et le caractère de soulignement (_), et il ne peut pas dépasser 100 caractères. |
x-ms-date | Date à laquelle la demande a été traitée, au format RFC 1123. |
x-ms-AzureResourceId | ID de ressource de la ressource Azure à laquelle les données doivent être associées. Il remplit la propriété _ResourceId et permet aux données d’être incluses dans requêtes de contexte de ressources. Si ce champ n’est pas spécifié, les données ne seront pas incluses dans les requêtes de contexte de ressource. |
champ généré dans le temps | Nom d’un champ dans les données qui contient l’horodatage de l’élément de données. Si vous spécifiez un champ, son contenu est utilisé pour TimeGenerated. Si vous ne spécifiez pas ce champ, la valeur par défaut de TimeGenerated est l’heure à laquelle le message est ingéré. Les contenus du champ de message doivent suivre le format ISO 8601 AAAA-MM-DDThh:mm:ssZ. La valeur de temps générée ne peut pas être antérieure à 2 jours avant l'heure de réception ou plus d'un jour dans le futur. Dans ce cas, l’heure à laquelle le message est ingéré sera utilisé. |
Autorisation
Toute demande adressée à l’API collecteur de données HTTP Azure Monitor doit inclure un en-tête d’autorisation. Pour authentifier une demande, signez la demande avec la clé primaire ou secondaire de l’espace de travail qui effectue la requête. Ensuite, transmettez cette signature dans le cadre de la demande.
Voici le format de l’en-tête d’autorisation :
Authorization: SharedKey <WorkspaceID>:<Signature>
WorkspaceID est l’identificateur unique de l’espace de travail Log Analytics. Signature est un code d’authentification de message basé sur le hachage (HMAC) construit à partir de la requête, puis calculé à l’aide de l’algorithme SHA256. Ensuite, vous l’encodez à l’aide de l’encodage Base64.
Utilisez ce format pour encoder la chaîne de signature SharedKey :
StringToSign = VERB + "\n" +
Content-Length + "\n" +
Content-Type + "\n" +
"x-ms-date:" + x-ms-date + "\n" +
"/api/logs";
Voici un exemple de chaîne de signature :
POST\n1024\napplication/json\nx-ms-date:Mon, 04 Apr 2016 08:00:00 GMT\n/api/logs
Lorsque vous disposez de la chaîne de signature, encodez-la à l’aide de l’algorithme HMAC-SHA256 sur la chaîne encodée UTF-8, puis encodez le résultat en base64. Utilisez ce format :
Signature=Base64(HMAC-SHA256(UTF8(StringToSign)))
Les exemples des sections suivantes ont un exemple de code pour vous aider à créer un en-tête d’autorisation.
Corps de la demande
Le corps du message doit être au format JSON. Il doit inclure un ou plusieurs enregistrements avec le nom de propriété et les paires valeur au format suivant. Le nom de la propriété ne peut contenir que des lettres, des chiffres et le caractère de soulignement (_).
[
{
"property 1": "value1",
"property 2": "value2",
"property 3": "value3",
"property 4": "value4"
}
]
Vous pouvez regrouper plusieurs enregistrements dans une seule requête à l’aide du format suivant. Tous les enregistrements doivent être du même type d’enregistrement.
[
{
"property 1": "value1",
"property 2": "value2",
"property 3": "value3",
"property 4": "value4"
},
{
"property 1": "value1",
"property 2": "value2",
"property 3": "value3",
"property 4": "value4"
}
]
Type d’enregistrement et propriétés
Vous définissez un type d’enregistrement personnalisé lorsque vous envoyez des données via l’API Collecteur de données HTTP Azure Monitor. Actuellement, vous ne pouvez pas écrire de données dans des types d’enregistrements existants qui ont été créés par d’autres types de données et solutions. Azure Monitor lit les données entrantes, puis crée des propriétés qui correspondent aux types de données des valeurs que vous entrez.
Chaque requête adressée à l’API collecteur de données doit inclure un en-tête de type journal
Pour identifier le type de données d’une propriété, Azure Monitor ajoute un suffixe au nom de la propriété. Si une propriété contient une valeur Null, la propriété n’est pas incluse dans cet enregistrement. Ce tableau répertorie le type de données de propriété et le suffixe correspondant :
Type de données de propriété | Suffixe |
---|---|
Corde | _s |
Booléen | _b |
Double | _d |
Date/heure | _t |
GUID (stocké sous forme de chaîne) | _g |
Note
Les valeurs de chaîne qui semblent être des GUID reçoivent le suffixe _g et elles sont mises en forme en tant que GUID, même si la valeur entrante n’inclut pas de tirets. Par exemple, « 8145d822-13a7-44ad-859c-36f31a84f6dd » et « 8145d82213a744ad8859c36f31a84f6ddd » sont stockés en tant que « 8145d822-13a7-44ad-859c-36f31a84f6dd ». Les seules différences entre cette chaîne et une autre chaîne sont le _g dans le nom et l'ajout de tirets s'ils ne sont pas fournis dans l'entrée.
Le type de données utilisé par Azure Monitor pour chaque propriété varie selon que le type d’enregistrement du nouvel enregistrement existe déjà.
- Si le type d’enregistrement n’existe pas, Azure Monitor en crée un en utilisant l’inférence de type JSON pour déterminer le type de données de chaque propriété pour le nouvel enregistrement.
- Si le type d’enregistrement existe, Azure Monitor tente de créer un enregistrement en fonction des propriétés existantes. Si le type de données d’une propriété dans le nouvel enregistrement ne correspond pas et ne peut pas être converti en type existant ou si l’enregistrement inclut une propriété qui n’existe pas, Azure Monitor crée une propriété qui a le suffixe approprié.
Par exemple, l’entrée de soumission suivante crée un enregistrement avec trois propriétés, number_d, boolean_bet string_s:
Si vous deviez soumettre cette entrée suivante, avec toutes les valeurs mises en forme sous forme de chaînes, les propriétés ne changent pas. Vous pouvez convertir les valeurs en types de données existants.
Toutefois, si vous effectuez ensuite cette soumission suivante, Azure Monitor crée les nouvelles propriétés boolean_d et string_d. Vous ne pouvez pas convertir ces valeurs.
Si vous envoyez ensuite l’entrée suivante, avant la création du type d’enregistrement, Azure Monitor crée un enregistrement avec trois propriétés, number_s, boolean_set string_s. Dans cette entrée, chacune des valeurs initiales est mise en forme sous forme de chaîne :
Propriétés réservées
Les propriétés suivantes sont réservées et ne doivent pas être utilisées dans un type d’enregistrement personnalisé. Vous recevrez une erreur si votre charge utile inclut l’un de ces noms de propriétés :
- locataire
- TimeGenerated
- RawData
Limites des données
Les données publiées dans l’API de collecte de données Azure Monitor sont soumises à certaines contraintes :
- Maximum de 30 Mo par publication sur l’API collecteur de données Azure Monitor. Il s’agit d’une limite de taille pour une publication unique. Si les données d'un message unique dépassent 30 Mo, vous devez diviser les données en blocs de taille plus petite et les envoyer simultanément.
- Maximum de 32 Ko pour les valeurs de champ. Si la valeur du champ est supérieure à 32 Ko, les données sont tronquées.
- Maximum recommandé de 50 champs pour un type donné. Il s’agit d’une limite pratique du point de vue de l’utilisation et de l’expérience de recherche.
- Les tables des espaces de travail Log Analytics ne prennent en charge que jusqu’à 500 colonnes (appelées champs dans cet article).
- Maximum de 45 caractères pour les noms de colonnes.
Codes de retour
Le code d’état HTTP 200 signifie que la requête a été reçue pour traitement. Cela indique que l’opération s’est terminée correctement.
L’ensemble complet de codes d’état que le service peut retourner est répertorié dans le tableau suivant :
Code | Statut | Code d’erreur | Description |
---|---|---|---|
200 | D’ACCORD | La demande a été acceptée avec succès. | |
400 | Demande incorrecte | ClientInactif | L’espace de travail a été fermé. |
400 | Demande incorrecte | InvalidApiVersion | La version de l’API que vous avez spécifiée n’a pas été reconnue par le service. |
400 | Demande incorrecte | InvalidCustomerId | L’ID d’espace de travail spécifié n’est pas valide. |
400 | Demande incorrecte | FormatDeDonnéesInvalide | Un JSON non valide a été envoyé. Le corps de la réponse peut contenir plus d’informations sur la résolution de l’erreur. |
400 | Demande incorrecte | InvalidLogType | Le type de journal spécifié contenait des caractères spéciaux ou des chiffres. |
400 | Demande incorrecte | MissingApiVersion | La version de l’API n’a pas été spécifiée. |
400 | Demande incorrecte | Type de contenu manquant | Le type de contenu n’a pas été spécifié. |
400 | Demande incorrecte | TypeDeJournalManquant | Le type de journal des valeurs requises n’a pas été spécifié. |
400 | Demande incorrecte | Non pris en charge TypeDeContenu | Le type de contenu n’a pas été défini sur application/json. |
403 | Interdit | Autorisation Invalide | Le service n’a pas pu authentifier la requête. Vérifiez que l’ID et la clé de connexion de l’espace de travail sont valides. |
404 | Introuvable | L’URL fournie est incorrecte ou la requête est trop volumineuse. | |
429 | Trop de demandes | Le service rencontre un volume élevé de données à partir de votre compte. Réessayez la demande ultérieurement. | |
500 | Erreur interne du serveur | Erreur non spécifiée | Le service a rencontré une erreur interne. Réessayez la demande. |
503 | Service indisponible | Service Indisponible | Actuellement, le service n’est pas disponible pour recevoir des demandes. Réessayez votre demande. |
Interroger des données
Pour interroger les données soumises par l’API collecteur de données HTTP Azure Monitor, recherchez les enregistrements dont MyCustomLog_CL
.
Exemples de requêtes
Dans cette section, vous trouverez des exemples qui montrent comment envoyer des données à l’API collecteur de données HTTP Azure Monitor à l’aide de différents langages de programmation.
Pour chaque exemple, définissez les variables pour l’en-tête d’autorisation en procédant comme suit :
- Dans le portail Azure, recherchez votre espace de travail Log Analytics.
- Sélectionnez Agents.
- À droite de ID de l’espace de travail, sélectionnez l’icône Copier, puis collez l’ID comme valeur de la variable ID client.
- À droite de clé primaire, sélectionnez l’icône copier, puis collez l’ID comme valeur de la variable clé partagée.
Vous pouvez également modifier les variables pour le type de journal et les données JSON.
# 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
Alternatives et considérations
Bien que l’API collecteur de données couvre la plupart de vos besoins lorsque vous collectez des données de forme libre dans les journaux Azure, vous devrez peut-être adopter une autre approche pour surmonter certaines des limitations de l’API. Vos options, notamment les principales considérations, sont répertoriées dans le tableau suivant :
Alternatif | Description | Idéal pour |
---|---|---|
événements personnalisés: ingestion native basée sur le SDK dans Application Insights | Application Insights, généralement instrumenté par le biais d’un KIT de développement logiciel (SDK) au sein de votre application, vous permet d’envoyer des données personnalisées via des événements personnalisés. |
|
API Collecteur de données dans les journaux d'Azure Monitor | Dans Azure Monitor, l'API Collecteur de données dans les logs est un moyen totalement libre d'ingérer des données. Toutes les données mises en forme dans un objet JSON peuvent être envoyées ici. Une fois qu'il a été envoyé, il est traité et mis à disposition dans les Monitor Logs pour être mis en corrélation avec d'autres données dans les Monitor Logs ou par rapport à d'autres données d'Application Insights. Il est assez facile de charger les données en tant que fichiers dans un blob de stockage Azure, où les fichiers seront traités, puis envoyés vers Log Analytics. Pour obtenir un exemple d’implémentation, consultez Créer un pipeline de données avec l’API collecteur de données. |
|
Explorateur de données Azure | Azure Data Explorer, désormais en disponibilité générale pour le public, est la plateforme de données qui alimente Application Insights Analytics et les journaux Azure Monitor. En utilisant la plateforme de données sous sa forme brute, vous disposez d'une flexibilité totale (mais cela implique la charge de gestion) sur le cluster (contrôle d'accès basé sur les rôles Kubernetes (RBAC), la période de rétention, le schéma, etc.). Azure Data Explorer fournit de nombreuses options d’ingestion , notamment fichiers CSV, TSV et JSON. |
|
Étapes suivantes
- Utilisez l’API Recherche de journaux pour récupérer des données à partir de l’espace de travail Log Analytics.
- Découvrez comment créer un pipeline de données avec l’API de collecte de données en utilisant un flux de travail Logic Apps pour envoyer des données à Azure Monitor.