Azure IoT Hub の正常性を監視し、問題をすばやく診断するMonitor the health of Azure IoT Hub and diagnose problems quickly

Azure IoT Hub を実装する企業では、そのリソースに信頼性の高いパフォーマンスを期待します。Businesses that implement Azure IoT Hub expect reliable performance from their resources. 操作の緊密な監視を維持できるように、IoT Hub は、Azure MonitorAzure Resource Health と完全に統合されています。To help you maintain a close watch on your operations, IoT Hub is fully integrated with Azure Monitor and Azure Resource Health. これら 2 つのサービスが連携して、IoT ソリューションを常に正常な状態で稼働させるために必要なデータが提供されます。These two services work to provide you with the data you need to keep your IoT solutions up and running in a healthy state.

Azure Monitor は、すべての Azure サービスの監視およびログの唯一のソースです。Azure Monitor is a single source of monitoring and logging for all your Azure services. Azure Monitor が生成する診断ログを Azure Monitor ログ、Event Hubs、または Azure Storage に送信して、カスタムの処理を実行できます。You can send the diagnostic logs that Azure Monitor generates to Azure Monitor logs, Event Hubs, or Azure Storage for custom processing. Azure Monitor のメトリックと診断の設定により、リソースのパフォーマンスを把握できます。Azure Monitor's metrics and diagnostics settings give you visibility into the performance of your resources. この記事を読み進めると、IoT Hub で Azure Monitor を使用する方法を理解することができます。Continue reading this article to learn how to Use Azure Monitor with your IoT hub.

重要

Azure Monitor の診断ログを使用して IoT Hub サービスによって出力されるイベントは、信頼性も順序も保証されません。The events emitted by the IoT Hub service using Azure Monitor diagnostic logs are not guaranteed to be reliable or ordered. 一部のイベントが失われたり、順序どおりに配信されないことがあります。Some events might be lost or delivered out of order. さらに、診断ログはリアルタイムではなく、選択した出力先に記録されるまで数分かかる場合があります。Diagnostic logs also aren't meant to be real-time, and it may take several minutes for events to be logged to your choice of destination.

Azure での問題がお客様のリソースに影響を及ぼす場合は、Azure Resource Health によって診断とサポートを受けられます。Azure Resource Health helps you diagnose and get support when an Azure issue impacts your resources. ダッシュボードには、お使いの各 IoT ハブの現在と過去の正常性の状態が表示されます。A dashboard provides current and past health status for each of your IoT hubs. この記事の最後のセクションで、IoT ハブで Azure Resource Health を使用する方法について説明します。Continue to the section at the bottom of this article to learn how to Use Azure Resource Health with your IoT hub.

IoT Hub には、IoT リソースの状態を把握するために利用できる独自のメトリックも用意されています。IoT Hub also provides its own metrics that you can use to understand the state of your IoT resources. 詳細については、「IoT Hub メトリックの理解」を参照してください。To learn more, see Understand IoT Hub metrics.

Azure Monitor の使用Use Azure Monitor

Azure Monitor は、Azure リソースの診断情報を提供します。これは、IoT Hub 内で実行される操作を監視できることを意味します。Azure Monitor provides diagnostics information for Azure resources, which means that you can monitor operations that take place within your IoT hub.

Azure Monitor の診断設定は、IoT Hub の操作の監視機能を置き換えます。Azure Monitor's diagnostics settings replaces the IoT Hub operations monitor. 現在、操作の監視機能を使用している場合は、ワークフローを移行する必要があります。If you currently use operations monitoring, you should migrate your workflows. 詳細については、操作の監視から診断設定への移行に関するページを参照してください。For more information, see Migrate from operations monitoring to diagnostics settings.

Azure Monitor が監視する特定のメトリックとイベントの詳細については、「Azure Monitor のサポートされるメトリック」と「Azure 診断ログでサポートされているサービス、スキーマ、カテゴリ」を参照してください。To learn more about the specific metrics and events that Azure Monitor watches, see Supported metrics with Azure Monitor and Supported services, schemas, and categories for Azure Diagnostic Logs.

診断設定を使用してログ記録を有効にするEnable logging with diagnostics settings

注意

