次の方法で共有


メトリックの収集と転送

対象:IoT Edge 1.5 チェックマーク IoT Edge 1.5

重要

IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は 2024 年 11 月 12 日に終了しました。 以前のリリースを使用している場合は、「Update IoT Edgeを参照してください。

Azure Monitor と組み込みのメトリックの統合を使用すると、IoT Edge フリートをリモートで監視できます。 デバイスでこの機能を有効にするには、metrics-collector モジュールをデプロイに追加し、モジュール メトリックを収集してAzure Monitorに転送するように構成します。

IoT Edge デバイスで監視を構成するには、tutorial に従ってIoT Edge デバイスを監視します。 メトリック コレクター モジュールをデバイスに追加する方法について説明します。 この記事では、監視アーキテクチャの概要と、デバイスでメトリックを構成するためのオプションについて説明します。

Azure Monitor for IoT Edge(4:06)

アーキテクチャ

IoT Hub を使用したメトリック監視アーキテクチャのスクリーンショット

説明
1 すべてのモジュールは、 Prometheus データ モデルを使用してメトリックを出力する必要があります。 組み込みのメトリックを使用すると、既定で広範なワークロードの可視性が実現されますが、カスタム モジュールではシナリオ固有のメトリックを出力して監視ソリューションを強化することもできます。 カスタム メトリックの追加 に関する記事のオープンソース ライブラリを使用してカスタム モジュールをインストルメント化する方法について説明します。
2️ metrics-collector モジュールは、ワークロード モジュールのメトリックを収集し、デバイス外に転送する、Microsoft が提供するIoT Edge モジュールです。 メトリック コレクションでは "プル" モデルが使用されます。 収集頻度、エンドポイント、フィルターを構成して、モジュールから送信されるデータを制御できます。 詳細については、この記事の 「メトリック コレクターの構成 」セクションを参照してください。
3️ metrics-collector モジュールからクラウドにメトリックを送信するには、2 つのオプションがあります。 Option 1 は、メトリックを Log Analytics.1 収集されたメトリックは、 という固定のネイティブ テーブルを使用して、指定したLog Analytics ワークスペースに取り込まれます。 このテーブルのスキーマは、Prometheus メトリック データ モデルと互換性があります。

このオプションを使用するには、送信ポート 443 でワークスペースにアクセスする必要があります。 Log Analytics ワークスペース ID とキーは、モジュール構成の一部として指定する必要があります。 制限付きネットワークで有効にするには、この記事 の「制限付きネットワーク アクセス シナリオで有効にする 」セクションを参照してください。
4️ 各メトリック エントリには、の一部として指定したが含まれています。 この関連付けにより、メトリックが指定したリソース (たとえば、IoT Hub) に自動的にリンクされます。 その結果、キュレートされたIoT Edge ブック テンプレートは、リソースに対してクエリを発行することでメトリックを取得できます。

また、この方法により、複数の IoT ハブで 1 つのLog Analytics ワークスペースをメトリック データベースとして安全に共有できます。
5️ Option 2 はメトリックを IoT Hub に送信します。 コレクターモジュールを構成して、収集したメトリックを UTF-8 でエンコードされた JSON デバイスからクラウドへのメッセージとして モジュールを経由して送信できます。 このオプションにより、IoT Hub エンドポイントのみに対する外部アクセスが許可されている、ロックダウンされたIoT Edgeデバイスの監視が解除されます。 また、子デバイスが親デバイスにのみアクセスできる入れ子になった構成で、子IoT Edgeデバイスを監視することもできます。
6️ メトリックがIoT Hub経由でルーティングされる場合は、(1 回限り) クラウド ワークフローを設定する必要があります。 ワークフローは、metrics-collector モジュールから到着したメッセージを処理し、Log Analytics ワークスペースに送信します。 このワークフローを使用すると、この省略可能なパスを介して受信したメトリックに対しても、キュレーションされた視覚化とアラートの機能が有効になります。 このクラウド ワークフローを設定する方法の詳細については、この記事の 「メトリックのルーティング 」セクションを参照してください。

1 現時点では、option 1 を使用してIoT Edge デバイスからLog Analyticsにメトリックを直接転送することは、最小限のセットアップを必要とするより簡単なパスです。 最初のオプションは、特定のシナリオで option 2 アプローチを要求しない限り、IoT Edge デバイスがIoT Hubとのみ通信するように推奨されます。

メトリック コレクター モジュール

Microsoft 提供の metrics-collector モジュールをIoT Edgeデプロイに追加して、モジュール メトリックを収集し、Azure Monitorに送信できます。 モジュール コードはopen sourceされ、IoT Edge GitHub リポジトリで使用できます。

