

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 故障排除和监控
<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 | Round-trip APS 的延迟以毫秒为单位。 | 
| YieldOptimization.NoBid | 当 APS 返回 HTTP 204（没有匹配的需求）时，作为 1 发出。请求本身是有效的。 | 
| YieldOptimization.BidRequestThrottled | 当 APS 返回 HTTP 429（已限制）时，作为 1 发出。APS 正在施加背压。重试前退一步。 | 

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


| 指标 | 说明 | 
| --- | --- | 
| YieldOptimization.AdsInserted | 插入 Availed 的 YO 广告数量。 | 
| YieldOptimization.AdsReturned |  BidResponse （筛选前）中返回的广告数量。仅在大于 0 时发出。 | 
| YieldOptimization.FilledDuration | 时长 (ms) 由 YO 广告填充。 | 
| YieldOptimization.UnfilledDuration | 在出价请求（机会间隔）中向 APS 发送的持续时间（毫秒）。 | 
| YieldOptimization.FillRate | Per-avail 填充率：转码后的 YO 时长除以 YO 之前的未填充时长。分子经过转码，分母为 VAST-based （均不减去 bumper），因此该值可以超过 1.0。 | 

### 收入和定价指标
<a name="yield-optimization-troubleshooting-metrics-revenue"></a>


| 指标 | 说明 | 
| --- | --- | 
| YieldOptimization.Revenue | 客户的总收入，来自 OrtB 出价回复的price属性。插入广告的价格总和。 | 
| YieldOptimization.IndicativeBidRevenue | 所有返回的出价的每次曝光指示值的总和（每次展示的出价，而不是每次插入的出价）。 Dual-emitted 在弃用Revenue时段旁边，仪表板切换后将被删除。Revenue用于新仪表板。 | 
| YieldOptimization.BidPriceAdsInserted | 收益优化插入的每个广告的每千次展示费用价格。按出价响应cur（货币）属性划分。不是按客户发放的，因此这是全账户范围的。 | 
| YieldOptimization.BidPriceAdsReturned | 每个出价的 CPM 价格返回到 BidResponse （筛选到插入项之前）。尺寸由。cur不是按客户发放的，因此这是全账户范围的。 | 

### 错误并跳过指标
<a name="yield-optimization-troubleshooting-metrics-error"></a>


| 指标 | 说明 | 
| --- | --- | 
| YieldOptimization.Errors | 对于连接错误、响应处理错误或意外异常，以 1 的形式发出。成功时也会作为 0 发出（使用 Sum，不是 SampleCount）。 | 
| YieldOptimization.Timeouts | 当 APS 请求超时时以 1 的形式发出。成功时也会作为 0 发出（使用 Sum，不是 SampleCount）。 | 
| YieldOptimization.BidRequestConfigurationError | 当模板或出价构造失败（缺少字段，JSON 无效）时，以 1 的形式发出。 | 
| YieldOptimization.SkipMinUnfilledDurationNotExceeded | 由于未填充持续时间低于阈值而跳过 YO 时作为 1 发出。 | 
| YieldOptimization.SkipPersonalizationTimeoutExceeded | 当由于剩余的个性化时间不足而跳过 YO 时作为 1 发出。 | 

**重要**  
`YieldOptimization.Errors``YieldOptimization.Timeouts`并且在每次成功请求时作为 0 发出。使用 ** Sum ** (n SampleCount ot) in CloudWatch 来获取实际错误或超时次数。`NoBid`而且`BidRequestThrottled`不计算在内`Errors`。它们是合法的无需求和背压条件的单独信号。

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

产量优化会在`MidasMMSService/ads_interaction_log`日志组中生成事件：


| 事件类型 | 说明 | 
| --- | --- | 
| RAW\_BID\_REQUEST | 发送给 APS 的完整 OpenRTB 出价请求 JSON。使用它来验证模板插值。 | 
| RAW\_BID\_RESPONSE | 来自APS的原始OpenRTB出价回应，包括出价和VAST XML。 | 
| FILLED\_AVAIL | 所有广告都完全有用。YO 广告有fillMode: "YIELD\_OPTIMIZATION"并包括bidIdbidPrice、currency、impressionId、和seatId。 | 