この記事は、新しい Azure PowerShell Az モジュールを使用するために更新されました。This article has been updated to use the new Azure PowerShell Az module. Az モジュールと AzureRM の互換性の詳細については、「Introducing the new Azure PowerShell Az module (新しい Azure PowerShell Az モジュールの概要)」を参照してください。To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. インストール手順については、Azure PowerShell のインストール を参照してください。For installation instructions, see Install Azure PowerShell.

  1. Azure Portal にサインインし、IoT Hub に移動します。Sign in to the Azure portal and navigate to your IoT hub.

  2. [診断設定] を選択します。Select Diagnostics settings.

  3. [診断を有効にする] を選択します。Select Turn on diagnostics.

    診断の有効化

  4. 診断設定の名前を付けます。Give the diagnostic settings a name.

  5. ログの送信先を選択します。Choose where you want to send the logs. 3 つのオプションを自由に組み合わせて選択できます。You can select any combination of the three options:

    • ストレージ アカウントへのアーカイブArchive to a storage account
    • イベント ハブへのストリーミングStream to an event hub
    • Log Analytics への送信Send to Log Analytics
  6. 監視する操作を選択し、それらの操作のログを有効にします。Choose which operations you want to monitor, and enable logs for those operations. 診断設定では、次の操作をレポートできます。The operations that diagnostic settings can report on are:

    • ConnectionsConnections
    • デバイス テレメトリDevice telemetry
    • クラウドからデバイスへのメッセージCloud-to-device messages
    • デバイス ID の操作Device identity operations
    • ファイルのアップロードFile uploads
    • メッセージ ルーティングMessage routing
    • クラウドからデバイスへのツイン操作Cloud-to-device twin operations
    • デバイスからクラウドへのツイン操作Device-to-cloud twin operations
    • ツイン操作Twin operations
    • ジョブ操作Job operations
    • ダイレクト メソッドDirect methods
    • 分散トレース (プレビュー)Distributed tracing (preview)
    • 構成Configurations
    • デバイス ストリームDevice streams
    • デバイス メトリックDevice metrics
  7. 新しい設定を保存します。Save the new settings.

PowerShell を使用して診断設定を有効にする場合は、次のコードを使用します。If you want to turn on diagnostics settings with PowerShell, use the following code:

Connect-AzAccount
Select-AzSubscription -SubscriptionName <subscription that includes your IoT Hub>
Set-AzDiagnosticSetting -ResourceId <your resource Id> -ServiceBusRuleId <your service bus rule Id> -Enabled $true

新しい設定は、10 分ほどで有効になります。New settings take effect in about 10 minutes. その後、構成したアーカイブ ターゲットのログが [診断設定] ブレードに表示されます。After that, logs appear in the configured archival target on the Diagnostics settings blade. 診断の構成の詳細については、「Azure リソースからのログ データの収集と使用」を参照してください。For more information about configuring diagnostics, see Collect and consume log data from your azure resources.

ログを理解するUnderstand the logs

Azure Monitor を使用すると、IoT Hub で発生するさまざまな操作を追跡できます。Azure Monitor tracks different operations that occur in IoT Hub. 各カテゴリには、そのカテゴリ内のイベントの報告方法を定義するスキーマがあります。Each category has a schema that defines how events in that category are reported.

ConnectionsConnections

接続カテゴリは、エラーだけでなく、IoT Hub に対するデバイスの接続と切断イベントも追跡します。The connections category tracks device connect and disconnect events from an IoT hub as well as errors. このカテゴリは、承認されていない接続の試行を識別したり、デバイスへの接続を失ったときに警告したりするのに役立ちます。This category is useful for identifying unauthorized connection attempts and or alerting when you lose connection to devices.

注意

デバイスの信頼できる接続状態については、「デバイスのハートビート」を参照してください。For reliable connection status of devices check Device heartbeat.

{
   "records":
   [
        {
            "time": " UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "deviceConnect",
            "category": "Connections",
            "level": "Information",
            "properties": "{\"deviceId\":\"<deviceId>\",\"protocol\":\"<protocol>\",\"authType\":\"{\\\"scope\\\":\\\"device\\\",\\\"type\\\":\\\"sas\\\",\\\"issuer\\\":\\\"iothub\\\",\\\"acceptingIpFilterRule\\\":null}\",\"maskedIpAddress\":\"<maskedIpAddress>\"}",
            "location": "Resource location"
        }
    ]
}

クラウドからデバイスへのコマンドCloud-to-device commands

