オンライン エンドポイントを監視する

Azure Machine Learning は、Azure Monitor との統合を使用して、オンライン エンドポイントのメトリックとログを追跡および監視します。 メトリックをグラフで表示し、エンドポイントとデプロイメントを比較し、Azure portal ダッシュボードにピン留めし、アラートを構成し、ログ テーブルからクエリを実行し、サポートされているターゲットにログをプッシュすることができます。 Application Insights を使用して、ユーザー コンテナーからのイベントを分析することもできます。

  • メトリック: 要求の待機時間、1 分あたりの要求数、1 秒あたりの新しい接続数、ネットワーク バイトなどのエンドポイント レベルのメトリックの場合は、ドリルダウンしてデプロイ レベルまたは状態レベルで詳細を確認できます。 CPU/GPU 使用率、メモリ、ディスク使用率などのデプロイ レベルのメトリックも、インスタンス レベルにドリルダウンできます。 Azure Monitor では、グラフ内のこれらのメトリックを追跡し、ダッシュボードとアラートを設定して、さらに分析を行うことができます。

  • ログ: Kusto クエリ構文を使ってログに対してクエリを実行できる Log Analytics ワークスペースにメトリックを送信できます。 Azure Storage アカウントや Event Hubs にメトリックを送信して、さらに処理を行うこともできます。 また、オンライン エンドポイント関連のイベント、トラフィック、コンソール (コンテナー) ログに専用のログ テーブルを使うことができます。 Kusto クエリを使うと、複数のテーブルの複雑な分析と結合を行うことができます。

  • Application Insights: キュレーションされた環境には Application Insights との統合が含まれています。これは、オンライン デプロイを作成するときに有効または無効にすることができます。 組み込みのメトリックとログは Application Insights に送信され、Application Insights の組み込み機能 (ライブ メトリック、トランザクション検索、エラー、パフォーマンスなど) を使用してさらに分析できます。

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

  • メトリックとログを表示および追跡するための適切な方法を選択する
  • オンライン エンドポイントのメトリックを表示する
  • メトリックのダッシュボードを作成する
  • メトリック アラートの作成
  • オンライン エンドポイントのログを表示する
  • Application Insights を使用してメトリックとログを追跡する

前提条件

  • Azure Machine Learning のオンライン エンドポイントをデプロイします。
  • 少なくとも、エンドポイントに対する閲覧者アクセス権が必要です。

メトリック

オンライン エンドポイントまたはデプロイのメトリック ページは、Azure portal で表示できます。 これらのメトリック ページに簡単にアクセスするには、Azure Machine Learning スタジオ ユーザー インターフェイス (特にエンドポイントのページの [詳細] タブ) で使用できるリンクを使用します。 これらのリンクに従うと、エンドポイントまたはデプロイの Azure portal の正確なメトリック ページに移動します。 または、Azure portal に移動して、エンドポイントまたはデプロイのメトリック ページを検索することもできます。

スタジオで利用可能なリンクを使用してメトリック ページにアクセスするには

  1. Azure Machine Learning Studio に移動します。

  2. 左側のナビゲーション バーで、 [エンドポイント] ページを選択します。

  3. エンドポイントの名前をクリックして、エンドポイントを選択します。

  4. エンドポイントの [属性] セクションで [メトリックの表示] を選択して、Azure portal でエンドポイントのメトリック ページを開きます。

  5. 利用可能な各デプロイのセクションで [メトリックを表示] を選択して、Azure portal でデプロイのメトリック ページを開きます。

    スタジオ UI からエンドポイントとデプロイのメトリックにアクセスする方法を示すスクリーンショット。

メトリックには、Azure portal から直接アクセスできます。

  1. Azure portal にサインインします。

  2. オンライン エンドポイントまたはデプロイ リソースに移動します。

    オンライン エンドポイントとデプロイは、それらを所有しているリソース グループに移動することによって見つけることができる、Azure Resource Manager (ARM) リソースです。 [Machine Learning online endpoint](Machine Learning オンライン エンドポイント)[Machine Learning online deployment](Machine Learning オンライン デプロイ) というリソースの種類を探します。

  3. 左側の列で、 [メトリック] を選択します。

使用可能なメトリック

