

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

# 对 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 响应问题、VAST 解析问题、广告素材处理失败、ADS 超时、连接错误或配置问题，例如只有在发出请求时 URLs 才会发现的无效 ADS。
+ **缺少跟踪信标：**可能表示跟踪配置问题、服务器端报告问题或客户端实现差距。

### CloudWatch 查询未完成的流量分析
<a name="cloudwatch-queries-incomplete-flows"></a>

使用这些 Amazon CloudWatch Logs Insights 查询来识别不完整的事件流。根据所需的分析类型，对相应的日志组运行这些查询。

**日志组选择：**
+ **MediaTailor/AdDecisionServerInteractions**-用于分析广告决策服务器互动、广告机会和广告相关故障的查询。
+ **MediaTailor/TranscodeService**-用于分析由于转码问题、素材处理失败或其他与广告无关的问题而导致广告未插入的问题。

**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 网址配置错误：**验证播放配置中的 ADS 网址是否正确且可访问。在广告互动日志中，您将看到 ADS 请求事件 (`MAKING_ADS_REQUEST`)，但没有相应的 VAST 响应，通常伴有` ERROR_UNKNOWN `或类似的错误事件。
+ **网络连接问题：**检查与您的 ADS 之间的 MediaTailor 网络连接，包括防火墙规则和 DNS 解析。
+ **SSL/TLS 证书问题：**确保您的 ADS 使用来自受信任证书颁发机构的有效 SSL 证书。具体而言，对于 Google Ad Manager，您可能需要联系 [AWS Supp](https://aws.amazon.com/premiumsupport/) ort 以启用接受 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未收到响应，或者出现解析错误。

**常见原因和解决方案**
+ V@@ **AST 格式无效：**根据 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>

**症状：**收到大量回复，但明显的个性化设置失败或广告被跳过。

**常见原因和解决方案：**
+ **广告素材转码问题：**检查广告是否为` 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 频率不够高，无法进行客户端跟踪，或者玩家特定的信标触发逻辑问题。
+ **跟踪网址可访问性问题：**验证 VAS URLs T 响应中的跟踪是否可访问，并返回相应的响应。当 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>

使用事件流分析来优化广告插入效果。
+ **广告优化：**与您的广告提供商合作，优化响应时间并减少延迟。
+ **创意准备：**对广告素材进行预转码，以匹配您的内容配置文件并减少处理延迟。
+ **配置调整：**根据事件流分析调整超时设置、个性化阈值和其他配置参数。

## 其他故障排除资源
<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)。