次の方法で共有


Azure IoT Hub を監視する

この記事では、次の内容について説明します。

  • このサービスに対して収集できる監視データの種類。
  • そのデータを分析する方法。

Note

このサービスや Azure Monitor を既に使い慣れていて、監視データの分析方法だけを確認したい場合は、この記事で後述する分析に関するセクションをご覧ください。

Azure リソースに依存するクリティカルなアプリケーションやビジネス プロセスがある場合は、システムを監視し、そのアラートを受け取る必要があります。 Azure Monitor サービスでは、システムのすべてのコンポーネントからメトリックとログを収集して集計します。 Azure Monitor を使用すると、可用性、パフォーマンス、回復性を視覚化し、問題に関する通知を受け取ることができます。 Azure portal、PowerShell、Azure CLI、REST API、またはクライアント ライブラリは、監視データの設定および表示に使用できます。

Event Grid を使用したデバイスごとの切断の監視

Azure Monitor には "接続デバイス" というメトリックがあり、それを使って IoT Hub に接続されているデバイスの数を監視できます。 このメトリックは、接続されているデバイスの数がしきい値を下回るとアラートをトリガーします。 また Azure Monitor は、デバイスの接続、切断、および接続エラーの監視に使用できる接続カテゴリにもイベントを出力します。 これらのイベントで十分なシナリオもあるかもしれませんが、Azure Event Grid で提供されている低遅延のデバイスごとの監視ソリューションを使うと、重要なデバイスとインフラストラクチャのデバイス接続を追跡できます。

Event Grid を使用すると、IoT Hub DeviceConnectedDeviceDisconnected イベントをサブスクライブして、アラートをトリガーし、デバイスの接続状態を監視することができます。 Event Grid を使用すると、イベント待機時間が Azure Monitor よりもはるかに短くなり、接続されているデバイスのすべてではなく、デバイスごとに監視できます。 これらの要因により、Event Grid は重要なデバイスとインフラストラクチャの接続を監視するための推奨される方法となっています。 運用環境では、デバイスの接続の監視には Event Grid を使用することを強くお勧めします。

Event Grid と Azure Monitor を使用したデバイス接続の監視の詳細については、Azure IoT Hub へのデバイス接続の監視、診断、およびトラブルシューティングに関する記事を参照してください。

リソースの種類

Azure では、リソースの種類と ID の概念を使用して、サブスクリプション内のすべてを識別します。 リソースの種類は、Azure で実行されているすべてのリソースのリソース ID の一部でもあります。 たとえば、Microsoft.Compute/virtualMachines は、仮想マシンのリソースの種類の 1 つです。 サービスとそれに関連付けられるリソースの種類の一覧については、リソース プロバイダーに関するページをご覧ください。

同様に、Azure Monitor では、コア監視データがリソースの種類 (名前空間とも呼ばれます) に基づいてメトリックとログに整理されます。 リソースの種類に応じてさまざまなメトリックとログが使用できます。 サービスは、複数のリソースの種類に関連付けられる可能性があります。

IoT Hub 用のリソースの種類について詳しくは、「Azure IoT Hub 監視データ リファレンス」をご覧ください。

データ ストレージ

Azure Monitor の場合:

  • メトリック データは、Azure Monitor メトリック データベースに保存されます。
  • ログ データは、Azure Monitor ログ ストアに保存されます。 Log Analytics は、Azure portal のツールの 1 つであり、このストアに対してクエリを実行することができます。
  • Azure アクティビティ ログは、Azure Portal 内の独自のインターフェイスを持つ別のストアです。

必要に応じて、メトリックおよびアクティビティ ログ データを Azure Monitor ログ ストアにルーティングできます。 次に、Log Analytics を使用してデータのクエリを実行し、他のログ データと関連付けることができます。

多くのサービスで診断設定を使用して、メトリックとログ データを Azure Monitor の外部の他のストレージの場所に送信できます。 たとえば、Azure Storage、ホステッド パートナー システムEvent Hubs を使用する Azure 以外のパートナー システムなどがあります。