C2D コマンド カテゴリでは、IoT Hub で発生し、かつクラウドからデバイスへのメッセージ パイプラインに関連しているエラーを追跡します。The cloud-to-device commands category tracks errors that occur at the IoT hub and are related to the cloud-to-device message pipeline. このカテゴリには、以下から発生するエラーが含まれます。This category includes errors that occur from:

  • 送信 cloud-to-device メッセージ (承認されていない送信者のエラーなど)、Sending cloud-to-device messages (like unauthorized sender errors),
  • 受信 cloud-to-device メッセージ (配信数超過のエラーなど)、およびReceiving cloud-to-device messages (like delivery count exceeded errors), and
  • 受信 cloud-to-device メッセージのフィードバック (フィードバックの有効期限切れのエラーなど)。Receiving cloud-to-device message feedback (like feedback expired errors).

このカテゴリでは、cloud-to-device メッセージが正常に配信されたときのエラーはキャッチされませんが、デバイスによって不適切に処理されたときのエラーはキャッチされます。This category does not catch errors when the cloud-to-device message is delivered successfully but then improperly handled by the device.

{
    "records":
    [
        {
            "time": " UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "messageExpired",
            "category": "C2DCommands",
            "level": "Error",
            "resultType": "Event status",
            "resultDescription": "MessageDescription",
            "properties": "{\"deviceId\":\"<deviceId>\",\"messageId\":\"<messageId>\",\"messageSizeInBytes\":\"<messageSize>\",\"protocol\":\"Amqp\",\"deliveryAcknowledgement\":\"<None, NegativeOnly, PositiveOnly, Full>\",\"deliveryCount\":\"0\",\"expiryTime\":\"<timestamp>\",\"timeInSystem\":\"<timeInSystem>\",\"ttl\":<ttl>, \"EventProcessedUtcTime\":\"<UTC timestamp>\",\"EventEnqueuedUtcTime\":\"<UTC timestamp>\", \"maskedIpAddress\": \"<maskedIpAddress>\", \"statusCode\": \"4XX\"}",
            "location": "Resource location"
        }
    ]
}

デバイス ID の操作Device identity operations

デバイス ID の操作のカテゴリでは、IoT Hub の ID レジストリ内でエントリの作成、更新、または削除を試みたときに発生するエラーを追跡します。The device identity operations category tracks errors that occur when you attempt to create, update, or delete an entry in your IoT hub's identity registry. このカテゴリの追跡は、プロビジョニングのシナリオで便利です。Tracking this category is useful for provisioning scenarios.

{
    "records":
    [
        {
            "time": "UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "get",
            "category": "DeviceIdentityOperations",
            "level": "Error",
            "resultType": "Event status",
            "resultDescription": "MessageDescription",
            "properties": "{\"maskedIpAddress\":\"<maskedIpAddress>\",\"deviceId\":\"<deviceId>\", \"statusCode\":\"4XX\"}",
            "location": "Resource location"
        }
    ]
}

RoutesRoutes

メッセージ ルーティング カテゴリは、メッセージ ルート評価および IoT Hub によって認識されるエンドポイント正常性において発生するエラーを追跡します。The message routing category tracks errors that occur during message route evaluation and endpoint health as perceived by IoT Hub. このカテゴリには、以下のようなイベントが含まれます。This category includes events such as:

  • "未定義" に評価されるルール、A rule evaluates to "undefined",
  • IoT Hub がエンドポイントをデッドとしてマークしている、またはIoT Hub marks an endpoint as dead, or
  • エンドポイントから受信したすべてのエラー。Any errors received from an endpoint.

このカテゴリには、メッセージ自体に関する具体的なエラー (デバイス調整エラーなど) は含まれません。このようなエラーは、"デバイス テレメトリ" カテゴリで報告されます。This category does not include specific errors about the messages themselves (like device throttling errors), which are reported under the "device telemetry" category.

{
    "records":
    [
        {
            "time": "UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "endpointUnhealthy",
            "category": "Routes",
            "level": "Error",
            "properties": "{\"deviceId\": \"<deviceId>\",\"endpointName\":\"<endpointName>\",\"messageId\":<messageId>,\"details\":\"<errorDetails>\",\"routeName\": \"<routeName>\"}",
            "location": "Resource location"
        }
    ]
}

デバイス テレメトリDevice telemetry

