入力接続のトラブルシューティング

この記事では、Azure Stream Analytics の入力接続に関する一般的な問題、それらの問題をトラブルシューティングする方法、および問題を修正する方法について説明します。

多くのトラブルシューティングの手順では、Stream Analytics ジョブに対してリソース ログをオンにする必要があります。 リソース ログがオンになっていない場合は、「リソース ログを使用した Azure Stream Analytics のトラブルシューティング」を参照してください。

ジョブによって受信されない入力イベント

  1. 入力と出力への接続を確認します。 各入力と出力の [接続のテスト] ボタンを使用します。

  2. 入力データを確認する。

    1. 各入力の [サンプル データ] ボタンを使用します。 入力のサンプル データをダウンロードします。

    2. サンプル データを調べて、スキーマとデータ型を理解します。

    3. Azure Event Hubs メトリックを確認して、イベントが送信されていることを確認します。 Event Hubs がメッセージを受信している場合、メッセージ メトリックは 0 より大きい必要があります。

  3. 入力プレビューで時間の範囲を選択したことを確認します。 [時間範囲の選択] を選択し、クエリをテストする前にサンプル期間を入力します。

重要

ネットワークに挿入されていない Azure Stream Analytics ジョブの場合は、いかなる方法でも Stream Analytics を発信元とする接続の送信元 IP アドレスに依存しないようにしてください。 それらは、随時発生するサービス インフラストラクチャの操作によって、パブリック IP である可能性もプライベート IP である可能性もあります。

形式が正しくない入力イベントが原因の逆シリアル化エラー

Stream Analytics ジョブの入力ストリームに間違った形式のメッセージが含まれていると、逆シリアル化の問題が発生します。 たとえば、JSON オブジェクトでかっこや中かっこが欠落している場合や時間フィールドのタイム スタンプ形式が正しくない場合は、間違った形式のメッセージが発生する可能性があります。

Stream Analytics ジョブは、入力から間違った形式のメッセージを受信すると、メッセージを削除し、警告で通知します。 警告記号は、Stream Analytics ジョブの [入力] タイルの上に表示されます。 警告記号は、ジョブが実行状態である限り存在します。

Screenshot that shows the Inputs tile for Azure Stream Analytics.

リソース ログをオンにして、エラーの詳細とエラーの原因となったメッセージ (ペイロード) を表示します。 逆シリアル化エラーが発生する理由は複数あります。 特定の逆シリアル化エラーの詳細については、「入力データ エラー」を参照してください。 リソース ログがオンになっていない場合は、Azure portal に簡単な通知が表示されます。

Screenshot that shows a warning notification about input details.

メッセージ ペイロードが 32 KB より大きいかバイナリ形式の場合は、GitHub サンプル リポジトリから入手できる CheckMalformedEvents.cs コードを実行します。 このコードは、パーティション ID オフセットを読み取り、そのオフセットにあるデータを出力します。

入力逆シリアル化エラーが発生するその他の一般的な理由は次のとおりです。

  • 9223372036854775807 より大きい値を持つ整数列。
  • オブジェクトまたは行区切りオブジェクトの配列の代わりに使用されている文字列。 有効な例: *[{'a':1}]*。 無効な例: *"'a' :1"*
  • ジョブの入力として Avro 形式の Event Hubs キャプチャ BLOB を使用している。
  • 大文字と小文字だけが異なる 1 つの入力イベントに 2 つの列があること。 例: *column1**COLUMN1*

パーティション数の変更

イベント ハブのパーティション数は変わる可能性があります。 イベント ハブのパーティション数が変わった場合は、Stream Analytics ジョブを停止し、再開する必要があります。

ジョブの実行中にイベント ハブのパーティション数が変わると、次のエラーが表示されます。 Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException

ジョブが Event Hubs レシーバーの最大数を超えている

Event Hubs を使用する際のベスト プラクティスは、ジョブの拡張性のために複数のコンシューマー グループを使用することです。 特定の入力に関する Stream Analytics ジョブのリーダーの数は、1 つのコンシューマー グループ内のリーダーの数に影響します。

レシーバーの正確な数は、スケールアウト トポロジ ロジックの内部実装の詳細に基づいて決まります。 数は外部には公開されません。 リーダーの数は、ジョブの開始時またはアップグレード時に変わる可能性があります。

レシーバー数が最大数を超えると、次のエラー メッセージが表示されます。 メッセージには、コンシューマー グループの Event Hubs に対して行われた既存の接続の一覧が含まれています。 タグ AzureStreamAnalytics は、接続が Azure ストリーミング サービスからのものであることを示します。

The streaming job failed: Stream Analytics job has validation errors: Job will exceed the maximum amount of Event Hubs Receivers.

