

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

# 故障診斷 MediaTailor 事件流程問題
<a name="troubleshooting-event-flow"></a>

了解 AWS Elemental MediaTailor 事件流程為疑難排解廣告插入問題提供了強大的基礎。透過分析事件的順序、時間和模式，您可以快速識別問題發生的位置並實作目標解決方案。

本節提供使用事件流程分析來診斷問題的實際指引。如需了解基本事件流程概念，請參閱 [廣告插入事件流程](mediatailor-event-flow.md)。

## 識別不完整的事件流程
<a name="identifying-incomplete-flows"></a>

當預期的事件序列在成功資訊清單個人化 (MediaTailor 將個人化廣告資訊插入資訊清單的程序） 之前停止時，就會發生不完整的事件流程。識別流程中斷的位置有助於找出廣告插入失敗的根本原因。

### 常見的不完整流程模式
<a name="common-incomplete-flow-patterns"></a>

事件流程中的不同失敗點表示特定類型的問題，如下所示。
+ **在廣告機會偵測後，流程會停止：**表示廣告標記或資訊清單本身發生問題，導致 MediaTailor 無法提出 ADS 請求。ADS 連線、組態或逾時問題會在提出 ADS 請求後發生。
+ **流程會在 ADS 請求後停止：**建議 ADS 回應問題、VATS 剖析問題、創意處理失敗、ADS 逾時、連線錯誤或組態問題，例如只有在發出請求時才會發現的無效 ADS URLs。
+ **缺少追蹤信標：**可能表示追蹤組態問題、伺服器端報告問題或用戶端實作差距。

### 不完整流程分析的 CloudWatch 查詢
<a name="cloudwatch-queries-incomplete-flows"></a>

使用這些 Amazon CloudWatch Logs Insights 查詢來識別不完整的事件流程。根據所需的分析類型，針對適當的日誌群組執行這些查詢。

**日誌群組選擇：**
+ **MediaTailor/AdDecisionServerInteractions** - 用於分析廣告決策伺服器互動、廣告機會和 ADS 相關失敗的查詢。
+ **MediaTailor/TranscodeService** - 用於分析因轉碼問題、創意處理失敗或其他非 ADS 相關問題而未插入廣告的問題。

**Example 在沒有成功資訊清單個人化的情況下識別廣告機會**  
**日誌群組：**MediaTailor/AdDecisionServerInteractions  
下列查詢會識別未導致資訊清單個人化成功的廣告機會：  

```
fields @timestamp, eventType, avail.availId, sessionId
| filter eventType = "AD_MARKER_FOUND"
| stats count() as total_opportunities by avail.availId
| join (
    fields @timestamp, eventType, avail.availId
    | filter eventType = "FILLED_AVAIL"
    | stats count() as successful_fills by avail.availId
) on avail.availId
| where ispresent(total_opportunities) and not ispresent(successful_fills)
| sort total_opportunities desc
```

**Example 分析事件流程完成率**  
**日誌群組：**MediaTailor/AdDecisionServerInteractions  
下列查詢會分析不同事件類型的完成率：  

```
fields @timestamp, eventType, avail.availId
| filter eventType in ["AD_MARKER_FOUND", "MAKING_ADS_REQUEST", "VAST_RESPONSE", "FILLED_AVAIL", "BEACON_FIRED"]
| stats count() by eventType, avail.availId
| sort avail.availId, eventType
```

**Example 尋找缺少信標事件的工作階段**  
**日誌群組：**MediaTailor/AdDecisionServerInteractions  
下列查詢會識別已填滿時段但沒有對應信標事件的工作階段：  

```
fields @timestamp, eventType, sessionId, avail.availId
| filter eventType = "FILLED_AVAIL"
| stats count() as filled_avails by sessionId
| join (
    fields @timestamp, eventType, sessionId
    | filter eventType = "BEACON_FIRED"
    | stats count() as beacon_events by sessionId
) on sessionId
| where filled_avails > 0 and (not ispresent(beacon_events) or beacon_events = 0)
| sort filled_avails desc
```

**Example 識別轉碼相關的廣告插入失敗**  
**日誌群組：**MediaTailor/TranscodeService  
下列查詢會識別無法成功插入廣告的轉碼問題：  

```
fields @timestamp, eventType, sessionId, requestId
| filter eventType in ["TRANSCODE_IN_PROGRESS", "INTERNAL_ERROR", "MISSING_VARIANTS", "PROFILE_NOT_FOUND"]
| stats count() as transcode_issues by eventType, sessionId
| sort transcode_issues desc
```

## 分析事件計時問題
<a name="timing-analysis-troubleshooting"></a>

事件時間分析有助於識別效能瓶頸，並最佳化廣告插入工作流程。不尋常的計時模式通常表示影響瀏覽者體驗的潛在問題。

### 效能計時閾值
<a name="timing-thresholds"></a>

使用這些計時閾值來識別潛在的效能問題。
+ 總**流程持續時間超過 5 秒：**可能影響檢視器體驗，並可指出 ADS 效能問題、原始伺服器問題 （例如資訊清單擷取逾時） 或內部 MediaTailor 問題，包括 NAT Gateway、DynamoDB、EC2 或其他系統元件的基礎設施問題。
+ **ADS 回應時間超過 2 秒：**建議 ADS 效能問題或網路延遲問題。
+ **資訊清單個人化超過 1 秒：**可指出創意處理延遲、原始伺服器問題 （例如資訊清單擷取逾時） 或內部 MediaTailor 系統問題，包括 NAT Gateway、DynamoDB、EC2 或其他元件的基礎設施限制。

### 計時分析查詢
<a name="timing-analysis-queries"></a>

使用這些查詢來分析事件計時模式。

**Example 測量總事件流程持續時間**  
下列查詢會測量事件流程的總持續時間，並識別超過 5 秒的事件流程：  

```
fields @timestamp, eventType, avail.availId
| filter avail.availId = "your-avail-id"
| filter eventType in ["AD_MARKER_FOUND", "FILLED_AVAIL"]
| sort @timestamp asc
| stats min(@timestamp) as start_time, max(@timestamp) as end_time by avail.availId
| eval duration_seconds = (end_time - start_time) / 1000
| where duration_seconds > 5
```

**Example 分析 ADS 回應計時**  
下列查詢會分析 ADS 回應時間，並識別超過 2 秒的時間：  

```
fields @timestamp, eventType, avail.availId
| filter avail.availId = "your-avail-id"
| filter eventType in ["MAKING_ADS_REQUEST", "VAST_RESPONSE"]
| sort @timestamp asc
| stats min(@timestamp) as request_time, max(@timestamp) as response_time by avail.availId
| eval ads_response_seconds = (response_time - request_time) / 1000
| where ads_response_seconds > 2
```

**Example 識別慢速資訊清單個人化**  
下列查詢會識別需要超過 1 秒的資訊清單個人化程序：  

```
fields @timestamp, eventType, avail.availId
| filter avail.availId = "your-avail-id"
| filter eventType in ["VAST_RESPONSE", "FILLED_AVAIL"]
| sort @timestamp asc
| stats min(@timestamp) as response_time, max(@timestamp) as filled_time by avail.availId
| eval personalization_seconds = (filled_time - response_time) / 1000
| where personalization_seconds > 1
```

## 常見的事件流程問題和解決方案
<a name="common-flow-problems"></a>

本節針對經常遇到的事件流程問題提供解決方案，並依問題類型和症狀進行組織。

### 廣告決策伺服器請求失敗
<a name="ads-request-failures"></a>

**症狀：**廣告機會偵測後，事件流程會停止。未記錄任何 ADS 請求事件。

**常見原因和解決方案**
+ **ADS URL 組態錯誤：**確認播放組態中的 ADS URL 正確且可存取。在廣告互動日誌中，您會看到 ADS 請求事件 (`MAKING_ADS_REQUEST`)，但沒有對應的 VAST 回應，通常伴隨 ` ERROR_UNKNOWN `或類似的錯誤事件。
+ **網路連線問題：**檢查 MediaTailor 和 ADS 之間的網路連線，包括防火牆規則和 DNS 解析。
+ **SSL/TLS 憑證問題：**確保您的 ADS 使用來自信任憑證授權單位的有效 SSL 憑證。對於 Google Ad Manager，您可能需要聯絡 [AWS Support](https://aws.amazon.com/premiumsupport/) 以啟用接受 Google SSL 憑證的組態旗標。

**診斷查詢**

下列查詢可透過追蹤事件序列來協助診斷 ADS 請求失敗：

```
fields @timestamp, eventType, sessionId
| filter sessionId = "your-session-id"
| filter eventType in ["AD_MARKER_FOUND", "MAKING_ADS_REQUEST", "ERROR_ADS_IO", "ERROR_UNKNOWN_HOST"]
| sort @timestamp asc
```

### 廣告決策伺服器回應失敗
<a name="ads-response-failures"></a>

**症狀：**ADS 請求成功，但 MediaTailor 未收到回應，或發生剖析錯誤。

**常見原因和解決方案**
+ **無效的 VAST 格式：**根據 VAST 規格標準驗證您的 ADS VAST 回應。
+ **ADS 逾時問題：**增加 ADS 逾時設定或最佳化 ADS 回應時間。
+ **空白廣告庫存：**檢查 ADS 組態中的廣告庫存可用性和目標條件。

**診斷查詢**

下列查詢透過檢查請求和回應事件，協助診斷 ADS 回應失敗：

```
fields @timestamp, eventType, sessionId
| filter sessionId = "your-session-id"
| filter eventType in ["MAKING_ADS_REQUEST", "VAST_RESPONSE", "EMPTY_VAST_RESPONSE", "ERROR_ADS_RESPONSE_PARSE", "ERROR_ADS_TIMEOUT"]
| sort @timestamp asc
```

### 資訊清單個人化失敗
<a name="manifest-personalization-failures"></a>

**症狀：**收到的 VAST 回應，但資訊清單個人化失敗或廣告被略過。

**常見原因和解決方案：**
+ **創意轉碼問題：**檢查廣告是否為 ` NEW_CREATIVE`，在插入之前需要轉碼。您也可以檢查 MediaTailor/TranscodeService 日誌是否有錯誤事件，例如 `INTERNAL_ERROR`、 `MISSING_VARIANTS,`或 ，以檢查轉碼錯誤`PROFILE_NOT_FOUND`。
+ **持續時間不相符問題：**確認廣告持續時間符合可用的廣告休息時間。
+ **個人化閾值問題：**檢閱播放組態中的個人化閾值設定。

**診斷查詢**

下列查詢透過檢查 VAST 回應和填滿時段，協助診斷資訊清單個人化失敗：

```
fields @timestamp, eventType, sessionId, skippedAds
| filter sessionId = "your-session-id"
| filter eventType in ["VAST_RESPONSE", "FILLED_AVAIL", "WARNING_NO_ADVERTISEMENTS"]
| sort @timestamp asc
```

**查詢略過的廣告原因**

下列查詢提供為何略過廣告的詳細資訊：

```
fields @timestamp, eventType, sessionId, skippedAds.reason, skippedAds.creativeUniqueId
| filter sessionId = "your-session-id"
| filter eventType = "WARNING_NO_ADVERTISEMENTS" or ispresent(skippedAds)
| sort @timestamp asc
```

**查詢略過的廣告原因和創造性的唯一 IDs**

下列查詢提供詳細的略過廣告資訊，包括每個時段中前兩個廣告的原因和創意唯一 IDs：

```
fields @timestamp, eventType
| filter sessionId = "your-session-id"
| filter eventType = "FILLED_AVAIL"
| fields avail.skippedAds.0.vastDuration as SkippedDur_Ad0, avail.skippedAds.0.skippedReason as Ad0_SkipReason, avail.skippedAds.0.creativeUniqueId as SkippedCreative0_UID
| fields avail.skippedAds.1.vastDuration as SkippedDur_Ad1, avail.skippedAds.1.skippedReason as Ad1_SkipReason, avail.skippedAds.1.creativeUniqueId as SkippedCreative1_UID
| sort @timestamp desc
```

### 追蹤信標故障
<a name="tracking-beacon-failures"></a>

**症狀：**資訊清單個人化成功，但追蹤信標遺失或失敗。

**常見原因和解決方案**
+ **用戶端實作問題：**大多數追蹤信標問題來自用戶端實作問題，例如未頻繁輪詢追蹤 URLs 以進行用戶端追蹤，或玩家特定的信標射擊邏輯問題。
+ **追蹤 URL 可存取性問題：**確認可以存取 VAST 回應中的追蹤 URLs，並傳回適當的回應。當 URLs 無法連線或 MediaTailor 遇到阻止成功追蹤回應交付的內部問題時，可能會發生問題。
+ **玩家區段請求問題：**當用戶端玩家實際上未請求任何區段時，可能會發生明顯的追蹤信標失敗。這會導致沒有傳送信標，它顯示為追蹤失敗，但實際上是玩家實作問題，而不是信標問題。

**診斷查詢**

下列查詢透過檢查已填滿的時段和信標事件，協助診斷追蹤信標失敗：

```
fields @timestamp, eventType, sessionId
| filter sessionId = "your-session-id"
| filter eventType in ["FILLED_AVAIL", "BEACON_FIRED", "ERROR_FIRING_BEACON_FAILED"]
| sort @timestamp asc
```

## 事件流程監控最佳實務
<a name="event-flow-monitoring-best-practices"></a>

實作這些監控實務，以主動識別和解決事件流程問題：

### 設定 CloudWatch 警示
<a name="cloudwatch-alarms-setup"></a>

建立 Amazon CloudWatch 警示以監控關鍵事件流程指標。
+ **流程完成率警示：**當成功資訊清單個人化與廣告機會的比例低於可接受的閾值時發出警示。
+ **ADS 回應時間警示：**監控平均 ADS 回應時間，並在超過效能閾值時發出警示。
+ **錯誤率警示：**追蹤錯誤事件頻率，並對特定錯誤類型中的異常峰值發出警示。

### 定期監控查詢
<a name="regular-monitoring-queries"></a>

定期執行這些查詢，以維持事件流程運作狀態的可見性：

**Example 每日事件流程成功率**  
下列查詢依事件類型提供事件流程成功率的每日概觀：  

```
fields @timestamp, eventType
| filter @timestamp > datefloor(@timestamp, 1d)
| stats count() as total_events by eventType
| sort total_events desc
```

**Example 每小時錯誤率趨勢**  
下列查詢會依小時追蹤錯誤率，以識別趨勢問題：  

```
fields @timestamp, eventType
| filter eventType like /ERROR_/
| stats count() as error_count by datefloor(@timestamp, 1h) as hour
| sort hour desc
```

### 效能最佳化指引
<a name="performance-optimization-guidance"></a>

使用事件流程分析來最佳化廣告插入效能。
+ **ADS 最佳化：**與您的 ADS 供應商合作，以最佳化回應時間並減少延遲。
+ **創意準備：**預先轉碼廣告創作，以符合您的內容描述檔並減少處理延遲。
+ **組態調校：**根據事件流程分析調整逾時設定、個人化閾值和其他組態參數。

## 其他疑難排解資源
<a name="event-flow-troubleshooting-next-steps"></a>

如需事件流程分析以外的其他疑難排解指引：
+ 如需詳細的日誌格式資訊和技術規格，請參閱 [檢視日誌](monitoring-through-logs.md)。
+ 如需常見廣告插入問題的全面故障診斷，請參閱[排解常見問題](monitoring-and-troubleshooting.md#troubleshooting-common-issues)。
+ 如需監控和提醒設定指引，請參閱 [AWS Elemental MediaTailor 使用 Amazon CloudWatch 指標進行監控](monitoring-cloudwatch-metrics.md)。
+ 如需偵錯記錄程序，請參閱 [產生偵錯日誌](debug-log-mode.md)。