Jaa


[Stream Analytics] 不正な JSON 形式を送った場合に発生するエラーについて

松本 奈紗
Support Engineer

 

皆さん、こんにちは。 BI Data Platform サポートチームの松本奈紗です。
今回の投稿では、Stream Analyticsの環境において、上手くストリーミングデータが出力に受け渡されない場合、参考となる情報をご紹介いたします。
日々、弊社には多くのお問い合わせを頂くわけですが、その中でも Stream Analytics で以下のようなエラーが発生した、といったご相談をしばしばいただきます。

 

エラーメッセージ
Could not deserialize the input event(s) from resource
'xxxxx' as Json. Some possible reasons: 1) Malformed events 2) Input source configured with incorrect serialization format

 

このメッセージだけですとやはり、何が問題か判断がつきにくいもあると思いますので、今回の投稿ではこの点についてフォーカスしてみたいと思います。
結論から申し上げますと、このエラーはStream Analyticsの環境において、上手くストリーミングデータが出力に受け渡されない事を意味しています。
考えられる原因として、不正な JSON 形式が送付されている可能性が高いため、インプットとなるデータの精査が必要になります。
下記情報と共に、事象の切り分けにあたって少しでも参考となりましたら幸いです。

 

参考情報『間違った形式の入力イベントをトラブルシューティングする』
https://docs.microsoft.com/ja-jp/azure/stream-analytics/stream-analytics-common-troubleshooting-issues#troubleshoot-malformed-input-events

 

■現象
以下のようにStream Analyticsのジョブトポロジの「入力」の「ストリーム入力の追加」においてイベントシリアル化形式としてJSONを選択した場合を想定します。

例えば以下のようなJSONとして正しくないもの(項目"is_event_logged"に値が存在しない)が来たと想定します。

例)
 {
"message_id": 18456,
"language_id": 1033,
"severity": 14,
"is_event_logged": ,
"text": "Login failed for user '%.*ls'.%.*ls%.*ls"
}

 

JSONの正しいとはなんであるか、は規格の説明になるので今回は割愛しますが、上記については少なくとも値が入っているところに値がない事で不正なJSONといえます。
では、上記の意図的に不正にした JSON ファイルを元にStream Analyticsを利用して、不正な JSON 形式を送ってみましょう。
Stream Analytics ジョブを開始後、しばらくすると、入力の右側のオレンジ色のアラートマークが表示され、それをクリックすると以下のエラーが表示されます。

 

エラーメッセージ

Could not deserialize the input event(s) from resource
'xxxxx' as Json. Some possible reasons: 1) Malformed events 2) Input source configured with incorrect serialization format

 

■原因
このエラーは Stream Analytics 側で入力データ形式が不正な形式であるときにエラーが発生します。
JSON形式で来たものの、JSONとして正しくない形式で来ている場合や、JSONをInputと指定しながらも、実際にはファイルがCSVで配置された場合などもこのエラーになりえます。

 

■対処策
いずれにしても Stream Analytics としてはインプットデータを正しく評価できない事で問題が発生しています。
以下のような点がないかを確認頂く事になります。

  • JSON ファイル自体のフォーマットが正しいかどうか
  • 入力データ形式とイベントシリアル化形式の設定(JSON/Avro/CSV)の設定が正しい(両者が一致しているか)かどうか

なお、EventHub などが Input データになる場合、BLOB Input のように単純に中身を開いてみるといった事はできません。
その場合には下記ドキュメントに存在している CheckMalformedEvents.cs などを利用し、Input 側のデータを確認していただく必要があります。

参考情報『間違った形式の入力イベントをトラブルシューティングする』
https://docs.microsoft.com/ja-jp/azure/stream-analytics/stream-analytics-common-troubleshooting-issues#troubleshoot-malformed-input-events