デバイス テレメトリのカテゴリでは、IoT Hub で発生し、かつテレメトリ パイプラインに関連しているエラーを追跡します。The device telemetry category tracks errors that occur at the IoT hub and are related to the telemetry pipeline. このカテゴリーには、テレメトリ イベントの送信時に発生したエラー (スロットルなど) やテレメトリ イベントの受信時に発生したエラー (許可されていないリーダーなど) が含まれます。This category includes errors that occur when sending telemetry events (such as throttling) and receiving telemetry events (such as unauthorized reader). このカテゴリでは、デバイス自体で実行されているコードに起因するエラーをキャッチできません。This category cannot catch errors caused by code running on the device itself.

{
    "records":
    [
        {
            "time": "UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "ingress",
            "category": "DeviceTelemetry",
            "level": "Error",
            "resultType": "Event status",
            "resultDescription": "MessageDescription",
            "properties": "{\"deviceId\":\"<deviceId>\",\"batching\":\"0\",\"messageSizeInBytes\":\"<messageSizeInBytes>\",\"EventProcessedUtcTime\":\"<UTC timestamp>\",\"EventEnqueuedUtcTime\":\"<UTC timestamp>\",\"partitionId\":\"1\"}", 
            "location": "Resource location"
        }
    ]
}

ファイルのアップロード操作File upload operations

ファイルのアップロード カテゴリでは、IoT Hub で発生し、かつファイルのアップロード機能に関連しているエラーを追跡します。The file upload category tracks errors that occur at the IoT hub and are related to file upload functionality. このカテゴリには、次のエラーが含まれます。This category includes:

  • SAS URI で発生したエラー (デバイスがアップロード完了をハブに通知する前に期限切れになった、など)。Errors that occur with the SAS URI, such as when it expires before a device notifies the hub of a completed upload.

  • デバイスによって報告されたアップロード エラー。Failed uploads reported by the device.

  • IoT Hub 通知メッセージの作成中にストレージでファイルが見つからないときに発生するエラー。Errors that occur when a file is not found in storage during IoT Hub notification message creation.

このカテゴリでは、デバイスがファイルをストレージにアップロードしているときに直接発生したエラーをキャッチできません。This category cannot catch errors that directly occur while the device is uploading a file to storage.

{
    "records":
    [
        {
            "time": "UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "ingress",
            "category": "FileUploadOperations",
            "level": "Error",
            "resultType": "Event status",
            "resultDescription": "MessageDescription",
            "durationMs": "1",
            "properties": "{\"deviceId\":\"<deviceId>\",\"protocol\":\"<protocol>\",\"authType\":\"{\\\"scope\\\":\\\"device\\\",\\\"type\\\":\\\"sas\\\",\\\"issuer\\\":\\\"iothub\\\",\\\"acceptingIpFilterRule\\\":null}\",\"blobUri\":\"http//bloburi.com\"}",
            "location": "Resource location"
        }
    ]
}

クラウドからデバイスへのツイン操作Cloud-to-device twin operations

クラウドからデバイスへのツイン操作カテゴリでは、デバイス ツイン上のサービスによって開始されたイベントを追跡します。The cloud-to-device twin operations category tracks service-initiated events on device twins. これらの操作には、ツインの取得、タグの更新または置換、および必要なプロパティの更新または置換が含まれます。These operations can include get twin, update or replace tags, and update or replace desired properties.

{
    "records":
    [
        {
            "time": "UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "read",
            "category": "C2DTwinOperations",
            "level": "Information",
            "durationMs": "1",
            "properties": "{\"deviceId\":\"<deviceId>\",\"sdkVersion\":\"<sdkVersion>\",\"messageSize\":\"<messageSize>\"}",
            "location": "Resource location"
        }
    ]
}

デバイスからクラウドへのツイン操作Device-to-cloud twin operations

デバイスからクラウドへのツイン操作カテゴリでは、デバイス ツイン上のデバイスによって開始されたイベントを追跡します。The device-to-cloud twin operations category tracks device-initiated events on device twins. これらの操作には、ツインの取得、報告されたプロパティの更新、および必要なプロパティへのサブスクライブが含まれます。These operations can include get twin, update reported properties, and subscribe to desired properties.