メトリック コレクター モジュールは、Linux X64、ARM32、ARM64、Windows X64 (バージョン 1809) をサポートするマルチアーキテクチャ Docker コンテナー イメージとして提供されます。 の Microsoft Artifact Registry から一般公開されています。

メトリック コレクターの構成

環境変数を使用してメトリック コレクターを構成します。 最小限に抑えて、この表で 必須 としてマークされた変数を指定する必要があります。

環境変数の名前 説明
ResourceId デバイスが通信する IoT Hub のリソース ID。 詳細については、「 リソース ID」を参照してください。

必須

既定値: none
UploadTarget メトリックを HTTPS 経由でAzure Monitorに直接送信するか、D2C メッセージとしてIoT Hubするかを制御します。 詳細については、「アップロードターゲット」を参照してください。

AzureMonitor または IoTMessage のいずれかを指定できます

必須ではありません

既定値: AzureMonitor
LogAnalyticsWorkspaceId Log Analytics ワークスペース ID

UploadTarget が AzureMonitor の場合にのみ必要です

既定値: none
LogAnalyticsSharedKey Log Analytics ワークスペース キー

UploadTarget が AzureMonitor の場合にのみ必要です

既定値: none
ScrapeFrequencyInSecs メトリックを収集して転送する定期的な時間間隔 (秒単位)。

例: 600

必須ではありません

既定値: 300
MetricsEndpointsCSV Prometheus メトリックを収集するエンドポイントのコンマ区切りの一覧。 メトリックを収集するモジュール エンドポイントはすべて、この一覧に含まれている必要があります。

例: , ,

必須ではありません

既定値: ,
AllowedMetrics 収集するメトリックの一覧。他のメトリックはすべて無視されます。 空の文字列に設定すると無効になります。 詳細については、「 許可リストとブロック リスト」を参照してください。

例: metricToScrape{quantile=0.99}[endpoint=]

必須ではありません

既定値: "空"
BlockedMetrics 無視するメトリックの一覧。 AllowedMetrics をオーバーライドします。そのため、メトリックが両方の一覧に含まれている場合、そのメトリックは報告されません。 詳細については、「 許可リストとブロック リスト」を参照してください。

例: metricToIgnore{quantile=0.5}[endpoint=], docker_container_disk_write_bytes

必須ではありません

既定値: "空"
CompressForUpload メトリックをアップロードするときに圧縮を使用する必要があるかどうかを制御します。 すべてのアップロード ターゲットに適用されます。

例: true

必須ではありません

既定値: true
AzureDomain メトリックをLog Analyticsに直接取り込むときに使用する最上位のAzure ドメインを指定します。

例: azure.us

必須ではありません

既定値: azure.com

リソースID

メトリック コレクター モジュールには、IoT Edge デバイスが属している IoT ハブのAzure Resource Manager ID が必要です。 ResourceID 環境変数の値として、この ID を入力します。

リソース ID は、次の形式を使用します: 。 リソース ID は、Azure ポータルの IoT ハブの Properties ページにあります。

IoT Hub のプロパティからリソース ID を取得する方法を示すスクリーンショットです。

または、 az resource show コマンドを使用して ID を取得できます。

az resource show -g <resource group> -n <hub name> --resource-type "Microsoft.Devices/IoTHubs"

ターゲットをアップロードする

UploadTarget 構成オプションは、メトリックをAzure MonitorまたはIoT Hubに直接送信するかどうかを制御します。

UploadTarget を IoTMessage に設定すると、モジュールによってメトリックが IoT メッセージとして発行されます。 エンドポイント は、これらのメッセージを UTF8 でエンコードされた JSON として出力します。 たとえば、IoT Edge Metrics Collector モジュールの名前が IoTEdgeMetricsCollector の場合、エンドポイントは /messages/modules/IoTEdgeMetricsCollector/outputs/metricOutput です。 形式は次のとおりです。

[{
    "TimeGeneratedUtc": "<time generated>",
    "Name": "<prometheus metric name>",
    "Value": <decimal value>,
    "Label": {
        "<label name>": "<label value>"
    }
}, {
    "TimeGeneratedUtc": "2020-07-28T20:00:43.2770247Z",
    "Name": "docker_container_disk_write_bytes",
    "Value": 0.0,
    "Label": {
        "name": "AzureMonitorForIotEdgeModule"
    }
}]

許可リストとブロック リスト

および構成オプションは、メトリック セレクターのスペースまたはコンマ区切りのリストを受け入れます。 メトリックは一覧と照合され、いずれかの一覧の 1 つまたは複数のメトリックに一致した場合は、追加または除外されます。

メトリック セレクターでは、PromQL クエリ言語のサブセットに似た形式を使用します。