The following information may be helpful in identifying the connected receivers: Exceeded the maximum number of allowed receivers per partition in a consumer group which is 5. List of connected receivers – 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1, 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1, 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1, 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1, 
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1.

Note

ジョブのアップグレード中にリーダーの数が変更されると、一時的な警告が監査ログに書き込まれます。 Stream Analytics ジョブは、これらの一時的な問題から自動的に回復します。

Event Hubs インスタンスに新しいコンシューマー グループを追加するには、次の手順に従います。

  1. Azure portal にサインインします。

  2. イベント ハブのある場所を探します。

  3. Entities 見出しの下で [Event Hubs] を選択します。

  4. 名前でイベント ハブを選択します。

  5. Event Hubs インスタンス ページの Entities 見出しの部分から コンシューマー グループ を選択します。 $Default という名前のコンシューマー グループが表示されます。

  6. [+ コンシューマー グループ] を選択し、新しいコンシューマー グループを追加します。

    Screenshot that shows the button for adding a consumer group in Event Hubs.

  7. Stream Analytics ジョブで入力を作成し、イベント ハブをポイントすると、そこにコンシューマー グループが指定されます。 コンシューマー グループが指定されていない場合、Event Hubs は $Default を使用します。 コンシューマー グループを作成したら、Stream Analytics ジョブのイベント ハブ入力を編集し、新しいコンシューマー グループの名前を指定します。

パーティションあたりのリーダー数が Event Hubs の上限を上回る

ストリーミング クエリ構文でイベント ハブ入力の同じリソースを複数回参照している場合、ジョブ エンジンは、その同じコンシューマー グループからクエリごとに複数のリーダーを使用することができます。 同じコンシューマー グループに対する参照回数が多すぎると、ジョブが上限の 5 つを超えてエラーになることがあります。 その場合は、複数の入力を複数のコンシューマー グループにまたがって使用することで、さらに分割することができます。

パーティションあたりのリーダーの数が Event Hubs の上限である 5 つを上回るシナリオとしては、次のものがあります。

  • 複数の SELECT ステートメント: 同じイベント ハブ入力を参照する複数の SELECT ステートメントを使用する場合、各 SELECT ステートメントによって新しいレシーバーが作成されます。

  • UNION: UNION を使用する場合、同じイベント ハブとコンシューマー グループを参照する複数の入力を使用できます。

  • SELF JOIN: SELF JOIN 操作を使用する場合、同じイベント ハブを複数回参照できます。

次のベスト プラクティスは、パーティションあたりのリーダーの数が 5 つという Event Hubs の制限を超えるシナリオに対処するのに役立ちます。

WITH 句を使用してクエリを複数のステップに分割する

WITH 句を使用すると、クエリ内で FROM 句によって参照できる一時的な名前付き結果セットを指定できます。 WITH 句は、単一の SELECT ステートメントの実行スコープで定義します。

たとえば、次のクエリの代わりに、

SELECT foo 
INTO output1
FROM inputEventHub

SELECT bar
INTO output2
FROM inputEventHub 
…

次のクエリを使用します。

WITH data AS (
   SELECT * FROM inputEventHub
)

SELECT foo
INTO output1
FROM data

SELECT bar
INTO output2
FROM data
…

入力が異なるコンシューマー グループにバインドされるようにする

3 つ以上の入力が同じ Event Hubs コンシューマー グループに接続されるクエリでは、別のコンシューマー グループを作成します。 このタスクでは、追加の Stream Analytics 入力を作成する必要があります。

コンシューマー グループが異なる個別の入力を作成する

同じイベント ハブに対して、異なるコンシューマー グループを使用して個別の入力を作成できます。 次の UNION クエリは、InputOneInputTwo が同じ Event Hubs ソースを参照している例です。 クエリでは、個別の入力に異なるコンシューマー グループを持たせることができます。 UNION クエリは 1 つの例にすぎません。

WITH 
DataOne AS 
(
SELECT * FROM InputOne 
),

DataTwo AS 
(
SELECT * FROM InputTwo 
),

SELECT foo FROM DataOne
UNION 
SELECT foo FROM DataTwo

パーティションあたりのリーダー数が IoT Hub の上限を上回る

Stream Analytics ジョブは、Azure IoT Hub に組み込まれた Event Hubs 互換エンドポイントを使用して IoT Hub に接続し、イベントを読み取ります。 パーティションあたりのリーダー数が IoT Hub の上限を上回る場合は、Event Hubs での解決策を使用して問題を解決できます。 組み込みエンドポイントのコンシューマー グループは、IoT Hub ポータルのエンドポイント セッションまたは IoT Hub SDK を使用して作成できます。

ヘルプを参照する

詳細については、Azure Stream Analytics に関する Microsoft Q&A ページを参照してください。

次のステップ