HTTP データ コレクター API を使用した Log Analytics へのデータの送信 (パブリック プレビュー)Send data to Log Analytics with the HTTP Data Collector API (public preview)

この記事では、HTTP データ コレクター API を使用して REST API クライアントから Log Analytics にデータを送信する方法を示します。This article shows you how to use the HTTP Data Collector API to send data to Log Analytics from a REST API client. ここでは、スクリプトまたはアプリケーションによって収集されたデータの形式を設定して要求に含め、その要求を Log Analytics に承認させる方法を説明します。It describes how to format data collected by your script or application, include it in a request, and have that request authorized by Log Analytics. PowerShell、C#、および Python の例を示します。Examples are provided for PowerShell, C#, and Python.

注意

Log Analytics HTTP データ コレクター API は、パブリック プレビュー段階にあります。The Log Analytics HTTP Data Collector API is in public preview.

概念Concepts

REST API を呼び出すことができる任意のクライアントから、HTTP データ コレクター API を使用して Log Analytics にデータを送信できます。You can use the HTTP Data Collector API to send data to Log Analytics from any client that can call a REST API. これは、Azure または別のクラウドから管理データを収集する Azure Automation の Runbookや、Log Analytics を使用してデータを統合して分析するログ分析を使用する他の管理システムが考えられます。This might be a runbook in Azure Automation that collects management data from Azure or another cloud, or it might be an alternate management system that uses Log Analytics to consolidate and analyze data.

Log Analytics リポジトリ内のすべてのデータは、特定の種類のレコードとして保存されます。All data in the Log Analytics repository is stored as a record with a particular record type. HTTP データ コレクター API に送信するデータを、JSON 形式の複数のレコードとして設定します。You format your data to send to the HTTP Data Collector API as multiple records in JSON. データを送信すると、要求ペイロード内の各レコードに対応する個別のレコードがリポジトリ内に作成されます。When you submit the data, an individual record is created in the repository for each record in the request payload.

HTTP データ コレクターの概要

要求を作成するCreate a request

HTTP データ コレクター API を使用するには、JavaScript Object Notation (JSON) で送信するデータを含む POST 要求を作成します。To use the HTTP Data Collector API, you create a POST request that includes the data to send in JavaScript Object Notation (JSON). 次の 3 つの表に、各要求で必要な属性の一覧を示します。The next three tables list the attributes that are required for each request. この記事の後半で、各属性についてより詳しく説明します。We describe each attribute in more detail later in the article.

要求 URIRequest URI

AttributeAttribute プロパティProperty
方法Method POSTPOST
URIURI https://<CustomerId>.ods.opinsights.azure.com/api/logs?api-version=2016-04-01https://<CustomerId>.ods.opinsights.azure.com/api/logs?api-version=2016-04-01
コンテンツの種類Content type application/jsonapplication/json

要求 URI のパラメーターRequest URI parameters

パラメーターParameter 説明Description
CustomerIDCustomerID Log Analytics ワークスペースの一意識別子です。The unique identifier for the Log Analytics workspace.
リソースResource API のリソース名は "/api/logs" です。The API resource name: /api/logs.
API バージョンAPI Version この要求で使用する API のバージョン。The version of the API to use with this request. 現時点では "2016-04-01" です。Currently, it's 2016-04-01.

要求ヘッダーRequest headers