{
    "records":
    [
        {
            "time": "UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "update",
            "category": "D2CTwinOperations",
            "level": "Information",
            "durationMs": "1",
            "properties": "{\"deviceId\":\"<deviceId>\",\"protocol\":\"<protocol>\",\"authenticationType\":\"{\\\"scope\\\":\\\"device\\\",\\\"type\\\":\\\"sas\\\",\\\"issuer\\\":\\\"iothub\\\",\\\"acceptingIpFilterRule\\\":null}\"}",
            "location": "Resource location"
        }
    ]
}

ツイン クエリTwin queries

ツイン クエリのカテゴリでは、クラウドで開始されたデバイス ツインのクエリ要求を報告します。The twin queries category reports on query requests for device twins that are initiated in the cloud.

{
    "records":
    [
        {
            "time": "UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "query",
            "category": "TwinQueries",
            "level": "Information",
            "durationMs": "1",
            "properties": "{\"query\":\"<twin query>\",\"sdkVersion\":\"<sdkVersion>\",\"messageSize\":\"<messageSize>\",\"pageSize\":\"<pageSize>\", \"continuation\":\"<true, false>\", \"resultSize\":\"<resultSize>\"}",
            "location": "Resource location"
        }
    ]
}

ジョブ操作Jobs operations

ジョブ操作カテゴリでは、デバイス ツインを更新するジョブ要求または複数のデバイスでダイレクト メソッドを呼び出すジョブ要求を報告します。The jobs operations category reports on job requests to update device twins or invoke direct methods on multiple devices. これらの要求は、クラウドで開始されます。These requests are initiated in the cloud.

{
    "records":
    [
        {
            "time": "UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "jobCompleted",
            "category": "JobsOperations",
            "level": "Information",
            "durationMs": "1",
            "properties": "{\"jobId\":\"<jobId>\", \"sdkVersion\": \"<sdkVersion>\",\"messageSize\": <messageSize>,\"filter\":\"DeviceId IN ['1414ded9-b445-414d-89b9-e48e8c6285d5']\",\"startTimeUtc\":\"Wednesday, September 13, 2017\",\"duration\":\"0\"}",
            "location": "Resource location"
        }
    ]
}

ダイレクト メソッドDirect Methods

ダイレクト メソッド カテゴリでは、個々のデバイスに送信される要求 - 応答のインタラクションを追跡します。The direct methods category tracks request-response interactions sent to individual devices. これらの要求は、クラウドで開始されます。These requests are initiated in the cloud.

{
    "records":
    [
        {
            "time": "UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "send",
            "category": "DirectMethods",
            "level": "Information",
            "durationMs": "1",
            "properties": "{\"deviceId\":<messageSize>, \"RequestSize\": 1, \"ResponseSize\": 1, \"sdkVersion\": \"2017-07-11\"}",
            "location": "Resource location"
        }
    ]
}

分散トレース (プレビュー)Distributed Tracing (Preview)

分散トレース カテゴリでは、トレース コンテキスト ヘッダーが含まれれるメッセージの関連付け ID が追跡されます。The distributed tracing category tracks the correlation IDs for messages that carry the trace context header. これらのログを完全に有効にするには、IoT Hub 分散トレース (プレビュー) を使用した IoT アプリケーションの エンド ツー エンドの分析と診断に関する記事に従って、クライアント側のコードを更新する必要があります。To fully enable these logs, client-side code must be updated by following Analyze and diagnose IoT applications end-to-end with IoT Hub distributed tracing (preview).

correlationIdW3C トレース コンテキストの提案に準拠していることに注意してください。これには、trace-idspan-id が含まれます。Note that correlationId conforms to the W3C Trace Context proposal, where it contains a trace-id as well as a span-id.

IoT Hub D2C (device-to-cloud) のログIoT Hub D2C (device-to-cloud) logs

IoT Hub では、有効なトレース プロパティを含むメッセージが IoT Hub に到着すると、このログが記録されます。IoT Hub records this log when a message containing valid trace properties arrives at IoT Hub.

{
    "records":
    [
        {
            "time": "UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "DiagnosticIoTHubD2C",
            "category": "DistributedTracing",
            "correlationId": "00-8cd869a412459a25f5b4f31311223344-0144d2590aacd909-01",
            "level": "Information",
            "resultType": "Success",
            "resultDescription":"Receive message success",
            "durationMs": "",
            "properties": "{\"messageSize\": 1, \"deviceId\":\"<deviceId>\", \"callerLocalTimeUtc\": : \"2017-02-22T03:27:28.633Z\", \"calleeLocalTimeUtc\": \"2017-02-22T03:27:28.687Z\"}",
            "location": "Resource location"
        }
    ]
}