错误事件由`YieldOptimizationSupport`、、`MidasMMSService/application.log``OrtbBidRequestBuilder`和之类的记录器发出。`HttpOrtbRequestSubmitter` `OrtbResponseProcessor`

## CloudWatch 见解查询示例
<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)`给出全账户的平均每千次展示费用。

1. **时长已填满：**`Sum(YieldOptimization.FilledDuration)`对照`Sum(YieldOptimization.BidDuration)`显示请求的持续时间中有多少实际已填满。

## 常见问题
<a name="yield-optimization-troubleshooting-common-issues"></a>

### 收益优化未触发
<a name="yield-optimization-troubleshooting-not-triggering"></a>


| 症状 | Check | 解决方案 | 
| --- | --- | --- | 
| 根本没有 YO 指标 | 你在播放配置上配置了吗？ | 在控制台或 API 中启用 YO。 | 
| SkipMinUnfilledDurationNotExceeded发出 | 主要 ADS 填补了大部分空缺 | 降低MinimumUnfilledDuration或接受初级填充量就足够了。 | 
| SkipPersonalizationTimeoutExceeded发出 | 主广告太慢了，没时间给 YO | 优化主 ADS 延迟或检查个性化超时 SDC 配置。 | 

### 出价请求失败
<a name="yield-optimization-troubleshooting-bidrequests-failing"></a>


| 症状 | Check | 解决方案 | 
| --- | --- | --- | 
| BidRequestConfigurationError 指标 | 模板的必填字段缺失或为空 | 检查是否application.log存在特定错误（例如，app.bundle is required）。修复模板或确保玩家参数已发送。 | 
| 来自 APS 的 HTTP 204 | YieldOptimization.NoBid递增 | APS 没有出价。不是错误。检查RAW\_BID\_REQUEST占位符值（{UPPER\_CASE}模式），验证捆绑包和商店网址是否真实且较低的出价。 | 
| 来自 APS 的 HTTP 429 | YieldOptimization.BidRequestThrottled递增 | APS 正在节流。退回请求率。如果持续，请联系 APS 支持部门以提高 TPS 限制。 | 
| 来自 APS 的 HTTP 400 | 请求 JSON 无效 | 请检查中的 APS 错误消息RAW\_BID\_RESPONSE。验证 JSON 结构是否符合 OpenRTB 规范。 | 
|  500/503 来自 APS 的 HTTP | APS 服务器错误或过载 | 暂时性问题。监控 YieldOptimization.Errors。如果持续，请联系 APS 支持部门。 | 

### 广告已返回但未插入
<a name="yield-optimization-troubleshooting-not-inserted"></a>


| 症状 | Check | 解决方案 | 
| --- | --- | --- | 
| AdsReturned> 0 但是 AdsInserted = 0 | 广告在插入期间被过滤 | 检查FILLED\_AVAIL日志中是否存在跳过的原因：广告素材重复、超过剩余阈值或未找到广告变体（转码未完成）。 | 

## APS 错误代码参考
<a name="yield-optimization-troubleshooting-error-codes"></a>


| 代码 | 含义 | 常见原因 | 
| --- | --- | --- | 
| 200 | 出价成功 | 工作正常。 | 
| 204 | 不出价 | 该请求有效，但没有出价。这并不表示您的模板存在错误。 | 
| 400 | 请求不正确 | JSON 无效，缺少 OpenRTB 规范中的必填字段。 | 
| 500 | 服务器错误 | APS 内部问题、服务受限、超时。 | 
| 503 | 服务超载 | APS 背压。不要激进地重试。 | 
| 429 | 受限 | APS 已手动开始限制请求。如果持续，请联系 APS 支持部门。 | 