この記事では、Azure Stream Analytics入力接続に関する一般的な問題、それらの問題のトラブルシューティング方法、および修正方法について説明します。 対象となる問題には、形式が正しくないイベントからの逆シリアル化エラー、Event Hubs レシーバーの制限、パーティション数の変更、IoT Hubリーダーの制限などがあります。
多くのトラブルシューティング手順では、Stream Analytics ジョブのリソース ログを有効にする必要があります。 リソース ログが有効になっていない場合は、「リソース ログを使用したAzure Stream Analyticsのトラブルシューティング」を参照してください。
ジョブが入力イベントを受信しない
入力と出力への接続を確認します。 入力と出力ごとに [ テスト接続 ] ボタンを使用します。
入力データを調べます。
各入力に [ サンプル データ] ボタンを使用します。 入力サンプル データをダウンロードします。
サンプル データを調べて、スキーマと データ型を理解します。
Azure Event Hubs のメトリックを確認して、イベントが送信されていることを確認してください。 Event Hubs がメッセージを受信している場合、メッセージ メトリックは 0 より大きくする必要があります。
入力プレビューで時間範囲を選択したことを確認します。 [ 時間範囲の選択] を選択し、クエリをテストする前にサンプル期間を入力します。
Important
ネットワークが挿入されていないAzure Stream Analyticsジョブの場合は、Stream Analytics から送信される接続のソース IP アドレスに依存しないでください。 パブリック IP またはプライベート IP は、随時発生するサービス インフラストラクチャの操作に応じて異なります。
入力イベントの形式が正しくないと、逆シリアル化エラーが発生する
逆シリアル化の問題は、Stream Analytics ジョブの入力ストリームに形式が正しくないメッセージが含まれている場合に発生します。 たとえば、JSON オブジェクトにかっこや中かっこが見つからない場合や、時刻フィールドのタイムスタンプ形式が正しくない場合、メッセージの形式が正しくない可能性があります。
Stream Analytics ジョブは、入力から不正な形式のメッセージを受信すると、メッセージを削除し、警告を通知します。 Stream Analytics ジョブの [入力] タイルに警告記号が表示されます。 警告記号は、ジョブが実行状態である限り存在します。
リソース ログを有効にして、エラーの詳細と、エラーの原因となったメッセージ (ペイロード) を表示します。 逆シリアル化エラーが発生する理由は複数あります。 特定の逆シリアル化エラーの詳細については、「 入力データ エラー」を参照してください。 リソース ログが有効になっていない場合は、Azure ポータルに簡単な通知が表示されます。
メッセージ ペイロードが 32 KB を超える場合、またはバイナリ形式の場合は、GitHub サンプル リポジトリで使用可能なCheckMalformedEvents.cs コードを実行します。 このコードは、パーティション ID オフセットを読み取り、そのオフセットにあるデータを出力します。
入力逆シリアル化エラーのその他の一般的な理由は次のとおりです。
-
9223372036854775807より大きい値を持つ整数列。 - オブジェクトの配列または行区切りオブジェクトの代わりに文字列。 有効な例:
[{'a':1}]。 無効な例:"'a' :1"。 - ジョブの入力として使用される、Avro 形式の Event Hubs キャプチャ Blob。
- 大文字と小文字の違いしかない、単一の入力イベント内の 2 つの列 (例:
column1とCOLUMN1)。
イベント ハブのパーティション数の変更
Stream Analytics ジョブの実行中にイベント ハブのパーティション数が変更されると、ジョブは次のエラーで失敗します。
Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException
この問題を解決するには、Stream Analytics ジョブを停止して再起動し、新しいパーティション数を検出できるようにします。
ジョブが 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_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1,
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1,
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1,
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1,
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1.
Note
ジョブのアップグレード中に閲覧者の数が変更されると、監査ログに一時的な警告が書き込まれます。 Stream Analytics ジョブは、これらの一時的な問題から自動的に復旧します。
Event Hubs インスタンスに新しいコンシューマー グループを追加するには、次の手順に従います。
Azure Portal にサインインします。
イベント ハブを見つけてください。
Entities 見出しの下で、Event Hubs を選択します。
名前でイベント ハブを選択します。
[ Event Hubs インスタンス] ページの [ エンティティ ] 見出しで、[ コンシューマー グループ] を選択します。 $Defaultという名前のコンシューマー グループが一覧表示されます。
[ + コンシューマー グループ ] を選択して、新しいコンシューマー グループを追加します。
イベント ハブを指すように Stream Analytics ジョブで入力を作成したときに、そこでコンシューマー グループを指定しました。 コンシューマー グループが指定されていない場合、Event Hubs は $Default を使用します。 コンシューマー グループを作成したら、Stream Analytics ジョブのイベント ハブ入力を編集し、新しいコンシューマー グループの名前を指定します。
パーティションあたりの閲覧者数が Event Hubs の制限を超えている
ストリーミング クエリ構文がイベント ハブ入力に同じリソースを複数回参照している場合、ジョブ エンジンは同じコンシューマー グループのクエリごとに複数のリーダーを使用できます。 同じコンシューマー グループへの参照が多すぎる場合、ジョブが上限の 5 件を超え、エラーが発生する可能性があります。 このような状況では、複数のコンシューマー グループ間で複数の入力を使用してさらに分割できます。
パーティションあたりのリーダー数が Event Hubs の制限である 5 を超えるシナリオは次のとおりです。
複数の
SELECTステートメント:SELECTイベント ハブ入力を参照する複数の ステートメントを使用する場合、各SELECTステートメントによって新しいレシーバーが作成されます。UNION:UNIONを使用する場合、 同じ イベント ハブとコンシューマー グループを参照する複数の入力を持つことができます。SELF JOIN:SELF JOIN操作を使用すると、 同じ イベント ハブを複数回参照できます。
次のベスト プラクティスは、パーティションあたりのリーダー数が Event Hubs の上限 5 を超えるシナリオを軽減するのに役立ちます。
WITH 句を使用してクエリを複数のステップに分割する
WITH句は、クエリ内のFROM句が参照できる一時的な名前付き結果セットを指定します。
WITH句は、1 つの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 クエリの例では、 InputOne と InputTwo は同じ 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 ページを参照してください。