ヘッダーHeader 説明Description
承認Authorization 承認の署名。The authorization signature. HMAC-SHA256 ヘッダーの作成方法については、この記事の後半で説明します。Later in the article, you can read about how to create an HMAC-SHA256 header.
Log-TypeLog-Type 送信中のデータのレコード型を指定します。Specify the record type of the data that is being submitted. 現在、ログの種類でサポートされているのは、アルファベットのみです。Currently, the log type supports only alpha characters. 数字や特殊文字はサポートされていません。It does not support numerics or special characters. このパラメーターのサイズ制限は 100 文字です。The size limit for this parameter is 100 characters.
x-ms-datex-ms-date RFC 1123 形式による、要求が処理された日付。The date that the request was processed, in RFC 1123 format.
time-generated-fieldtime-generated-field データ項目のタイムスタンプを含む、データ内のフィールドの名前。The name of a field in the data that contains the timestamp of the data item. フィールドを指定すると、フィールドのコンテンツは TimeGenerated の値に使用されます。If you specify a field then its contents are used for TimeGenerated. これは Null ではない可能性があり、有効な日時を含める必要があります。It may not be null, and it must contain a valid date time. このフィールドを指定しない場合、TimeGenerated の既定値は、メッセージが取り込まれた時刻になります。If this field isn’t specified, the default for TimeGenerated is the time that the message is ingested. メッセージ フィールドのコンテンツは、ISO 8601 形式 (YYYY-MM-DDThh:mm:ssZ) である必要があります。The contents of the message field should follow the ISO 8601 format YYYY-MM-DDThh:mm:ssZ.

承認Authorization

Log Analytics HTTP データ コレクター API への要求には、承認ヘッダーを含める必要があります。Any request to the Log Analytics HTTP Data Collector API must include an authorization header. 要求を認証するには、その要求を行っているワークスペースの主キーまたはセカンダリ キーのどちらかを使用して、要求に署名する必要があります。To authenticate a request, you must sign the request with either the primary or the secondary key for the workspace that is making the request. 次に、その署名を要求の一部として渡します。Then, pass that signature as part of the request.

承認ヘッダーの形式を次に示します。Here's the format for the authorization header:

Authorization: SharedKey <WorkspaceID>:<Signature>

WorkspaceID は、Log Analytics ワークスペースの一意識別子です。WorkspaceID is the unique identifier for the Log Analytics workspace. Signature は、要求で構築されてから、SHA256 アルゴリズムを使用して計算されるハッシュベース メッセージ認証コード (HMAC) です。Signature is a Hash-based Message Authentication Code (HMAC) that is constructed from the request and then computed by using the SHA256 algorithm. このコードを Base64 エンコーディングを使用してエンコードします。Then, you encode it by using Base64 encoding.

SharedKey 署名文字列をエンコードするには、次の形式を使用します。Use this format to encode the SharedKey signature string:

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

署名文字列の例を次に示します。Here's an example of a signature string:

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

署名文字列がある場合、UTF-8 でエンコードされた文字列で HMAC-SHA256 アルゴリズムを使用してエンコードしてから、その結果を Base64 としてエンコードします。When you have the signature string, encode it by using the HMAC-SHA256 algorithm on the UTF-8-encoded string, and then encode the result as Base64. 次の形式を使用します。Use this format:

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

次のセクションのサンプルには、承認ヘッダーを作成するのに役立つサンプル コードが含まれています。The samples in the next sections have sample code to help you create an authorization header.

要求本文Request body

メッセージの本文は JSON 形式である必要があります。The body of the message must be in JSON. 次の形式でプロパティ名と値をペアにして、レコードを 1 つ以上含める必要があります。It must include one or more records with the property name and value pairs in this format:

{
"property1": "value1",
" property 2": "value2"
" property 3": "value3",
" property 4": "value4"
}

次の形式を使用して複数のレコードを 1 つの要求にまとめることができます。You can batch multiple records together in a single request by using the following format. すべてのレコードは同じレコード型である必要があります。All the records must be the same record type.

{
"property1": "value1",
" property 2": "value2"
" property 3": "value3",
" property 4": "value4"
},
{
"property1": "value1",
" property 2": "value2"
" property 3": "value3",
" property 4": "value4"
}

レコードの型とプロパティRecord type and properties

Log Analytics HTTP データ コレクター API 経由でデータを送信する場合、カスタム レコード型を定義します。You define a custom record type when you submit data through the Log Analytics HTTP Data Collector API. 現時点では、他のデータ型およびソリューションによって作成された既存のレコード型にデータを書き込むことはできません。Currently, you can't write data to existing record types that were created by other data types and solutions. Log Analytics は受信データを読み取り、入力した値のデータ型に一致するプロパティを作成します。Log Analytics reads the incoming data and then creates properties that match the data types of the values that you enter.

