

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

# 故障診斷和監控
<a name="yield-optimization-troubleshooting"></a>

此頁面可協助您監控產出最佳化效能、診斷常見問題，並驗證您的組態是否正常運作。

## 指標
<a name="yield-optimization-troubleshooting-metrics"></a>

MediaTailor 會發佈下列 CloudWatch 指標以進行產出最佳化。除非另有說明，否則所有指標都會以`configurationName`維度發出。

### 競價請求指標
<a name="yield-optimization-troubleshooting-metrics-bidrequest"></a>


| 指標 | 說明 | 
| --- | --- | 
| YieldOptimization.BidRequest | 當識別出出價請求機會時，發出為 1。 | 
| YieldOptimization.BidResponse | 當收到成功的出價回應時，發出為 1。 | 
| YieldOptimization.BidDuration | 出價中請求的中斷持續時間 （秒），從時段持續時間減去主要廣告持續時間計算得出。 | 
| YieldOptimization.Latency | APS 的往返延遲，以毫秒為單位。 | 
| YieldOptimization.NoBid | 當 APS 傳回 HTTP 204 （沒有相符的需求） 時發出為 1。請求本身有效。 | 
| YieldOptimization.BidRequestThrottled | 當 APS 傳回 HTTP 429 （限流） 時發出為 1。APS 正在套用背壓。重試之前，請關閉 。 | 

### 廣告插入指標
<a name="yield-optimization-troubleshooting-metrics-adinsertion"></a>


| 指標 | 說明 | 
| --- | --- | 
| YieldOptimization.AdsInserted | 插入時段的 YO 廣告數量。 | 
| YieldOptimization.AdsReturned | BidResponse 中傳回的廣告數量 （篩選之前）。只有在大於 0 時發出。 | 
| YieldOptimization.FilledDuration | YO 廣告填入的持續時間 （毫秒）。 | 
| YieldOptimization.UnfilledDuration | 在競價請求中傳送至 APS 的持續時間 （毫秒） （機會差距）。 | 
| YieldOptimization.FillRate | 每個時段填充率：轉碼 YO 持續時間除以預先 YO 未填充持續時間。分子經過轉碼，分母是以 VAST 為基礎 （不會減去緩衝），因此值可以超過 1.0。 | 

### 營收和定價指標
<a name="yield-optimization-troubleshooting-metrics-revenue"></a>


| 指標 | 說明 | 
| --- | --- | 
| YieldOptimization.Revenue | 客戶的總收入，來源於 oRTB 出價回應的 price 屬性。插入廣告的價格總和。 | 
| YieldOptimization.IndicativeBidRevenue | 所有 RETURNED 出價 （每個印模的出價，不是每個插入的出價） 的每個印模指示值。在棄用時段Revenue同時發出雙重 ，並在儀表板切換後移除。將 Revenue用於新的儀表板。 | 
| YieldOptimization.BidPriceAdsInserted | Yield Optimization 插入的每個廣告的 CPM 價格。以競價回應 cur（貨幣） 屬性為維度。每個客戶不發出，因此這是整個帳戶。 | 
| YieldOptimization.BidPriceAdsReturned | BidResponse 中傳回的每個出價的 CPM 價格 （在篩選插入之前）。維度為 cur。每個客戶不發出，因此這是整個帳戶。 | 

### 錯誤並略過指標
<a name="yield-optimization-troubleshooting-metrics-error"></a>


| 指標 | 說明 | 
| --- | --- | 
| YieldOptimization.Errors | 因連線錯誤、回應處理錯誤或非預期例外狀況而發出為 1。成功時也會發出為 0 （使用總和，而非 SampleCount)。 | 
| YieldOptimization.Timeouts | 當 APS 請求逾時時，發出為 1。成功時也會發出為 0 （使用總和，而非 SampleCount)。 | 
| YieldOptimization.BidRequestConfigurationError | 當範本或競價建構失敗 （缺少欄位、無效的 JSON) 時，發出為 1。 | 
| YieldOptimization.SkipMinUnfilledDurationNotExceeded | 當因未填充持續時間低於閾值而略過 YO 時，發出為 1。 | 
| YieldOptimization.SkipPersonalizationTimeoutExceeded | 當因個人化時間不足而略過 YO 時，會發出為 1。 | 

**重要**  
`YieldOptimization.Errors` 每個成功請求的 和 `YieldOptimization.Timeouts` 都會發出為 0。在 CloudWatch 中使用**總和** （非 SampleCount) 來取得實際錯誤或逾時計數。 `NoBid`和 `BidRequestThrottled` 不會計入 中`Errors`。它們是合法的無需求和背壓條件的個別訊號。