ここで、IoT Hub のクロックがデバイスのクロックと同期していない可能性があり、経過時間を計算すると誤解を招く場合があるので、durationMs は計算されません。Here, durationMs is not calculated as IoT Hub's clock might not be in sync with the device clock, and thus a duration calculation can be misleading. properties セクションのタイムスタンプを使用するロジックを記述して、device-to-cloud 待機時間のスパイクをキャプチャすることをお勧めします。We recommend writing logic using the timestamps in the properties section to capture spikes in device-to-cloud latency.

プロパティProperty TypeType 説明Description
messageSizemessageSize 整数Integer device-to-cloud メッセージのサイズ (バイト単位)The size of device-to-cloud message in bytes
deviceIddeviceId ASCII の 7 ビットの英数字の文字列String of ASCII 7-bit alphanumeric characters デバイスの IDThe identity of the device
callerLocalTimeUtccallerLocalTimeUtc UTC タイムスタンプUTC timestamp デバイスのローカル クロックによって報告されたメッセージの作成時刻The creation time of the message as reported by the device local clock
calleeLocalTimeUtccalleeLocalTimeUtc UTC タイムスタンプUTC timestamp IoT Hub サービス側のクロックによって報告された、IoT Hub のゲートウェイへのメッセージの到着時刻The time of message arrival at the IoT Hub's gateway as reported by IoT Hub service side clock
IoT Hub のイングレス ログIoT Hub ingress logs

有効なトレース プロパティを含むメッセージが内部または組み込みの Event Hub に書き込むと、IoT Hub でこのログが記録されます。IoT Hub records this log when message containing valid trace properties writes to internal or built-in Event Hub.

{
    "records":
    [
        {
            "time": "UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "DiagnosticIoTHubIngress",
            "category": "DistributedTracing",
            "correlationId": "00-8cd869a412459a25f5b4f31311223344-349810a9bbd28730-01",
            "level": "Information",
            "resultType": "Success",
            "resultDescription":"Ingress message success",
            "durationMs": "10",
            "properties": "{\"isRoutingEnabled\": \"true\", \"parentSpanId\":\"0144d2590aacd909\"}",
            "location": "Resource location"
        }
    ]
}

properties セクションでは、このログにはメッセージのイングレスに関する追加情報が含まれていますIn the properties section, this log contains additional information about message ingress.

プロパティProperty TypeType 説明Description
isRoutingEnabledisRoutingEnabled StringString true または false。IoT Hub でメッセージのルーティングが有効になっているかどうかを示しますEither true or false, indicates whether or not message routing is enabled in the IoT Hub
parentSpanIdparentSpanId StringString 親メッセージの span-id。この場合は、D2C のメッセージ トレースですThe span-id of the parent message, which would be the D2C message trace in this case
IoT Hub のエグレス ログIoT Hub egress logs

ルーティングが有効になっていて、メッセージがエンドポイントに書き込まれると、IoT Hub でこのログが記録されます。IoT Hub records this log when routing is enabled and the message is written to an endpoint. ルーティングが有効でない場合、IoT Hub はこのログを記録しません。If routing is not enabled, IoT Hub doesn't record this log.

{
    "records":
    [
        {
            "time": "UTC timestamp",
            "resourceId": "Resource Id",
            "operationName": "DiagnosticIoTHubEgress",
            "category": "DistributedTracing",
            "correlationId": "00-8cd869a412459a25f5b4f31311223344-98ac3578922acd26-01",
            "level": "Information",
            "resultType": "Success",
            "resultDescription":"Egress message success",
            "durationMs": "10",
            "properties": "{\"endpointType\": \"EventHub\", \"endpointName\": \"myEventHub\", \"parentSpanId\":\"349810a9bbd28730\"}",
            "location": "Resource location"
        }
    ]
}

properties セクションでは、このログにはメッセージのイングレスに関する追加情報が含まれていますIn the properties section, this log contains additional information about message ingress.

プロパティProperty TypeType 説明Description
endpointNameendpointName StringString ルーティング エンドポイントの名前The name of the routing endpoint
endpointTypeendpointType StringString ルーティング エンドポイントの種類The type of the routing endpoint
parentSpanIdparentSpanId StringString 親メッセージの span-id。この場合は、IoT Hub のイングレス メッセージ トレースですThe span-id of the parent message, which would be the IoT Hub ingress message trace in this case

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