Log Analytics API への各要求には、レコード型の名前が付いた Log-Type ヘッダーを含める必要があります。Each request to the Log Analytics API must include a Log-Type header with the name for the record type. サフィックス _CL は、カスタム ログと他のログの種類を区別するために、入力した名前の最後に自動的に追加されます。The suffix _CL is automatically appended to the name you enter to distinguish it from other log types as a custom log. たとえば、「MyNewRecordType」と入力した場合、Log Analytics によって MyNewRecordType_CL という型のレコードが作成されます。For example, if you enter the name MyNewRecordType, Log Analytics creates a record with the type MyNewRecordType_CL. これにより、ユーザーが作成した型名と現在または将来の Microsoft ソリューションで提供される型名が競合することはありません。This helps ensure that there are no conflicts between user-created type names and those shipped in current or future Microsoft solutions.

プロパティのデータ型を識別するために、Log Analytics によってプロパティ名にサフィックスが追加されます。To identify a property's data type, Log Analytics adds a suffix to the property name. プロパティに null 値が含まれる場合、そのプロパティはレコードには含まれません。If a property contains a null value, the property is not included in that record. 次の表に、プロパティのデータ型と対応するサフィックスの一覧を示します。This table lists the property data type and corresponding suffix:

プロパティのデータ型Property data type サフィックスSuffix
StringString _s_s
ブールBoolean _b_b
DoubleDouble _d_d
Date/timeDate/time _t_t
GUIDGUID _g_g

各プロパティに対して Log Analytics が使用するデータ型は、新しいレコードのレコード型が既に存在するかどうかによって異なります。The data type that Log Analytics uses for each property depends on whether the record type for the new record already exists.

  • レコード型が存在しない場合、Log Analytics によって新しいレコード型が作成されます。If the record type does not exist, Log Analytics creates a new one. 新しいレコードの各プロパティに対してデータ型を決定するために、Log Analytics では JSON 型推論が使用されます。Log Analytics uses the JSON type inference to determine the data type for each property for the new record.
  • レコード型が存在する場合、Log Analytics によって、既存のプロパティに基づいて新しいレコードの作成が試みられます。If the record type does exist, Log Analytics attempts to create a new record based on existing properties. 新しいレコードのプロパティのデータ型が既存の型と一致せず、変換することもできない場合や、存在しないプロパティを含むレコードの場合、Log Analytics によって関連性のあるサフィックスを持つ新しいプロパティが作成されます。If the data type for a property in the new record doesn’t match and can’t be converted to the existing type, or if the record includes a property that doesn’t exist, Log Analytics creates a new property that has the relevant suffix.

たとえば、次のような送信エントリには、number_dboolean_bstring_s の 3 つのプロパティを持つレコードが作成されます。For example, this submission entry would create a record with three properties, number_d, boolean_b, and string_s:

サンプル レコード 1

次に、すべての値が文字列で記述された下記のようなエントリを送信する場合、プロパティは変更されません。If you then submitted this next entry, with all values formatted as strings, the properties would not change. これらの値は、既存のデータ型に変換されます。These values can be converted to existing data types:

サンプル レコード 2

一方、下記のようなエントリを送信する場合、Log Analytics によって、boolean_d および string_d という新しいプロパティが作成されます。But, if you then made this next submission, Log Analytics would create the new properties boolean_d and string_d. これらの値は、既存のデータ型に変換できません。These values can't be converted:

サンプル レコード 3

次に、レコード型が作成される前に、下記のようなエントリを送信する場合、Log Analytics によって number_sboolean_sstring_s という 3 つのプロパティを含むレコードが作成されます。If you then submitted the following entry, before the record type was created, Log Analytics would create a record with three properties, number_s, boolean_s, and string_s. このエントリでは、初期の値はそれぞれ文字列の形式で指定されています。In this entry, each of the initial values is formatted as a string:

サンプル レコード 4

データ制限Data limits