選択したリソースに応じて、表示されるメトリックは異なります。 メトリックのスコープは、オンライン エンドポイントとオンライン デプロイで異なります。

エンドポイント スコープのメトリック

カテゴリ メトリック REST API での名前 出荷単位 集計 Dimensions 期間粒度 DS エクスポート
トラフィック アクティブな接続

クライアントからのアクティブになっているコンカレント TCP 接続の合計数。
ConnectionsActive Count Average <なし> PT1M いいえ
トラフィック 1 分あたりのデータ収集エラー数

1 分あたりに破棄されたデータ収集イベントの数。
DataCollectionErrorsPerMinute カウント Minimum、Maximum、Average deploymentreasontype PT1M いいえ
トラフィック 1 分あたりのデータ収集イベント数

1 分あたりに処理されたデータ収集イベントの数。
DataCollectionEventsPerMinute カウント Minimum、Maximum、Average deploymenttype PT1M いいえ
トラフィック ネットワーク バイト数

エンドポイントで処理された 1 秒あたりのバイト数。
NetworkBytes BytesPerSecond Average <なし> PT1M いいえ
トラフィック 1 秒あたりの新しい接続数

クライアントから確立された 1 秒あたりの新しい TCP 接続の平均数。
NewConnectionsPerSecond CountPerSecond Average <なし> PT1M いいえ
トラフィック 要求の待機時間

要求が応答されるまでにかかった平均完了時間間隔 (ミリ秒単位)
RequestLatency ミリ秒 Average deployment PT1M はい
トラフィック 要求の待機時間 P50

選択した期間に収集されたすべての要求待機時間値によって集計された P50 要求の平均待機時間
RequestLatency_P50 ミリ秒 Average deployment PT1M はい
トラフィック 要求の待機時間 P90

選択した期間に収集されたすべての要求待機時間値によって集計された P90 要求の平均待機時間
RequestLatency_P90 ミリ秒 Average deployment PT1M はい
トラフィック 要求の待機時間 P95

選択した期間に収集されたすべての要求待機時間値によって集計された P95 要求の平均待機時間
RequestLatency_P95 ミリ秒 Average deployment PT1M はい
トラフィック 要求の待機時間 P99

選択した期間に収集されたすべての要求待機時間値によって集計された P99 要求の平均待機時間
RequestLatency_P99 ミリ秒 Average deployment PT1M はい
トラフィック 1 分あたりの要求数

1 分以内にオンライン エンドポイントに送信された要求の数
RequestsPerMinute Count Average deploymentstatusCodestatusCodeClass, modelStatusCode PT1M いいえ

帯域幅調整

マネージド オンライン エンドポイントのクォータ制限を超えると、帯域幅が調整されます。 制限の詳細については、オンライン エンドポイントの制限に関する記事を参照してください。 要求が調整されるかどうかを確認するには:

  • "ネットワーク バイト数" メトリックを監視する
  • 応答トレーラーには ms-azureml-bandwidth-request-delay-ms フィールドと ms-azureml-bandwidth-response-delay-ms フィールドが与えられます。 フィールドの値は帯域幅調整の遅延 (ミリ秒単位) です。

詳細については、「帯域幅制限の問題」を参照してください。

デプロイ スコープのメトリック

カテゴリ メトリック REST API での名前 出荷単位 集計 Dimensions 期間粒度 DS エクスポート
リソース CPU メモリ使用率

インスタンスのメモリ使用率 (%)。 使用率は 1 分間隔で報告されます。
CpuMemoryUtilizationPercentage パーセント Minimum、Maximum、Average instanceId PT1M はい
リソース CPU 使用率

インスタンスの CPU 使用率 (%)。 使用率は 1 分間隔で報告されます。
CpuUtilizationPercentage パーセント Minimum、Maximum、Average instanceId PT1M はい
リソース 1 分あたりのデータ収集エラー数

1 分あたりに破棄されたデータ収集イベントの数。
DataCollectionErrorsPerMinute カウント Minimum、Maximum、Average instanceIdreasontype PT1M いいえ
リソース 1 分あたりのデータ収集イベント数

