次の方法で共有


Logs ingestion API を使用して Azure Monitor にデータを送信するサンプル コード

この記事では、Logs ingestion API を使用したサンプル コードについて説明します。 各サンプルでは、コードを実行する前に、次のコンポーネントを作成する必要があります。 これらの各サンプルをサポートするように構成されたこれらのコンポーネントを作成する完全なチュートリアルについては、「チュートリアル: Logs ingestion API (Resource Manager テンプレート) を使って Azure Monitor にデータを送信する」を参照してください。

  • Log Analytics ワークスペースのカスタム テーブル
  • データをターゲット テーブルに転送するためのデータ収集ルール (DCR)
  • DCR にアクセスできる Microsoft Entra アプリケーション
  • プライベート リンクを使用している場合は、データ収集エンドポイント (DCE) を使用します。 それ以外の場合は、DCR ログ エンドポイントを使用します。

サンプル コード

次のスクリプトでは、.NET 用 Azure Monitor Ingestion クライアント ライブラリを使用しています。

  1. Azure Monitor Ingestion クライアント ライブラリと Azure Identity ライブラリをインストールします。 このサンプルで使用される認証には、Azure Identity ライブラリが必要です。

    dotnet add package Azure.Identity
    dotnet add package Azure.Monitor.Ingestion
    
  2. Microsoft Entra アプリケーションの値を使用して、次の環境変数を作成します。 これらの値は、Azure Identity ライブラリの DefaultAzureCredential で使用されます。

    • AZURE_TENANT_ID
    • AZURE_CLIENT_ID
    • AZURE_CLIENT_SECRET
  3. 次のサンプル コードの変数を、DCR の値に置き換えます。 サンプル データも独自のものに置き換えることをお勧めします。

    using Azure;
    using Azure.Core;
    using Azure.Identity;
    using Azure.Monitor.Ingestion;
    
    // Initialize variables
    var endpoint = new Uri("https://my-url.monitor.azure.com");
    var ruleId = "dcr-00000000000000000000000000000000";
    var streamName = "Custom-MyTableRawData";
    
    // Create credential and client
    var credential = new DefaultAzureCredential();
    LogsIngestionClient client = new(endpoint, credential);
    
    DateTimeOffset currentTime = DateTimeOffset.UtcNow;
    
    // Use BinaryData to serialize instances of an anonymous type into JSON
    BinaryData data = BinaryData.FromObjectAsJson(
        new[] {
            new
            {
                Time = currentTime,
                Computer = "Computer1",
                AdditionalContext = new
                {
                    InstanceName = "user1",
                    TimeZone = "Pacific Time",
                    Level = 4,
                    CounterName = "AppMetric1",
                    CounterValue = 15.3
                }
            },
            new
            {
                Time = currentTime,
                Computer = "Computer2",
                AdditionalContext = new
                {
                    InstanceName = "user2",
                    TimeZone = "Central Time",
                    Level = 3,
                    CounterName = "AppMetric1",
                    CounterValue = 23.5
                }
            },
        });
    
    // Upload logs
    try
    {
        var response = await client.UploadAsync(ruleId, streamName, RequestContent.Create(data)).ConfigureAwait(false);
        if (response.IsError)
        {
            throw new Exception(response.ToString());
        }
    
        Console.WriteLine("Log upload completed using content upload");
    }
    catch (Exception ex)
    {
        Console.WriteLine("Upload failed with Exception: " + ex.Message);
    }
    
    // Logs can also be uploaded in a List
    var entries = new List<object>();
    for (int i = 0; i < 10; i++)
    {
        entries.Add(
            new
            {
                Time = currentTime,
                Computer = "Computer" + i.ToString(),
                AdditionalContext = new
                {
                    InstanceName = "user" + i.ToString(),
                    TimeZone = "Central Time",
                    Level = 3,
                    CounterName = "AppMetric1" + i.ToString(),
                    CounterValue = i
                }
            }
        );
    }
    
    // Make the request
    try
    {
        var response = await client.UploadAsync(ruleId, streamName, entries).ConfigureAwait(false);
        if (response.IsError)
        {
            throw new Exception(response.ToString());
        }
    
        Console.WriteLine("Log upload completed using list of entries");
    }
    catch (Exception ex)
    {
        Console.WriteLine("Upload failed with Exception: " + ex.Message);
    }
    
  4. コードを実行します。データは数分以内に Log Analytics ワークスペースに到着するはずです。

トラブルシューティング

このセクションでは、発生する可能性があるさまざまなエラー状態とその修正方法について説明します。

スクリプトでエラー コード 403 が返される

DCR に対する適切なアクセス許可がアプリケーションにあることを確認します。 また、アクセス許可が反映されるまでに最大 30 分待つ必要がある場合もあります。

スクリプトで、エラー コード 413、または TimeoutExpired の警告と応答の ReadyBody_ClientConnectionAbort というメッセージが返される

メッセージが大きすぎます。 最大メッセージ サイズは、1 回の呼び出しで現在 1 MB です。

スクリプトでエラー コード 429 が返される

API の制限を超えました。 現在、設定されている制限は、圧縮データと非圧縮データの両方について 500 MB/分と 300,000 要求/分です。 応答の Retry-After ヘッダーに示されている期間の後に再試行します。

スクリプトでエラー コード 503 が返される

DCR に対する適切なアクセス許可がアプリケーションにあることを確認します。 また、アクセス許可が反映されるまでに最大 30 分待つ必要がある場合もあります。

エラーは発生しないが、データがワークスペースに表示されない

特にデータが特定のテーブルに初めて送信される場合は、データが取り込まれるまでに時間がかかることがあります。 15 分を超えることはありません。

Log Analytics の IntelliSense で新しいテーブルが認識されない

IntelliSense を動作させるキャッシュは、更新に最大 24 時間かかる場合があります。

次のステップ