Azure Monitor によるデータの保存方法の詳細については、「Azure Monitor データ プラットフォーム」を参照してください。

監視データの収集とルーティングを行う

プラットフォーム メトリック、アクティビティ ログ、およびリソース ログには、一意の収集、ストレージ、ルーティングの仕様があります。

Azure portal の IoT ハブから 監視 から 診断設定 を選択し、次に 診断設定を追加 を選択して、IoT ハブによって発行されるログとプラットフォーム メトリックを対象とする診断設定を作成できます。

Azure portal の IoT ハブに診断設定を追加する方法を示すスクリーンショット。

次のスクリーンショットは、リソース ログ タイプの接続操作とすべてのプラットフォーム メトリックを Log Analytics ワークスペースにルーティングするための診断設定を示しています。

IoT ハブを監視するための [診断設定] フォームのスクリーンショット。

次は IoT Hub のプラットフォーム メトリックを他の場所にルーティングする場合です。

Azure Monitor プラットフォームのメトリック

Azure Monitor により、ほとんどのサービスに関するプラットフォーム メトリックが提供されます。 これらのメトリックは次のとおりです。

  • 名前空間ごとに個別に定義されます。
  • Azure Monitor 時系列メトリック データベースに保存されます。
  • 軽量であり、凖リアルタイムのアラートをサポートできます。
  • リソースのパフォーマンスを時間の経過と共に追跡するために使用されます。

収集: Azure Monitor では、プラットフォーム メトリックを自動的に収集します。 構成は必要ありません。

ルーティング: また、いくつかのプラットフォーム メトリックを Azure Monitor ログまたは Log Analytics にルーティングして、他のログ データを使用してクエリを実行することもできます。 各メトリックの DS エクスポート設定を確認して、診断設定を使用してメトリックを Azure Monitor ログまたは Log Analytics にルーティングできるかどうかを確認します。

Azure Monitor ですべてのリソースに対して収集できるすべてのメトリックの一覧については、Azure Monitor でサポートされるメトリックに関する記事を参照してください。

監視の概要

Azure portal の各 IoT ハブの [概要] ページには、使用されているメッセージの数や IoT ハブに接続されているデバイスの数など、いくつかの使用状況メトリックを示すグラフが含まれています。

IoT ハブの [概要] ページの既定のメトリック グラフ。

正しいメッセージ数の値は 1 分遅れる場合があります。 IoT Hub サービス インフラストラクチャにより、更新時に高い値と低い値の間でバウンドすることがあります。 この数は、最後の 1 分間に増加した値に限り正しくありません。

概要ウィンドウに表示される情報は便利ですが、IoT Hub に使用できる監視データは、ごくわずかな量しか示しません。 いくつかの監視データは自動的に収集され、IoT ハブを作成するとすぐに分析に使用できるようになります。 構成によっては、他の種類のデータ収集を有効にできます。

重要

Azure Monitor のリソース ログを使用して IoT Hub サービスによって出力されるイベントは、信頼性も順序も保証されません。 一部のイベントが失われたり、順序どおりに配信されないことがあります。 さらに、リソース ログはリアルタイムではあることは意図されていないため、選択した出力先に記録されるまで数分かかる場合があります。

Azure Monitor リソース ログ

リソース ログでは、Azure リソースによって実行された操作に関する分析情報を提供します。 ログは自動的に生成されますが、保存するかクエリを実行するには、Azure Monitor ログにルーティングする必要があります。 ログはカテゴリに分類されています。 特定の名前空間に複数のリソース ログ カテゴリが含まれる場合があります。

収集: リソース ログは、"診断設定" を作成してログを 1 つ以上の場所にルーティングするまでは収集および保存されません。 診断設定を作成するときは、収集するログのカテゴリを指定します。 診断設定を作成して管理するには、Azure portal、プログラム、Azure Policy など、複数の方法があります。