## 日誌事件
<a name="yield-optimization-troubleshooting-log-events"></a>

Yield Optimization 會在`MidasMMSService/ads_interaction_log`日誌群組中產生事件：


| 事件類型 | 說明 | 
| --- | --- | 
| RAW\_BID\_REQUEST | 傳送至 APS 的完整 OpenRTB 競價請求 JSON。使用此項目來驗證範本插補。 | 
| RAW\_BID\_RESPONSE | APS 的原始 OpenRTB 出價回應，包括出價和 VAST XML。 | 
| FILLED\_AVAIL | 包含所有廣告的完整時段。YO 廣告包含 fillMode: "YIELD\_OPTIMIZATION" bidId、bidPrice、impressionId、 currency和 seatId。 | 

錯誤事件會在 中使用`MidasMMSService/application.log`記錄器發出`OrtbBidRequestBuilder`，例如 `YieldOptimizationSupport`、`HttpOrtbRequestSubmitter`、 和 `OrtbResponseProcessor`。

## CloudWatch Insights 查詢範例
<a name="yield-optimization-troubleshooting-insights"></a>

### 檢查 YO 錯誤
<a name="yield-optimization-troubleshooting-insights-errors"></a>

```
fields @timestamp, message.sessionId, message.message, log.logger, log.level
| filter message.awsAccountId = 'YOUR_ACCOUNT_ID'
  and (log.level = 'ERROR' or log.level = 'WARN')
  and (log.logger like /YieldOptimization/
    or log.logger like /OrtbResponseProcessor/
    or log.logger like /HttpOrtbRequestSubmitter/
    or log.logger like /OrtbBidRequestBuilder/)
| sort @timestamp desc
| limit 100
```

**日誌群組：** `MidasMMSService/application.log`

### 計數出價請求與回應
<a name="yield-optimization-troubleshooting-insights-count"></a>

```
fields @timestamp, sessionId, eventType
| filter awsAccountId = 'YOUR_ACCOUNT_ID'
  and (eventType = 'RAW_BID_REQUEST' or eventType = 'RAW_BID_RESPONSE')
| stats count(*) by eventType
```

**日誌群組：** `MidasMMSService/ads_interaction_log`

### 在填滿時段中尋找 YO 廣告
<a name="yield-optimization-troubleshooting-insights-filled"></a>

每個`FILLED_AVAIL`事件都包含`creativeAds`陣列。該陣列內的 YO 廣告承載`fillMode: "YIELD_OPTIMIZATION"`和其他出價中繼資料：`bidId`、`impressionId``bidPrice`、、 `seatId`和 `currency`。使用此項目來查看 YO 填充了哪些時段、每個時段插入了多少個 YO 廣告，以及每個出價的收入歸因。

```
fields @timestamp, sessionId, avail.availId, avail.numAds, avail.fillRate, avail.filledDuration
| filter awsAccountId = 'YOUR_ACCOUNT_ID'
  and eventType = 'FILLED_AVAIL'
  and @message like /YIELD_OPTIMIZATION/
| sort @timestamp desc
| limit 50
```

若要提取特定工作階段的個別 YO 廣告項目 （競價 ID 和價格）：

```
fields @timestamp, sessionId, avail.availId, avail.creativeAds
| filter awsAccountId = 'YOUR_ACCOUNT_ID'
  and eventType = 'FILLED_AVAIL'
  and sessionId = 'YOUR_SESSION_ID'
| sort @timestamp desc
| limit 20
```

針對 的項目，篩選產生的`creativeAds`陣列用戶端`fillMode == "YIELD_OPTIMIZATION"`。

**日誌群組：** `MidasMMSService/ads_interaction_log`

### 檢查未解決的範本變數
<a name="yield-optimization-troubleshooting-insights-unresolved"></a>

```
fields @timestamp, sessionId, @message
| filter awsAccountId = 'YOUR_ACCOUNT_ID'
  and eventType = 'RAW_BID_REQUEST'
  and @message like /\{[A-Z_]+\}/
| sort @timestamp desc
| limit 20
```

**日誌群組：** `MidasMMSService/ads_interaction_log`

### 測量 YO 延遲和成功率
<a name="yield-optimization-troubleshooting-insights-latency"></a>

```
fields @timestamp, @message
| filter customerId = 'YOUR_ACCOUNT_ID'
  and (@message like /YieldOptimization/ or @message like /ortb_/)
| limit 10000
```