Log Analytics データ収集 API に送信するデータに関して制約がいくつかあります。There are some constraints around the data posted to the Log Analytics Data collection API.

  • Log Analytics データ コレクター API に送信するデータの上限は 30 MB です。Maximum of 30 MB per post to Log Analytics Data Collector API. これは 1 回の送信のサイズ制限です。This is a size limit for a single post. 1 回の送信のデータ サイズが 30 MB を超える場合は、データを小さなサイズのチャンクに分割し、それらを同時に送信する必要があります。If the data from a single post that exceeds 30 MB, you should split the data up to smaller sized chunks and send them concurrently.
  • フィールド値の上限は 32 KB です。Maximum of 32 KB limit for field values. フィールド値が 32 KB を超えた場合、データは切り捨てられます。If the field value is greater than 32 KB, the data will be truncated.
  • 特定の種類のフィールドの推奨される最大数は 50 個です。Recommended maximum number of fields for a given type is 50. これは、使いやすさと検索エクスペリエンスの観点からの実質的な制限です。This is a practical limit from a usability and search experience perspective.

リターン コードReturn codes

HTTP 状態コード 200 は、要求が処理するために受信されたことを意味します。The HTTP status code 200 means that the request has been received for processing. これは、操作が正常に完了したことを示します。This indicates that the operation completed successfully.

次の表に、サービスから返される可能性のあるすべての状態コードの一覧を示します。This table lists the complete set of status codes that the service might return:

コードCode 状態Status エラー コードError code 説明Description
200200 OKOK 要求は正常に受け入れられました。The request was successfully accepted.
400400 正しくない要求Bad request InactiveCustomerInactiveCustomer このワークスペースは閉じられています。The workspace has been closed.
400400 正しくない要求Bad request InvalidApiVersionInvalidApiVersion 指定した API のバージョンがサービスに認識されませんでした。The API version that you specified was not recognized by the service.
400400 正しくない要求Bad request InvalidCustomerIdInvalidCustomerId 指定したワークスペース ID が無効です。The workspace ID specified is invalid.
400400 正しくない要求Bad request InvalidDataFormatInvalidDataFormat 無効な JSON が送信されました。Invalid JSON was submitted. 応答本文に、このエラーを解決する方法に関する詳細が含まれていることがあります。The response body might contain more information about how to resolve the error.
400400 正しくない要求Bad request InvalidLogTypeInvalidLogType 指定したログの種類に、特殊文字または数字が含まれていました。The log type specified contained special characters or numerics.
400400 正しくない要求Bad request MissingApiVersionMissingApiVersion API のバージョンが指定されていませんでした。The API version wasn’t specified.
400400 正しくない要求Bad request MissingContentTypeMissingContentType コンテンツの種類が指定されていませんでした。The content type wasn’t specified.
400400 正しくない要求Bad request MissingLogTypeMissingLogType 必須の値であるログの種類が指定されていませんでした。The required value log type wasn’t specified.
400400 正しくない要求Bad request UnsupportedContentTypeUnsupportedContentType コンテンツの種類が application/json に設定されていませんでした。The content type was not set to application/json.
403403 許可されていませんForbidden InvalidAuthorizationInvalidAuthorization サービスで要求を認証できませんでした。The service failed to authenticate the request. ワークスペース ID と接続キーが有効であるかどうかを確認してください。Verify that the workspace ID and connection key are valid.
404404 見つかりませんNot Found 指定された URL が正しくないか、要求が大きすぎます。Either the URL provided is incorrect, or the request is too large.
429429 要求が多すぎますToo Many Requests サービスはアカウントの大量のデータを処理しています。The service is experiencing a high volume of data from your account. 後で要求を再試行してください。Please retry the request later.
500500 内部サーバー エラーInternal Server Error UnspecifiedErrorUnspecifiedError サービスで内部エラーが発生しました。The service encountered an internal error. 要求を再試行してください。Please retry the request.
503503 サービス利用不可Service Unavailable ServiceUnavailableServiceUnavailable サービスは現在、要求を受信できません。The service currently is unavailable to receive requests. 要求を再試行してください。Please retry your request.

データのクエリを実行するQuery data