ルーティング: 既定で推奨されるのは、リソース ログを Azure Monitor ログにルーティングして、他のログ データを使用してクエリを実行できるようにすることです。 Azure Storage、Azure Event Hubs、特定の Microsoft 監視パートナーなど、その他の場所も利用できます。 詳細については、「Azure リソース ログ」およびリソース ログの送信先に関するページを参照してください。

リソース ログの収集、保存、ルーティングの詳細については、「Azure Monitor の診断設定」を参照してください。

Azure Monitor で使用可能なすべてのリソース ログ カテゴリの一覧については、Azure Monitor でサポートされているリソース ログに関するページを参照してください。

Azure Monitor 内のすべてのリソース ログには、同じヘッダー フィールドの後にサービス固有のフィールドがあります。 共通のスキーマの概要については、Azure Monitor リソース ログのスキーマに関する記事をご覧ください。

接続イベントをログにルーティングする

IoT ハブは、複数のカテゴリの操作について、リソース ログを継続的に出力します。 しかし、このログ データを収集するには、それを分析またはアーカイブ可能な宛先にルーティングするための診断設定を作成する必要があります。 このような宛先の 1 つが、Log Analytics ワークスペースを経由した Azure Monitor ログです (価格を参照)。ここで、Kusto クエリを使用してデータを分析することができます。

IoT Hub のリソース ログ接続カテゴリでは、デバイス接続に関する操作とエラーが出力されます。 次のスクリーンショットは、これらのログを Log Analytics ワークスペースにルーティングするための診断設定を示しています。

Log Analytics ワークスペースに接続ログを送信するための推奨設定。

IoT Hub は常にリソース ログを出力しますが、Azure Monitor はそれらをユーザーが宛先にルーティングするまで収集しないため、IoT ハブを作成した後は、できるだけ早く診断設定を作成することをお勧めします。

宛先へのログのルーティングの詳細については、「監視データの収集とルーティングを行う」セクションを参照してください。 診断設定を作成する詳細な手順については、メトリックとログの使用に関するチュートリアルを参照してください。

Azure activity log

アクティビティ ログには、Azure リソースごとに操作を追跡する、そのリソースの外から見たサブスクリプションレベルのイベント (新しいリソースの作成や仮想マシンの起動など) が含まれます。

収集: アクティビティ ログ イベントは、Azure portal で表示するために、個別のストアに自動的に生成および収集されます。

ルート指定: アクティビティ ログ データを Azure Monitor ログに送信して、他のログ データと共に分析できます。 Azure Storage、Azure Event Hubs、特定の Microsoft 監視パートナーなど、その他の場所も利用できます。 アクティビティ ログをルーティングする方法の詳細については、Azure アクティビティ ログの概要に関するページをご覧ください。

ログの分析

Azure Monitor ログのデータはテーブルに格納され、各テーブルには独自の一意のプロパティ セットがあります。 これらのテーブル内のデータは、Log Analytics ワークスペースに関連付けられており、Log Analytics でクエリを実行できます。 Azure Monitor ログの詳細については、Azure Monitor のドキュメントの「Azure Monitor ログの概要」を参照してください。

データを Azure Monitor ログにルーティングするには、リソース ログまたはプラットフォーム メトリックを Log Analytics ワークスペースに送信するための診断設定を作成する必要があります。 詳細については、「監視データの収集とルーティングを行う」セクションを参照してください。

Log Analytics を実行するには、Azure portal に移動して IoT ハブを開き、[監視][ログ] を選択します。 既定では、これらの Log Analytics クエリには IoT ハブの Azure Monitor ログで収集されたログとメトリックにスコープが設定されています。

IoT ハブの [ログ] ページ。

次は IoT Hub のプラットフォーム メトリックを Azure Monitor ログにルーティングする場合です。