1 分あたりに処理されたデータ収集イベントの数。
DataCollectionEventsPerMinute カウント Minimum、Maximum、Average instanceIdtype PT1M いいえ
リソース デプロイ容量

デプロイ内のインスタンスの数。
DeploymentCapacity カウント Minimum、Maximum、Average instanceIdState PT1M いいえ
リソース ディスク使用量

インスタンスのディスク使用率 (%)。 使用率は 1 分間隔で報告されます。
DiskUtilization パーセント Minimum、Maximum、Average instanceIddisk PT1M はい
リソース GPU エネルギー (ジュール単位)

GPU ノードでのコンセントのエネルギーの間隔 (ジュール単位)。 エネルギーは 1 分間隔で報告されます。
GpuEnergyJoules カウント Minimum、Maximum、Average instanceId PT1M いいえ
リソース GPU メモリ使用率

インスタンスの GPU メモリ使用率 (%)。 使用率は 1 分間隔で報告されます。
GpuMemoryUtilizationPercentage パーセント Minimum、Maximum、Average instanceId PT1M はい
リソース GPU 使用率

インスタンスの GPU 使用率 (%)。 使用率は 1 分間隔で報告されます。
GpuUtilizationPercentage パーセント Minimum、Maximum、Average instanceId PT1M はい
トラフィック 要求の待機時間 P50

選択した期間に収集されたすべての要求待機時間値によって集計された P50 要求の平均待機時間
RequestLatency_P50 ミリ秒 Average <なし> PT1M はい
トラフィック 要求の待機時間 P90

選択した期間に収集されたすべての要求待機時間値によって集計された P90 要求の平均待機時間
RequestLatency_P90 ミリ秒 Average <なし> PT1M はい
トラフィック 要求の待機時間 P95

選択した期間に収集されたすべての要求待機時間値によって集計された P95 要求の平均待機時間
RequestLatency_P95 ミリ秒 Average <なし> PT1M はい
トラフィック 要求の待機時間 P99

選択した期間に収集されたすべての要求待機時間値によって集計された P99 要求の平均待機時間
RequestLatency_P99 ミリ秒 Average <なし> PT1M はい
トラフィック 1 分あたりの要求数

1 分以内にオンライン デプロイに送信された要求の数
RequestsPerMinute Count Average envoy_response_code PT1M いいえ

ダッシュボードとアラートを作成する

Azure Monitor を使用すると、メトリックに基づいてダッシュボードとアラートを作成できます。

ダッシュボードを作成してクエリを視覚化する

カスタム ダッシュボードを作成して、オンライン エンドポイントのメトリックなど、複数のソースからのメトリックを Azure portal で視覚化できます。 ダッシュボードの作成とクエリの視覚化の詳細については、「ログ データを使用したダッシュボード」および「アプリケーション データを使用したダッシュボード」を参照してください。

アラートを作成する

また、カスタム アラートを作成して、オンライン エンドポイントに対する重要な状態の更新を通知することもできます。

  1. メトリック ページの右上で、 [新しいアラート ルール] を選択します。

    赤いボックスで囲まれた [新しいアラート ルール] ボタンを示すスクリーンショット。

  2. 条件名を選択して、どのようなときにアラートがトリガーされるかを指定します。

    赤いボックスで囲まれた [シグナル ロジックの構成] ボタンを示すスクリーンショット。

  3. [Add action groups](アクション グループの追加)>[Create action groups](アクション グループの作成) の順に選択して、アラートがトリガーされたときに何が起きるようにするかを指定します。

  4. [アラート ルールの作成] を選択して、アラートの作成を完了します。

詳細については、「Azure Monitor アラート ルールの作成」を参照してください。

メトリックに基づいて自動スケーリングを有効にする

UI またはコードを使用して、メトリックを使用したデプロイの自動スケーリングを有効にすることができます。 コード (CLI または SDK) を使用する場合は、自動スケーリングをトリガーする条件において、使用可能なメトリックの表に示されているメトリック ID を使用できます。 詳しくは、「オンライン エンドポイントを自動スケーリングする」をご覧ください。

ログ