Log Analytics HTTP データ コレクター API によって送信されたデータを照会するには、Type (指定した LogType の値の末尾に _CL を追加したもの) でレコードを検索します。To query data submitted by the Log Analytics HTTP Data Collector API, search for records with Type that is equal to the LogType value that you specified, appended with _CL. たとえば、MyCustomLog を使用した場合、Type=MyCustomLog_CL のすべてのレコードが返されます。For example, if you used MyCustomLog, then you'd return all records with Type=MyCustomLog_CL.

注意

ワークスペースが新しい Log Analytics クエリ言語にアップグレードされている場合は、上記のクエリによって次が変更されます。If your workspace has been upgraded to the new Log Analytics query language, then the above query would change to the following.

MyCustomLog_CL

サンプルの要求Sample requests

次のセクションでは、さまざまなプログラミング言語を使用して Log Analytics HTTP データ コレクター API にデータを送信する方法のサンプルを示します。In the next sections, you'll find samples of how to submit data to the Log Analytics HTTP Data Collector API by using different programming languages.

サンプルごとに、次の手順を実行して承認ヘッダーの変数を設定します。For each sample, do these steps to set the variables for the authorization header:

  1. Azure Portal で、Log Analytics ワークスペースを検索します。In the Azure portal, locate your Log Analytics workspace.
  2. [詳細設定] を選択し、[接続されたソース] を選択します。Select Advanced Settings and then Connected Sources.
  3. [ワークスペース ID] の右側にあるコピー アイコンを選択し、Customer ID 変数の値としてその ID を貼り付けます。To the right of Workspace ID, select the copy icon, and then paste the ID as the value of the Customer ID variable.
  4. [主キー] の右側にあるコピー アイコンを選択し、Shared Key 変数の値としてその ID を貼り付けます。To the right of Primary Key, select the copy icon, and then paste the ID as the value of the Shared Key variable.

別の方法として、ログの種類および JSON データの変数を変更することもできます。Alternatively, you can change the variables for the log type and JSON data.

PowerShell のサンプルPowerShell sample

# 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"

# Specify a field with the created time for the records
$TimeStampField = "DateValue"


