

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 偵錯 HealthOmics 工作流程執行
<a name="workflows-run-debug"></a>

HealthOmics 透過數個來源報告執行的行為，每個來源都會回答不同的問題。對於失敗的執行，請按照此順序讀取它們，而不是從日誌開始：

1. 閱讀執行記錄，了解執行是否失敗以及原因。

1. 如果任務失敗，請讀取任務記錄，其中任務失敗，以及哪些執行個體類型。執行也會在建立任何任務之前或完成每個任務之後失敗。

1. 讀取日誌：任務報告內容的任務日誌、任何任務外執行報告內容的執行日誌，以及引擎報告內容的引擎日誌。

1. 讀取執行指標，並針對任務消耗的內容執行資訊清單日誌。

對於已完成但比您預期速度慢或更昂貴的執行，請從 開始[比較相同工作流程的執行](#workflows-run-debug-compare)。

基於 中提供的原因，本主題中的資源和成本指導適用於私有工作流程[私有 HealthOmics 工作流程的執行最佳化](workflows-run-optimize.md)。如需下列步驟使用的 API 操作和回應欄位，請參閱 [取得執行資訊](getinfo-about-runs.md)。

在此主題的命令中，將下列值取代為您自己的值：

`{{run_id}}`  
您要偵錯的執行 ID。

`{{duration}}`  
**aws logs tail** 讀取的視窗：相對時間，例如 `2h` 表示最近完成的執行，或時間戳記，例如 `2026-03-26T22:00:00`表示較舊的執行。

`{{run_uuid}}`  
`uuid` 該執行記錄的欄位。

`{{task_id}}`  
該執行中失敗任務的 ID。

`{{workflow_id}}`  
您要列出其執行的工作流程 ID。

**Topics**
+ [診斷失敗的執行](#workflows-run-debug-failed)
+ [使用執行指標檢查資源使用情況](#workflows-run-debug-metrics)
+ [比較相同工作流程的執行](#workflows-run-debug-compare)
+ [將調查結果轉換為成本和規模調整變更](#workflows-run-debug-cost)

## 診斷失敗的執行
<a name="workflows-run-debug-failed"></a>

**診斷失敗的執行**

1. 擷取執行記錄，並讀取 `status`、`statusMessage`、 `failureReason`和 `logLocation`。保留回應：後續步驟會使用它。 `logLocation`會提供執行日誌 (`runLogStream`) 和引擎日誌 () 的 ARNs`engineLogStream`。

   ```
   aws omics get-run --id {{run_id}}
   ```

   在 `failureReason`中查詢 的值[執行失敗原因](workflows-run-errors.md)。如果 `status` 不是 `FAILED`，請[執行狀態值](monitoring-runs.md#run-status-values)改為參閱 。

   有些失敗會在 HealthOmics 建立任何任務之前或每個任務完成後發生，因此不會留下任務記錄供接下來三個步驟讀取。角色、輸入、匯入或匯出失敗是其中之一；因此，HealthOmics 在建立任務之前拒絕的映像 (ECR\_IMAGE\_NOT\_FOUND、ECR\_PERMISSION\_ERROR、ECR\_REPOSITORY\_NOT\_FOUND 或 INVALID\_ECR\_IMAGE\_URI)。對於其中任何一個，請跳至此程序稍後的執行日誌。對於映像失敗，請`statusMessage`命名映像 URI，因此請從 [私有工作流程的容器映像](workflows-ecr.md)和 繼續[Amazon ECR 許可](permissions-ecr.md)。如果下一個步驟確實傳回失敗的任務，請改為讀取該任務。

1. 列出失敗的任務。每個項目都包含任務的 `taskId`，下一個步驟使用它，加上其名稱、其 `creationTime`，以及一旦達到它們，其執行個體類型、 `startTime`和 `stopTime`。

   ```
   aws omics list-run-tasks --id {{run_id}} --status FAILED
   ```

   如果這未傳回任何任務，則執行是步驟 1 中的其中一個案例：略過接下來的兩個步驟並讀取執行日誌。

1. 針對每個失敗的任務，擷取其記錄。它會`logStream`將 `failureReason`、`imageDetails`、 `statusMessage`和 新增至上一個步驟傳回的內容。 `logStream`是下一個步驟讀取之日誌串流的 ARN，而串流的名稱會跟隨`log-stream:`其中。

   ```
   aws omics get-run-task --id {{run_id}} --task-id {{task_id}}
   ```

1. 讀取任務日誌。說明失敗的事件位於串流結尾。

   ```
   aws logs tail /aws/omics/WorkflowLog \
     --log-stream-names run/{{run_id}}/task/{{task_id}} \
     --since {{duration}}
   ```

   將{{持續時間}}設定為在任務執行之前開始：命令從 開始讀取，直到現在為止，其預設時段是最後 10 分鐘，因此先前完成的執行不會傳回任何事件。如需日誌群組和每個串流的格式，請參閱 [CloudWatch 中的日誌](monitoring-cloudwatch-logs.md#cloudwatch-logs)。
**注意**  
如需了解任務可能完全沒有日誌的原因，以及讓任務更易於偵錯的方法，請參閱 [對工作流程任務進行故障診斷](workflow-run-tasks.md#debugging-tasks)。

1. 讀取執行的其他兩個日誌中任何一個日誌都會回答您在這裡的問題。兩者都使用不同的串流執行步驟 4 命令。

   ```
   aws logs tail /aws/omics/WorkflowLog \
     --log-stream-names run/{{run_id}} \
     --since {{duration}}
   ```  
執行沒有失敗的任務  
讀取執行日誌 `run/{{run_id}}`，如上述命令所示。它會報告執行本身的進度，包括沒有任務但失敗的匯入和匯出步驟。如需報告的內容，請參閱 [HealthOmics 工作流程的日誌類型](monitoring-cloudwatch-logs.md#log-descriptions)。  
任務失敗，且其日誌未說明原因  
閱讀引擎日誌 `run/{{run_id}}/engine`，其會報告引擎因故障而產生的項目，例如工作流程定義中的位置。其 ARN `logLocation.engineLogStream`來自步驟 1；如果該欄位不在回應中，則執行沒有引擎日誌。  
若要讀取引擎名稱位置的定義，請將其匯出。下列命令會針對執行所使用的定義傳回下載 URL。  

   ```
   aws omics get-workflow --id {{workflow_id}} --export DEFINITION
   ```

在何處繼續取決於失敗原因。下列清單涵蓋最常見的資源和容器故障。如需了解使用的任務，這會告訴您故障是否為大小問題，請參閱 [將調查結果轉換為成本和規模調整變更](#workflows-run-debug-cost)。

**無法\_START\_CONTAINER\_ERROR、無法\_START\_CONTAINER\_SIZE\_ERROR 或 IMAGE\_VERIFICATION\_FAILURE**  
HealthOmics 已建立任務且無法啟動其容器，因此任務不會產生日誌。從任務記錄的 取得映像`imageDetails`，然後參閱 [私有工作流程的容器映像](workflows-ecr.md)。

**OUT\_OF\_MEMORY\_ERROR**  
使用其執行指標或[將調查結果轉換為成本和規模調整變更](#workflows-run-debug-cost)位於 的執行資訊清單日誌中的統計資料[如何調整工作流程的運算和儲存體大小？](troubleshooting.md#troubleshooting-metrics-right-size)，將任務的記憶體使用量與其配置進行比較，如中所述。然後在工作流程定義中增加記憶體，並檢查新值在 中選取的執行個體類型[HealthOmics 任務的運算和記憶體需求](memory-and-compute-tasks.md)。

**TASK\_TIMED\_OUT 或 RUN\_TIMED\_OUT**  
確認任務在逾時過期時是否仍在運作。如果沒有，請將其視為沒有回應而非緩慢，並參閱 [無回應執行的指引](workflows-run-errors.md#workflows-guidance-unresponsive-runs)。如果結束執行的限制來自執行群組，請參閱 [使用 HealthOmics 執行群組](creating-run-groups.md)。

## 使用執行指標檢查資源使用情況
<a name="workflows-run-debug-metrics"></a>

執行指標涵蓋仍在進行中的執行，因此您可以在執行完成之前使用它們。執行存在哪些序列取決於其執行儲存體類型、其暫存儲存模式，以及其任務是否請求加速器，因此請先檢查 中的條件，[可用的指標](monitoring-run-metrics.md#monitoring-run-metrics-available)再得出指標遺失的結論。如果執行完全沒有序列，請檢查其角色是否可以發佈它們，如中所述[啟用執行的指標](monitoring-run-metrics.md#monitoring-run-metrics-enabling)。如需查詢語法和主控台程序，請參閱 [查詢 HealthOmics 執行指標](monitoring-run-metrics.md#monitoring-run-metrics-viewing)。

使用執行資源標籤，將每個查詢範圍限定為一個執行。每個任務指標也會攜帶任務資源標籤，將一系列加入任務記錄及其日誌。如需這兩個標籤，請參閱 [共同 屬性](monitoring-run-metrics.md#monitoring-run-metrics-common-attributes)。

**注意**  
CloudWatch 會同時限制 PromQL 查詢傳回的時間序列數量及其跨越的時間範圍。執行會為每個任務指標為每個任務產生至少一個序列，以及指標依方向或 GPU 分割的更多項目。對於具有許多任務的執行，請在查詢本身中彙總序列，或篩選至一個任務、一個方向或一個 GPU。將長時間執行分割為連續時段。如需目前的限制，請參閱 [PromQL 限制。](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-PromQL.html#CloudWatch-PromQL-Limits)

## 比較相同工作流程的執行
<a name="workflows-run-debug-compare"></a>

當執行速度比先前相同工作流程的執行速度慢或更昂貴時，請依任務比較兩個執行任務。依名稱比對任務，而非依任務 ID 比對：擷取兩個執行的任務、依 分組任務`name`，並比較每個名稱的持續時間和尖峰值。每個執行的資訊清單日誌的一次讀取會為您提供每個任務的時間，以及項目回報的時間、峰值； **ListRunTasks**會為您提供仍在進行的執行時間，而沒有先前程序使用的`--status FAILED`篩選條件。

比較每個任務的兩個範圍： `startTime` 與 `stopTime`是任務的持續時間， `creationTime` `startTime`則是等待啟動的時間，涵蓋其在 中的待定和啟動階段[任務狀態值](workflow-run-tasks.md#task-status-values)。當每個任務的持續時間相符時，執行可能會比另一個執行慢得多，因為沒有任務指標可涵蓋等待。

**注意**  
一次執行中的數個任務可以共用名稱，而且名稱中的散佈索引不一定涵蓋兩個執行中的相同輸入資料。比較共用名稱之任務的彙總，例如最長持續時間或最高峰值，而不是依索引配對索引。

若要建立工作流程的正常情況，而不是比較兩個執行，請彙總一組已完成的執行。Run Analyzer 會在 `--batch` 模式下執行此操作，如 中所述[執行之間檔案大小差異的影響](workflows-run-optimize.md#workflows-run-file-variance)。若要自行收集執行，請在 **ListRuns**上篩選 的回應`workflowId`。操作沒有自己的工作流程篩選條件，因此在篩選條件縮小之前，**ListRuns**頁面會逐一查看每個完成的執行。

```
aws omics list-runs --status COMPLETED \
  --query "items[?workflowId=='{{workflow_id}}'].id"
```

一組執行的分佈，而不是任何單一執行，會顯示任務的配置是否符合資料中的變異，以及看起來緩慢的執行是否超出正常範圍。

## 將調查結果轉換為成本和規模調整變更
<a name="workflows-run-debug-cost"></a>

執行資訊清單日誌中消耗的任務，其串流為 `manifest/run/{{run_id}}/{{run_uuid}}`。HealthOmics 會在執行完成後寫入，因此請設定達到執行停止時間的{{持續時間}}，而非任務的持續時間。使用與其他串流相同的**aws logs tail**命令來讀取。如需其報告的統計資料，請參閱 [HealthOmics 工作流程的日誌類型](monitoring-cloudwatch-logs.md#log-descriptions)。

資訊清單任務項目會報告保留的任務、其執行個體類型及其持續時間。它會報告任務與這些任務搭配使用的內容，但不是針對每個任務。當項目未報告用量，或報告少於任務的工作時，會改為根據任務的執行指標來計算大小，原因在 中。 [標註](monitoring-run-metrics.md#monitoring-run-metrics-callouts)

三種 HealthOmics 行為會限制變更儲存的內容：
+ 任務的成本遵循 HealthOmics為您請求的資源選取的執行個體類型，而不是任務使用的資源。請參閱 [HealthOmics 任務的運算和記憶體需求](memory-and-compute-tasks.md)。
+ 任務費用具有最低計費持續時間，因此縮短已經短暫的任務不會節省任何費用。請參閱 [執行狀態的定價影響](monitoring-runs.md#run-status-billing)。
+ 靜態執行儲存有固定大小，因此減少只會在降至支援較小的大小時變更帳單。請參閱 [靜態執行儲存](workflows-run-types.md#workflows-run-type-static)。

如需這些調查結果饋送至的最佳化方法，請參閱 [最佳化執行的方法](workflows-run-optimize.md#run-optimize-methods)。