オンライン エンドポイントに対して次の 3 つのログを有効にできます。

  • AmlOnlineEndpointTrafficLog: 要求の情報を確認する場合は、トラフィック ログを有効にすることを選択できます。 いくつかのケースを次に示します。

    • 応答が 200 でない場合、[ResponseCodeReason] 列の値を調べて、発生した内容を確認します。 また、オンライン エンドポイントのトラブルシューティングに関する記事の「HTTPS 状態コード」セクションで理由を確認します。

    • [ModelStatusCode] 列と [ModelStatusReason] 列でモデルの応答コードと応答の理由を確認できます。

    • 合計所要時間、要求/応答所要時間、ネットワーク帯域幅の調整によって発生した延期期間など、要求の所要時間を確認できます。 ログを調べて、内訳の待機時間を確認できます。

    • 最近の要求数または失敗した要求数を確認する場合に、 ログを有効にすることもできます。

  • AmlOnlineEndpointConsoleLog: コンテナーがコンソールに出力するログを含めます。 いくつかのケースを次に示します。

    • コンテナーの起動に失敗した場合、コンソール ログがデバッグに役立つ場合があります。

    • コンテナーのビヘイビアーを監視し、すべての要求が正しく処理されていることを確認します。

    • コンソール ログに要求 ID を書き込みます。 Log Analytics ワークスペースで要求 ID、AmlOnlineEndpointConsoleLog、AmlOnlineEndpointTrafficLog を結合すると、オンライン エンドポイントのネットワーク エントリ ポイントからコンテナーへの要求をトレースできます。

    • また、このログを使って、モデルで各要求を処理するために必要な時間を決定する際にパフォーマンス分析を行うこともできます。

  • AmlOnlineEndpointEventLog: コンテナーのライフ サイクルに関するイベント情報を含めます。 現在、次の種類のイベントに関する情報を提供しています。

    名前 メッセージ
    バックオフ Back-off restarting failed container (失敗したコンテナーの再起動をバックオフしました)
    プルされました Container image "<IMAGE_NAME>" already present on machine (コンテナー イメージ "<IMAGE_NAME>" がマシンに既に存在しています)
    強制終了しています Container inference-server failed liveness probe, will be restarted (コンテナー inference-server の liveness probe が失敗し、再起動されます)
    作成済み Created container image-fetcher (コンテナー image-fetcher を作成しました)
    作成済み Created container inference-server (コンテナー inference-server を作成しました)
    作成済み Created container model-mount (コンテナー model-mount を作成しました)
    LivenessProbeFailed Liveness probe failed: <FAILURE_CONTENT> (liveness probe が失敗しました: <FAILURE_CONTENT>)
    ReadinessProbeFailed Readiness probe failed: <FAILURE_CONTENT> (readiness probe が失敗しました: <FAILURE_CONTENT>)
    Started Started container image-fetcher (コンテナー image-fetcher を開始しました)
    Started Started container inference-server (コンテナー inference-server を開始しました)
    Started Started container model-mount (コンテナー model-mount を開始しました)
    強制終了しています Stopping container inference-server (コンテナー inference-server を停止しています)
    強制終了しています Stopping container model-mount (コンテナー model-mount を停止しています)

ログを有効または無効にする方法

重要

ログでは Azure Log Analytics を使用します。 現在 Log Analytics ワークスペースがない場合は、Azure portal での Log Analytics ワークスペースの作成に関するページの手順を使用して作成できます。

  1. Azure portal で、エンドポイントを含むリソース グループに移動し、エンドポイントを選択します。

  2. ページの左側にある [監視] セクションで [診断設定] を選択し、[設定の追加] を選択します。

  3. 有効にするログ カテゴリを選択し、[Log Analytics ワークスペースへの送信] を選択してから、使用する Log Analytics ワークスペースを選択します。 最後に、[診断設定の名前] を入力し、[保存] を選択します。

    [診断設定] ダイアログのスクリーンショット。

    重要

    Log Analytics ワークスペースへの接続が有効になるまでに最大 1 時間かかる場合があります。 次の手順に進む前に、1 時間待ちます。

  4. エンドポイントにスコアリング要求を送信します。 このアクティビティにより、ログにエントリが作成されます。

  5. オンライン エンドポイントのプロパティまたは Log Analytics ワークスペースから、画面の左側にある [ログ] を選択します。

  6. 自動的に開く [クエリ] ダイアログを閉じ、[AmlOnlineEndpointConsoleLog] をダブルクリックします。 表示されていない場合は、[検索] フィールドを使用してください。

    ログ エントリが示されたスクリーンショット。

  7. [実行] を選択します。

    クエリの実行後の結果を示したスクリーンショット。