# Create two records with the same set of properties to create
$json = @"
[{  "StringValue": "MyString1",
    "NumberValue": 42,
    "BooleanValue": true,
    "DateValue": "2016-05-12T20:00:00.625Z",
    "GUIDValue": "9909ED01-A74C-4874-8ABF-D2678E3AE23D"
},
{   "StringValue": "MyString2",
    "NumberValue": 43,
    "BooleanValue": false,
    "DateValue": "2016-05-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 `
        -fileName $fileName `
        -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  

C# のサンプルC# sample

using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace OIAPIExample
{
    class ApiExample
    {
        // An example JSON object, with key/value pairs
        static string json = @"[{""DemoField1"":""DemoValue1"",""DemoField2"":""DemoValue2""},{""DemoField3"":""DemoValue3"",""DemoField4"":""DemoValue4""}]";

        // Update customerId to your Log Analytics workspace ID
        static string customerId = "xxxxxxxx-xxx-xxx-xxx-xxxxxxxxxxxx";

        // For sharedKey, use either the primary or the secondary Connected Sources client authentication key   
        static string sharedKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

        // LogName is name of the event type that is being submitted to Log Analytics
        static string LogName = "DemoExample";

        // You can use an optional field to specify the timestamp from the data. If the time field is not specified, Log Analytics assumes the time is the message ingestion time
        static string TimeStampField = "";

        static void Main()
        {
            // Create a hash for the API signature
            var datestring = DateTime.UtcNow.ToString("r");
            var jsonBytes = Encoding.UTF8.GetBytes(json);
            string stringToHash = "POST\n" + jsonBytes.Length + "\napplication/json\n" + "x-ms-date:" + datestring + "\n/api/logs";
            string hashedString = BuildSignature(stringToHash, sharedKey);
            string signature = "SharedKey " + customerId + ":" + hashedString;

            PostData(signature, datestring, json);
        }

        // Build the API signature
        public static string BuildSignature(string message, string secret)
        {
            var encoding = new System.Text.ASCIIEncoding();
            byte[] keyByte = Convert.FromBase64String(secret);
            byte[] messageBytes = encoding.GetBytes(message);
            using (var hmacsha256 = new HMACSHA256(keyByte))
            {
                byte[] hash = hmacsha256.ComputeHash(messageBytes);
                return Convert.ToBase64String(hash);
            }
        }

        // Send a request to the POST API endpoint
        public static void PostData(string signature, string date, string json)
        {
            try
            {
                string url = "https://" + customerId + ".ods.opinsights.azure.com/api/logs?api-version=2016-04-01";

                System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
                client.DefaultRequestHeaders.Add("Accept", "application/json");
                client.DefaultRequestHeaders.Add("Log-Type", LogName);
                client.DefaultRequestHeaders.Add("Authorization", signature);
                client.DefaultRequestHeaders.Add("x-ms-date", date);
                client.DefaultRequestHeaders.Add("time-generated-field", TimeStampField);

                System.Net.Http.HttpContent httpContent = new StringContent(json, Encoding.UTF8);
                httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                Task<System.Net.Http.HttpResponseMessage> response = client.PostAsync(new Uri(url), httpContent);

                System.Net.Http.HttpContent responseContent = response.Result.Content;
                string result = responseContent.ReadAsStringAsync().Result;
                Console.WriteLine("Return Result: " + result);
            }
            catch (Exception excep)
            {
                Console.WriteLine("API Post Exception: " + excep.Message);
            }
        }
    }
}

Python のサンプルPython sample

import json
import requests
import datetime
import hashlib
import hmac
import base64

# Update the customer ID to your Log Analytics workspace ID
customer_id = 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'

# For the shared key, use either the primary or the secondary Connected Sources client authentication key   
shared_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# The log type is the name of the event that is being submitted
log_type = 'WebMonitorTest'

# An example JSON web monitor object
json_data = [{
   "slot_ID": 12345,
    "ID": "5cdad72f-c848-4df0-8aaa-ffe033e75d57",
    "availability_Value": 100,
    "performance_Value": 6.954,
    "measurement_Name": "last_one_hour",
    "duration": 3600,
    "warning_Threshold": 0,
    "critical_Threshold": 0,
    "IsActive": "true"
},
{   
    "slot_ID": 67890,
    "ID": "b6bee458-fb65-492e-996d-61c4d7fbb942",
    "availability_Value": 100,
    "performance_Value": 3.379,
    "measurement_Name": "last_one_hour",
    "duration": 3600,
    "warning_Threshold": 0,
    "critical_Threshold": 0,
    "IsActive": "false"
}]
body = json.dumps(json_data)

#####################
######Functions######  
#####################

# Build the API signature
def build_signature(customer_id, shared_key, date, content_length, method, content_type, resource):
    x_headers = 'x-ms-date:' + date
    string_to_hash = method + "\n" + str(content_length) + "\n" + content_type + "\n" + x_headers + "\n" + resource
    bytes_to_hash = bytes(string_to_hash).encode('utf-8')  
    decoded_key = base64.b64decode(shared_key)
    encoded_hash = base64.b64encode(hmac.new(decoded_key, bytes_to_hash, digestmod=hashlib.sha256).digest())
    authorization = "SharedKey {}:{}".format(customer_id,encoded_hash)
    return authorization

# Build and send a request to the POST API
def post_data(customer_id, shared_key, body, log_type):
    method = 'POST'
    content_type = 'application/json'
    resource = '/api/logs'
    rfc1123date = datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
    content_length = len(body)
    signature = build_signature(customer_id, shared_key, rfc1123date, content_length, method, content_type, resource)
    uri = 'https://' + customer_id + '.ods.opinsights.azure.com' + resource + '?api-version=2016-04-01'

    headers = {
        'content-type': content_type,
        'Authorization': signature,
        'Log-Type': log_type,
        'x-ms-date': rfc1123date
    }

    response = requests.post(uri,data=body, headers=headers)
    if (response.status_code >= 200 and response.status_code <= 299):
        print 'Accepted'
    else:
        print "Response code: {}".format(response.status_code)

post_data(customer_id, shared_key, body, log_type)

次の手順Next steps

  • Log Analytics リポジトリから Log Search API を使用してデータを取得するUse the Log Search API to retrieve data from the Log Analytics repository.