**日誌群組：** `MidasMMSService/service_log`

**注意**  
`service_log` 會針對帳戶 ID 欄位使用 `customerId`（而非 `awsAccountId`)。

## 計算收益提升
<a name="yield-optimization-troubleshooting-yield-lift"></a>

若要測量收益最佳化對營收的影響，請使用下列項目建立 CloudWatch 儀表板：

1. **增量填充率：**`Sum(YieldOptimization.AdsInserted) / Sum(YieldOptimization.BidRequest)`顯示插入廣告的 YO 機會百分比。或者，`Average(YieldOptimization.FillRate)`針對每個時段的原生指標使用 。

1. **每小時營收：**`Sum(YieldOptimization.Revenue)`隨著時間的推移，顯示來自 YO 的每位客戶總營收。 `Sum(YieldOptimization.BidPriceAdsInserted)`會提供帳戶範圍的平均 CPM。

1. **填充持續時間：**`Sum(YieldOptimization.FilledDuration)`針對 `Sum(YieldOptimization.BidDuration)`顯示實際填充的請求持續時間。

## 常見問題
<a name="yield-optimization-troubleshooting-common-issues"></a>

### 未觸發的產出最佳化
<a name="yield-optimization-troubleshooting-not-triggering"></a>


| 徵狀 | Check | Resolution | 
| --- | --- | --- | 
| 完全沒有 YO 指標 | 是否在播放組態上設定 YO？ | 在主控台或 API 中啟用 YO。 | 
| SkipMinUnfilledDurationNotExceeded 發出 | 主要 ADS 正在填補大部分的休息時間 | 降低MinimumUnfilledDuration或接受主填充已足夠。 | 
| SkipPersonalizationTimeoutExceeded 發出 | 主要 ADS 太慢，沒有時間用於 YO | 最佳化主要 ADS 延遲或檢查個人化逾時 SDC 組態。 | 

### 競價請求失敗
<a name="yield-optimization-troubleshooting-bidrequests-failing"></a>


| 徵狀 | Check | Resolution | 
| --- | --- | --- | 
| BidRequestConfigurationError 指標 | 範本有遺失或空白的必要欄位 | 檢查application.log特定錯誤 （例如 app.bundle is required)。修正範本或確保傳送玩家參數。 | 
| 來自 APS 的 HTTP 204 | YieldOptimization.NoBid 遞增 | APS 傳回無出價。不是錯誤。檢查RAW\_BID\_REQUEST預留位置值 ({UPPER\_CASE} 模式），確認 bundle 和 storeurl 是真實、較低的 bidfloor。 | 
| 來自 APS 的 HTTP 429 | YieldOptimization.BidRequestThrottled 遞增 | APS 正在調節。退避請求率。如果持續存在，請聯絡 APS 支援以提高 TPS 限制。 | 
| 來自 APS 的 HTTP 400 | 無效的請求 JSON | 檢查 中的 APS 錯誤訊息RAW\_BID\_RESPONSE。驗證 JSON 結構符合 OpenRTB 規格。 | 
| 從 APS 的 HTTP 500/503 | APS 伺服器錯誤或過載 | 暫時性問題。監控 YieldOptimization.Errors。如果持續存在，請聯絡 APS 支援。 | 

### 傳回但未插入的廣告
<a name="yield-optimization-troubleshooting-not-inserted"></a>


| 徵狀 | Check | Resolution | 
| --- | --- | --- | 
| AdsReturned > 0 但 AdsInserted = 0 | 插入期間篩選的廣告 | 檢查FILLED\_AVAIL日誌是否有略過原因：重複的創作、超過剩餘閾值，或找不到廣告變體 （轉碼未完成）。 | 

## APS 錯誤代碼參考
<a name="yield-optimization-troubleshooting-error-codes"></a>


| Code | 意義 | 常見原因 | 
| --- | --- | --- | 
| 200 | 成功出價 | 正常運作。 | 
| 204 | 無出價 | 請求有效，但沒有可用的競價。這並不表示您的範本中發生錯誤。 | 
| 400 | 錯誤的請求 | 無效的 JSON，每個 OpenRTB 規格缺少必要欄位。 | 
| 500 | 伺服器錯誤 | APS 內部問題、服務已調節、逾時。 | 
| 503 | 服務過載 | APS 背壓。請勿積極重試。 | 
| 429 | 受節制 | APS 已手動開始調節請求。如果持續存在，請聯絡 APS 支援。 | 