クエリの例

クエリの例は、ログの表示中に [クエリ] タブで確認できます。 オンライン エンドポイントを検索して、クエリの例を見つけます。

クエリの例のスクリーンショット。

ログ列の詳細

次の表に、各ログに格納されるデータの詳細を示します。

AmlOnlineEndpointTrafficLog

プロパティ 説明
認証方法 クライアントから要求されたメソッド。
パス クライアントから要求されたパス。
SubscriptionId オンライン エンドポイントの機械学習サブスクリプション ID。
AzureMLWorkspaceId オンライン エンドポイントの機械学習ワークスペース ID。
AzureMLWorkspaceName オンライン エンドポイントの機械学習ワークスペース名。
EndpointName オンライン エンドポイントの名前。
DeploymentName オンライン デプロイの名前。
Protocol 要求のプロトコル。
ResponseCode クライアントに返された最後の応答コード。
ResponseCodeReason クライアントに返された最後の応答コードの理由。
ModelStatusCode モデルからの応答の状態コード。
ModelStatusReason モデルからの応答の状態の理由。
RequestPayloadSize クライアントから受信した合計バイト数。
ResponsePayloadSize クライアントに返された合計バイト数。
UserAgent コメントを含むが最大 70 文字に切り捨てられた要求のユーザー エージェント ヘッダー。
XRequestId 内部トレース用に Azure Machine Learning によって生成された要求 ID。
XMSClientRequestId クライアントによって生成された追跡 ID。
TotalDurationMs 要求の開始時刻からクライアントに最後の応答バイトが返されたときまでの時間 (ミリ秒単位)。 クライアントが切断された場合、開始時刻からクライアントの切断時刻までが測定されます。
RequestDurationMs 要求の開始時刻からクライアントから要求の最後のバイトを受信したときまでの時間 (ミリ秒単位)。
ResponseDurationMs 要求の開始時刻からモデルから最初の応答バイトが読み取られたときまでの時間 (ミリ秒単位)。
RequestThrottlingDelayMs ネットワーク帯域幅の調整による要求データ転送の延期期間 (ミリ秒単位)。
ResponseThrottlingDelayMs ネットワーク帯域幅の調整による応答データ転送の延期期間 (ミリ秒単位)。

AmlOnlineEndpointConsoleLog

プロパティ 説明
TimeGenerated ログが生成された時刻のタイムスタンプ (UTC)。
OperationName ログ レコードに関連付けられている操作。
InstanceId このログ レコードを生成したインスタンスの ID。
DeploymentName ログ レコードに関連付けられているデプロイの名前。
コンテナー名 ログが生成されたコンテナーの名前。
メッセージ ログのコンテンツ。

AmlOnlineEndpointEventLog

プロパティ 説明
TimeGenerated ログが生成された時刻のタイムスタンプ (UTC)。
OperationName ログ レコードに関連付けられている操作。
InstanceId このログ レコードを生成したインスタンスの ID。
DeploymentName ログ レコードに関連付けられているデプロイの名前。
名前 イベントの名前です。
メッセージ イベントのコンテンツ。

Application Insights の使用

キュレーションされた環境には Application Insights との統合が含まれています。これは、オンライン デプロイを作成するときに有効または無効にすることができます。 組み込みのメトリックとログは Application Insights に送信され、Application Insights の組み込み機能 (ライブ メトリック、トランザクション検索、エラー、パフォーマンスなど) を使用してさらに分析できます。

詳細については、「Application Insights の概要」を参照してください。

スタジオでは、オンライン エンドポイントのページの [監視] タブを使用して、マネージド オンライン エンドポイントのアクティビティ モニターグラフを高レベルで表示できます。 [監視] タブを使用するには、エンドポイントの作成時 [Application Insight の診断とデータ収集を有効にする] を選択する必要があります。

スタジオでエンドポイント レベルのメトリックを監視する様子を示すスクリーンショット。