metricToSelect{quantile=0.5,otherLabel=~Re[ge]*|x}[http://VeryNoisyModule:9001/metrics]

メトリック セレクターは、次の 3 つの部分で構成されます。

メトリック名 ()。

  • メトリック名には、ワイルドカード (任意の文字) と (任意の 1 文字) を使用できます。 たとえば、 は と に一致しますが、 には一致しません。 は と に一致しますが、 には一致しません。
  • メトリック セレクターのこのコンポーネントは必須です。

ラベルに基づくセレクター ()。

  • 中かっこに複数のメトリック値を含めます。 複数の値はコンマで区切る必要があります。
  • セレクター内の少なくともすべてのラベルが存在し、一致する場合にメトリックが一致します。
  • PromQL と同様に、次の照合演算子を使用できます。
    • は、指定された文字列と厳密に等しいラベルに一致します (大文字と小文字が区別されます)。
    • 指定された文字列と厳密に一致しないラベルに合致させます。
    • は、ラベルを指定された正規表現に一致させます。 例:
    • は、指定された正規表現に適合しないラベルを見つけます。
    • 正規表現は完全に固定されます (各正規表現の先頭と末尾には、 と が自動的に追加されます)。
    • メトリック セレクターのこのコンポーネントはオプションです。

エンドポイント セレクター ()。

  • URL は、 に示されている URL と完全に一致している必要があります。
  • メトリック セレクターのこのコンポーネントはオプションです。

メトリックは、選択されたセレクターのすべての部分に一致する必要があります。 名前と一致し、一致する値を持つすべての同じラベルを持ち、指定されたエンドポイントから取得する必要があります。 たとえば、 がセレクターの と一致しません。 AND に似た動作ではなく、複数のセレクターを使用して OR に似た動作を作成します。

たとえば、モジュールの任意のラベルでカスタム メトリックのを許可し、ラベル でから同じメトリックのみを許可するには、次のセレクターをに追加します。

mem{}[http://module1:9001/metrics] mem{agg="p99"}[http://module2:9001/metrics]

または、すべてのラベルまたはエンドポイントにカスタム メトリック と を許可するには、 に次を追加します。

mem cpu

制限付きネットワーク アクセス シナリオで有効にする

メトリックを Log Analytics ワークスペースに直接送信する場合は、次の URL への送信アクセスを許可します。

  • https://<LOG_ANALYTICS_WORKSPACE_ID>.ods.opinsights.azure.com/*
  • https://<LOG_ANALYTICS_WORKSPACE_ID>.oms.opinsights.azure.com/*

プロキシに関する考慮事項

メトリック コレクター モジュールは、.NET Core で記述されています。 システム モジュールの場合と同じガイダンスを使用 して、プロキシ サーバー経由の通信を許可します。

ローカル モジュールからのメトリック収集では、 プロトコルが使用されます。 環境変数を設定することによって、プロキシ サーバー経由の通信からローカル通信を除外します。 の値を、除外するホスト名のコンマ区切りの一覧に設定します。 ホスト名にはモジュール名を使用します。 例: edgeHub,edgeAgent,myCustomModule。

ルート指標

メトリックをLog Analyticsに直接送信するのではなく、IoT Hubを介して取り込む必要がある場合があります。 たとえば、入れ子になった構成でIoT Edgeデバイスを監視する場合子デバイスは親デバイスのIoT Edge ハブにのみアクセスできます。 もう 1 つの例は、IoT Hubにのみ送信ネットワーク アクセスを持つIoT Edge デバイスを展開することです。

このシナリオで監視を有効にするには、メトリック コレクター モジュールを構成して、edgeHub モジュールを介してメトリックを device-to-cloud (D2C) メッセージとして送信します。 環境変数をコレクターでに設定して、機能を有効にします。

ヒント

コレクター モジュールからIoT Hubにメトリック メッセージを配信する edgeHub ルートを必ず追加してください。 ルートは のようになります。

このオプションでは、IoT Hubに到着したメトリック メッセージを Log Analytics ワークスペースに配信するための追加のセットアップ、クラウド ワークフローのセットアップが必要です。 この設定がないと、統合の他の部分 ( キュレーションされた視覚化 や アラート など) は機能しません。

このオプションでは、追加コストに注意してください。 メトリック メッセージは、IoT Hub メッセージ クォータに対してカウントされます。 また、Log Analyticsインジェストとクラウド ワークフロー リソースに対しても課金されます。

サンプル クラウド ワークフロー

IoT HubからLog Analyticsにメトリック メッセージを配信するクラウド ワークフローは、IoT Edgeログ記録と監視のサンプルの一部として使用できます。 既存のクラウド リソースにサンプルをデプロイすることも、運用環境のデプロイ リファレンスとして使用することもできます。

次のステップ

Azure Monitorが提供するキュレーションされた視覚化の種類を確認する。