Durable Task SDK の問題を診断するためのオプションは、Azure Container Apps、Azure Kubernetes Service クラスター、Azure App Service アプリなど、使用しているAzureコンピューティングによって異なります。 Application InsightsとDurable Task Scheduler 監視ダッシュボードの両方を有効にして、オーケストレーションの状態とエラーを完全に把握することをお勧めします。
Application Insights
Application Insights は、Durable Task SDK で実行されているアプリを監視するための推奨される方法です。 これらの追跡イベントの検索とクエリは、Azure ポータルの Application Insights Analytics ツールを使用して実行できます。
オーケストレーション インスタンスの各ライフサイクル イベントは、Application Insights の トレース コレクションに追跡イベントを書き込みます。 これらのイベントのカスタム ディメンション ( prop__instanceId、 prop__name、 prop__runtimeStatusなど) を使用して、特定のオーケストレーションをフィルター処理し、クエリを実行します。
| コンピューティング サービス | 診断ログの手順 |
|---|---|
| Azure Container Apps | Azure Container Apps のログを Log Analytics で監視する |
| Azure App Service | Azure App Service でアプリの診断ログを有効にする |
| Azure Kubernetes Service | Azure Kubernetes Service の監視 |
クエリの例
Application Insights が有効になったら、 ログ で次の KQL クエリを使用してオーケストレーションの動作を調査します。
失敗したオーケストレーションを検索します。
traces
| where customDimensions.prop__runtimeStatus == "Failed"
| project timestamp, customDimensions.prop__instanceId, customDimensions.prop__name, message
| order by timestamp desc
| take 50
名前ごとのオーケストレーションの持続時間 (過去 24 時間):
traces
| where timestamp > ago(24h)
| where customDimensions.prop__runtimeStatus == "Completed"
| extend duration = todatetime(customDimensions.prop__completedTime) - todatetime(customDimensions.prop__createdTime)
| summarize avg(duration), max(duration), count() by tostring(customDimensions.prop__name)
OpenTelemetry を使用した分散トレース
Durable Task SDK では、OpenTelemetry 分散トレースがサポートされています。これによって、オーケストレーション、アクティビティ、サブオーケストレーション全体を相互に関連付けられたスパンとしてエンド ツー エンドで表示できます。 Application Insights、Jaeger、Zipkin など、OpenTelemetry と互換性のあるバックエンドにトレースをエクスポートできます。
サポートされているすべての言語のコード サンプルを使用したセットアップ手順については、「 Durable Task Scheduler を使用した OpenTelemetry と分散トレース」を参照してください。
Durable Task Scheduler の監視ダッシュボード
Durable Task Scheduler ダッシュボードを使用すると、オーケストレーションの状態の監視、入力/出力の検査、実行タイムラインの表示、オーケストレーションの管理 (開始、一時停止、再開、終了) を行うことができます。 ローカル エミュレーターとAzureホステッド スケジューラの両方で使用できます。
ダッシュボードにアクセスする
-
ローカル エミュレーター: 認証は必要ありません。 ダッシュボードは、
http://localhost:8082で使用できます。 -
Azure ホスト型スケジューラ: Durable Task Data Contributor ロールを ID に割り当 次に、Azure ポータルまたは
https://dashboard.durabletask.io/でタスク ハブのエンドポイント URL を使用してダッシュボードにアクセスします。
完全なセットアップと使用方法の手順については、「 Durable Task Scheduler ダッシュボードを使用したオーケストレーションのデバッグと管理」を参照してください。
一般的な問題
| 症状: | 考えられる原因 | Resolution |
|---|---|---|
| オーケストレーションが "実行中" で停止する | アクティビティが未処理の例外をスローし、再試行ポリシーが構成されていない | Application Insights で例外の詳細を確認します。再試行ポリシーを追加するか、オーケストレーターで try/catch を実行する |
| アクティビティは無期限に再試行を続ける | 再試行ポリシーに maxNumberOfAttempts 制限がない |
再試行ポリシー構成で最大再試行回数を設定する |
| オーケストレーションが開始されない | ワーカーが正しいタスク ハブをポーリングしていない | 接続文字列タスク ハブ名がスケジューラ リソースと一致するかどうかを確認する |
| Application Insights にトレースがない | 接続文字列が構成されていないか、SDK がテレメトリを出力していない |
APPLICATIONINSIGHTS_CONNECTION_STRINGが設定されていることを確認します。OpenTelemetry Microsoft.DurableTask ソースが登録されていることを確認する |
| ダッシュボードにオーケストレーションが表示されない | ロールの割り当てが見つからないか、間違ったタスク ハブが選択されている | Durable Task Data Contributor ロールがあることを確認します。ダッシュボードの URL でタスク ハブ名を確認する |
| オーケストレーションは完了しましたが、結果は空です |
null返されたアクティビティまたはシリアル化に失敗しました |
ダッシュボードの履歴ビューでアクティビティの出力を検査する。シリアライザーの構成を確認する |