IoT Hub に関する一般的なクエリについては、「サンプル Kusto クエリ」を参照してください。 Log Analytics クエリの使用の詳細については、「Azure Monitor のログ クエリの概要」を参照してください。

IoT Hub ログの SDK バージョン

一部の操作では、IoT Hub リソース ログの properties オブジェクトで sdkVersion プロパティが返されます。 これらの操作では、デバイスまたはバックエンド アプリがいずれかの Azure IoT SDK を使用している場合、このプロパティには、使用されている SDK、SDK のバージョン、および SDK が実行されているプラットフォームに関する情報が含まれています。

次の例は、以下を使用して sdkVersion 操作に対して出力される deviceConnect プロパティを 示しています。

  • Node.js デバイス SDK: "azure-iot-device/1.17.1 (node v10.16.0; Windows_NT 10.0.18363; x64)"
  • .NET (C#) SDK: ".NET/1.21.2 (.NET Framework 4.8.4200.0; Microsoft Windows 10.0.17763 WindowsProduct:0x00000004; X86)"

次の表には、さまざまな Azure IoT SDK に使用される SDK 名が示されています。

sdkVersion プロパティでの SDK 名 言語
.NET .NET (C#)
microsoft.azure.devices .NET (C#) サービス SDK
microsoft.azure.devices.client .NET (C#) デバイス SDK
iothubclient C または Python v1 (非推奨) デバイス SDK
iothubserviceclient C または Python v1 (非推奨) サービス SDK
azure-iot-device-iothub-py Python デバイス SDK
azure-iot-device Node.js デバイス SDK
azure-iothub Node.js サービス SDK
com.microsoft.azure.iothub-java-client Java デバイス SDK
com.microsoft.azure.iothub.service.sdk Java サービス SDK
com.microsoft.azure.sdk.iot.iot-device-client Java デバイス SDK
com.microsoft.azure.sdk.iot.iot-service-client Java サービス SDK
C 埋め込み C
C + (OSSimplified = Eclipse ThreadX) Eclipse ThreadX

IoT Hub リソース ログに対してクエリを実行するときに、SDK バージョン プロパティを抽出できます。 たとえば、次のクエリは、接続操作によって返されるプロパティから SDK バージョン プロパティ (およびデバイス ID) を抽出します。 これら 2 つのプロパティは、操作の時刻と、デバイスが接続している IoT ハブのリソース ID と一緒に結果に書き込まれます。

// SDK version of devices
// List of devices and their SDK versions that connect to IoT Hub
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend parsed_json = parse_json(properties_s) 
| extend SDKVersion = tostring(parsed_json.sdkVersion) , DeviceId = tostring(parsed_json.deviceId)
| distinct DeviceId, SDKVersion, TimeGenerated, _ResourceId

Azure Event Hubs からのログの読み取り

診断設定を使用してイベント ログを設定した後は、ログを読み取るアプリケーションを作成できます。これにより、ログの情報を基にしてアクションを実行できるようになります。

Event Hubs クライアントでの開発に関する具体的なガイダンスについては、Azure Event Hubs のドキュメントを参照してください。 たとえば、「.NET サンプル: イベントの読み取り」などです。

使用できるリソース ログ カテゴリ、それに関連付けられている Log Analytics テーブル、IoT Hub のログ スキーマについては、「Azure IoT Hub 監視データ リファレンス」をご覧ください。

監視データを分析する

監視データを分析するためのツールは多数あります。

Azure Monitor ツール

Azure Monitor は、次の基本的なツールをサポートします。

より複雑な視覚化を可能にするツールは次のとおりです。

  • ダッシュボードを使用すると、さまざまな種類のデータを組み合わせて、Azure portal 内の 1 つのペインに表示できます。
  • ブック。Azure portal で作成できるカスタマイズ可能なレポート。 ブックには、テキスト、メトリック、ログ クエリを含めることができます。
  • Grafana。運用ダッシュボードに優れたオープン プラットフォーム ツール。 Grafana を使用して、Azure Monitor 以外の複数のソースからのデータを含むダッシュボードを作成できます。
  • Power BI。さまざまなデータ ソースにわたって対話型の視覚化を提供するビジネス分析サービス。 Azure Monitor からログ データを自動的にインポートするように Power BI を構成して、これらの視覚化を利用できます。

Azure Monitor エクスポート ツール

次の方法を使用して、Azure Monitor から他のツールにデータを取得できます。

Azure Monitor 用 REST API の使用を開始するには、「Azure 監視 REST API のチュートリアル」を参照してください。

Kusto クエリ

Kusto クエリ言語 (KQL) を使用して、Azure Monitor ログ/Log Analytics ストアの監視データを分析できます。

重要

ポータルでサービスのメニューから [ログ] を選択すると、クエリ スコープが現在のサービスに設定された状態で Log Analytics が開きます。 このスコープは、ログ クエリにその種類のリソースのデータのみが含まれることを意味します。 他の Azure サービスのデータを含むクエリを実行する場合は、[Azure Monitor] メニューから [ログ] を選択します。 詳細については、「Azure Monitor Log Analytics のログ クエリのスコープと時間範囲」を参照してください。

いずれかのサービスに関する一般的なクエリの一覧については、Log Analytics クエリ インターフェイスに関するページを参照してください。

IoT ハブを監視するには、次の Kusto クエリを使用します。

  • 接続エラー: デバイス接続エラーを識別します。

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and Level == "Error"
    
  • 調整エラー: 調整エラーが発生する要求を最も多く行ったデバイスを識別します。

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where ResultType == "429001"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | summarize count() by DeviceId, Category, _ResourceId
    | order by count_ desc
    
  • 配信不能エンドポイント: 問題が報告された回数によって停止または異常なエンドポイントを特定し、その理由を理解します。

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Routes" and OperationName in ("endpointDead", "endpointUnhealthy")
    | extend parsed_json = parse_json(properties_s)
    | extend Endpoint = tostring(parsed_json.endpointName), Reason = tostring(parsed_json.details) 
    | summarize count() by Endpoint, OperationName, Reason, _ResourceId
    | order by count_ desc
    
  • エラーの概要: すべての操作に関する種類別のエラー数。

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Level == "Error"
    | summarize count() by ResultType, ResultDescription, Category, _ResourceId
    
  • 最近接続されたデバイス: 指定した期間内に IoT Hub に接続されたデバイスの一覧。

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" and OperationName == "deviceConnect"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | summarize max(TimeGenerated) by DeviceId, _ResourceId
    
  • 特定のデバイスの接続イベント: 特定のデバイス (test-device) でログに記録されたすべての接続イベント。

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections"
    | extend DeviceId = tostring(parse_json(properties_s).deviceId)
    | where DeviceId == "test-device"
    
  • デバイスの SDK バージョン: デバイスと、デバイス接続またはデバイスからクラウドへのツイン操作の SDK バージョンの一覧。

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections" or Category == "D2CTwinOperations"
    | extend parsed_json = parse_json(properties_s)
    | extend SDKVersion = tostring(parsed_json.sdkVersion) , DeviceId = tostring(parsed_json.deviceId)
    | distinct DeviceId, SDKVersion, TimeGenerated, _ResourceId
    

警告

Azure Monitor のアラートにより、監視データで特定の状態が見つかったときに事前に通知を受け取ります。 アラートにより、ユーザーが気付く前に、管理者が問題を識別して対処できます。 詳細については、Azure Monitor アラートに関するページを参照してください。

Azure リソースに関する一般的なアラートのソースは数多くあります。 Azure リソースに関する一般的なアラートの例については、ログ アラート クエリのサンプルに関するページをご覧ください。 Azure Monitor ベースライン アラート (AMBA) サイトには、重要なプラットフォーム メトリック アラート、ダッシュボード、ガイドラインを実装するための半自動化された方法が用意されています。 このサイトは、Azure ランディング ゾーン (ALZ) の一部であるすべてのサービスを含む、Azure サービスの継続的に拡張されるサブセットに適用されます。

共通アラート スキーマを使用すると、Azure Monitor のアラート通知の使用を標準化できます。 詳細については、「共通アラート スキーマ」をご覧ください。

アラートの種類

Azure Monitor データ プラットフォームでは、任意のメトリックまたはログ データ ソースに対してアラートを生成できます。 監視するサービスと収集する監視データに応じて、さまざまな種類のアラートがあります。 アラートの種類に応じて、さまざまな利点と欠点があります。 詳細については、適切な種類の監視アラートの選択に関するページをご覧ください。

次の一覧では、作成できる Azure Monitor アラートの種類について説明します。

  • メトリック アラートでは、リソース メトリックを定期的に評価します。 メトリックはプラットフォーム メトリック、カスタム メトリック、メトリックに変換された Azure Monitor からのログまたは Application Insights メトリックにすることができます。 メトリック警告では、複数の条件と動的しきい値を適用することもできます。
  • ログ アラートでは、ユーザーは Log Analytics クエリを使用して、定義済みの頻度でリソース ログを評価できます。
  • アクティビティ ログ アラートは、定義された条件と一致する新しいアクティビティ ログ イベントが発生したときにトリガーされます。 Resource Health アラートと Service Health アラートは、サービスとリソースの正常性を報告するアクティビティ ログ アラートです。

一部の Azure サービスでは、スマート検出アラートPrometheus アラート推奨されるアラート ルールもサポートされています。

一部のサービスでは、同じ Azure リージョン内に存在する同じ種類の複数のリソースに同じメトリック警告ルールを適用することで、大規模に監視することができます。 監視対象リソースごとに個別の通知が送信されます。 サポートされている Azure サービスとクラウドについては、「1 つのアラート ルールで複数のリソースを監視する」をご覧ください。

IoT Hub のアラート ルール

Azure IoT Hub 監視データ リファレンス」の一覧で示されている任意のメトリック、ログ エントリ、またはアクティビティ ログ エントリに対して、アラートを設定できます。

デバイスの切断に関するメトリック アラートを設定する

IoT Hub によって出力されたプラットフォーム メトリックに基づいてアラートを設定できます。 メトリック アラートを使うと、関心のある状態が発生したことをユーザーに通知したり、その状態に自動的に対応できるアクションをトリガーしたりできます。

"接続されているデバイス (プレビュー)" メトリックは、IoT Hub に接続されているデバイスの数を示します。 このメトリックがしきい値を下回った場合に、アラートをトリガーできます。

接続されているデバイス メトリックに関するアラート ロジックの設定。

メトリック アラート ルールを使用して、デバイスの切断時の異常を大規模に監視できます。 つまり、多数のデバイスが予期せず切断した場合の判断にアラートを使用できます。 この状況が検出されたら、ログを調べて、問題のトラブルシューティングに役立てることができます。 ただし、デバイスごとの切断および重要なデバイスの切断を準リアル タイムで監視するには、Event Grid を使用する必要があります。

IoT Hub でのアラートの詳細については、IoT Hub の監視でのアラートに関するページを参照してください。 IoT Hub でのアラート作成のチュートリアルについては、メトリックとログの使用に関するチュートリアルを参照してください。 アラートの詳細な概要については、Azure Monitor のドキュメントの「Microsoft Azure のアラートの概要」を参照してください。

Advisor の推奨事項

一部のサービスでは、リソースの操作中にクリティカルな条件や差し迫った変更が発生した場合は、ポータルのサービス [概要] ページにアラートが表示されます。 アラートの詳細と推奨される修正は、左側のメニューの [監視] の下の [アドバイザーのレコメンデーション] に表示されます。 通常の操作中、アドバイザーのレコメンデーションは表示されません。

Azure Advisor の詳細については、Azure Advisor の概要に関するページをご覧ください。