診断設定を使用してイベント ログを設定した後は、ログを読み取るアプリケーションを作成できます。これにより、ログの情報を基にしてアクションを実行できるようになります。After you set up event logging through diagnostics settings, you can create applications that read out the logs so that you can take action based on the information in them. イベント ハブからログを取得するサンプル コードを次に示します。This sample code retrieves logs from an event hub:

class Program
{ 
    static string connectionString = "{your AMS eventhub endpoint connection string}";
    static string monitoringEndpointName = "{your AMS event hub endpoint name}";
    static EventHubClient eventHubClient;
    //This is the Diagnostic Settings schema
    class AzureMonitorDiagnosticLog
    {
        string time { get; set; }
        string resourceId { get; set; }
        string operationName { get; set; }
        string category { get; set; }
        string level { get; set; }
        string resultType { get; set; }
        string resultDescription { get; set; }
        string durationMs { get; set; }
        string callerIpAddress { get; set; }
        string correlationId { get; set; }
        string identity { get; set; }
        string location { get; set; }
        Dictionary<string, string> properties { get; set; }
    };

    static void Main(string[] args)
    {
        Console.WriteLine("Monitoring. Press Enter key to exit.\n");
        eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, monitoringEndpointName);
        var d2cPartitions = eventHubClient.GetRuntimeInformationAsync().PartitionIds;
        CancellationTokenSource cts = new CancellationTokenSource();
        var tasks = new List<Task>();
        foreach (string partition in d2cPartitions)
        {
            tasks.Add(ReceiveMessagesFromDeviceAsync(partition, cts.Token));
        }
        Console.ReadLine();
        Console.WriteLine("Exiting...");
        cts.Cancel();
        Task.WaitAll(tasks.ToArray());
    }

    private static async Task ReceiveMessagesFromDeviceAsync(string partition, CancellationToken ct)
    {
        var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, DateTime.UtcNow);
        while (true)
        {
            if (ct.IsCancellationRequested)
            {
                await eventHubReceiver.CloseAsync();
                break;
            }
            EventData eventData = await eventHubReceiver.ReceiveAsync(new TimeSpan(0,0,10));
            if (eventData != null)
            {
                string data = Encoding.UTF8.GetString(eventData.GetBytes());
                Console.WriteLine("Message received. Partition: {0} Data: '{1}'", partition, data);
                var deserializer = new JavaScriptSerializer();
                //deserialize json data to azure monitor object
                AzureMonitorDiagnosticLog message = new JavaScriptSerializer().Deserialize<AzureMonitorDiagnosticLog>(result);
            }
        }
    }
}

Azure Resource Health の使用Use Azure Resource Health

Azure Resource Health を使用すると、IoT Hub が実行中かどうかを監視できます。Use Azure Resource Health to monitor whether your IoT hub is up and running. また、リージョンで発生した停電が IoT Hub の正常性に影響を与えているかどうかを知ることもできます。You can also learn whether a regional outage is impacting the health of your IoT hub. Azure IoT Hub の正常性状態に関する詳細を理解するには、Azure Monitor を使用することをお勧めします。To understand specific details about the health state of your Azure IoT Hub, we recommend that you Use Azure Monitor.

Azure IoT Hub では、リージョン レベルでの正常性が示されます。Azure IoT Hub indicates health at a regional level. リージョンでの停電が IoT ハブに影響している場合、正常性状態は [不明] と表示されます。If a regional outage impacts your IoT hub, the health status shows as Unknown. 詳細については、「Azure Resource Health で利用できるリソースの種類と正常性チェック」を参照してください。To learn more, see Resource types and health checks in Azure resource health.

IoT Hub の正常性を確認するには、次の手順を実行します。To check the health of your IoT hubs, follow these steps:

  1. Azure Portal にサインインします。Sign in to the Azure portal.

  2. [Service Health](サービス正常性) > [リソース正常性] に移動します。Navigate to Service Health > Resource health.

  3. ドロップダウン ボックスから、サブスクリプションを選択し、リソースの種類として [IoT ハブ] を選択します。From the drop-down boxes, select your subscription then select IoT Hub as the resource type.

正常性データを解釈する方法の詳細については、「Azure Resource Health の概要」を参照してください。To learn more about how to interpret health data, see Azure resource health overview.

次の手順Next steps