

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

# 访问日志记录
<a name="access-logging"></a>

MediaPackage 提供访问日志，用于捕获有关发送到您的 MediaPackage 频道或打包组的请求的详细信息。 MediaPackage 为发送到频道输入端点的请求生成*入口访问日**志，为发送到频道终端节点或打包组资产的请求生成出口访问日志*。每个日志都包含信息 (例如，收到请求的时间、客户端的 IP 地址、延迟、请求路径和服务器响应)。您可以使用这些访问日志来分析服务性能和排查问题。他们还可以帮助您了解客户群并了解您的 MediaPackage 账单。

 访问日志是其中的一项可选功能 MediaPackage ，默认情况下处于禁用状态。启用访问日志记录后， MediaPackage 捕获日志并将其保存到您在创建或管理访问 CloudWatch 日志时指定的日志组中。通常 CloudWatch 会收取日志费用。

**Topics**
+ [发布访问日志的权限 CloudWatch](#permissions)
+ [启用访问日志记录](#enable-access-logging)
+ [禁用访问日志记录](#disable-access-logging)
+ [访问日志格式](#access-log-format)
+ [读取访问日志](#read-access-logs)

## 发布访问日志的权限 CloudWatch
<a name="permissions"></a>

启用访问日志记录后， MediaPackage 会在您的 AWS 账户中创建一个 IAM 服务相关角色。`AWSServiceRoleForMediaPackage`此角色允许 MediaPackage 向发布访问日志 CloudWatch。有关如何 MediaPackage 使用服务相关角色的信息，请参阅[将 Service-Linked 角色用于 MediaPackage](using-service-linked-roles.md)。

## 启用访问日志记录
<a name="enable-access-logging"></a>

您可以使用 AWS 管理控制台 或启用访问日志 AWS CLI。

**要使用控制台为现有通道启用访问日志**

1. 打开 MediaPackage 控制台，网址为[https://console.aws.amazon.com/mediapackage/](https://console.aws.amazon.com/mediapackage/)。

1. 选择通道。

1. 在**配置访问日志**部分，执行以下操作：

   1. 选择**启用入口访问日志**或**启用出口访问日志**，或两者同时选择。

   1. 您可以指定自定义 CloudWatch **日志组名称**。如果留空，则使用默认组。

**要使用控制台为现有打包组启用访问日志**

1. 打开 MediaPackage 控制台，网址为[https://console.aws.amazon.com/mediapackage/](https://console.aws.amazon.com/mediapackage/)。

1. 从导航部分选择**打包组**。

1. 选择打包组。

   1. 在导航栏中选择**编辑**。

   1. 在**访问日志记录**部分，选择**启用出口访问日志**。

   1. 您可以指定自定义 CloudWatch **日志组名称**。如果留空，则使用默认组。

1. 选择 **Save changes（保存更改）**。

**要启用频道的访问日志，请使用 AWS CLI**  
将 [configure-logs](https://docs.aws.amazon.com/cli/latest/reference/mediapackage/configure-logs.html) 命令与 `--ingress-access-logs` 参数或 `--egress-access-logs` 参数结合使用，或与两种参数一起使用，启用访问日志记录。您可以为`--ingress-access-logs`和`--egress-access-logs`参数添加 CloudWatch 日志组名称。如果您未指定日志组名称，则使用 MediaPackage 默认日志组。对于入口日志，默认日志组为 `/aws/MediaPackage/IngressAccessLogs`；对于出口日志，默认日志组为 `/aws/MediaPackage/EgressAccessLogs`。

使用以下命令，通过默认日志组启用入口日志和访问日志：

```
aws mediapackage configure-logs --id {{channel-name}} --ingress-access-logs {} --egress-access-logs {}
```

此命令没有返回值。

**要启用打包组的访问日志，请使用 AWS CLI**  
将 [configure-logs](https://docs.aws.amazon.com/cli/latest/reference/mediapackage-vod/configure-logs.html) 命令与 `--egress-access-logs` 参数一起使用，启用访问日志记录。您可以为`--egress-access-logs`参数添加 CloudWatch 日志组名称。如果您未指定日志组名称，则使用 MediaPackage 默认日志组。对于入口日志，默认日志组为 `/aws/MediaPackage/IngressAccessLogs`；对于出口日志，默认日志组为 `/aws/MediaPackage/EgressAccessLogs`。

使用以下命令，通过默认日志组启用出口访问日志：

```
aws mediapackage configure-logs --id {{package-name}} --egress-access-logs {}
```

此命令没有返回值。

## 禁用访问日志记录
<a name="disable-access-logging"></a>

您可以随时禁用 MediaPackage 频道或打包组的访问日志。

**使用控制台禁用访问日志记录**

1. 打开 MediaPackage 控制台，网址为[https://console.aws.amazon.com/mediapackage/](https://console.aws.amazon.com/mediapackage/)。

   选择通道或打包组。

1. 选择**编辑**。

1. 在**访问日志记录**部分，取消选择**入口访问日志记录**、**出口访问日志记录**，或两者均取消。

1. 选择 **Save changes（保存更改）**。

**要禁用频道的访问记录，请使用 AWS CLI**  
使用 `configure-logs` 命令禁用访问日志记录。如果 `configure-logs` 命令未声明一个或多个访问日志参数，则会禁用相应的访问日志。例如，以下命令将为通道启用出口访问日志，并禁用入口访问日志：

```
aws mediapackage configure-logs --id {{channel-name}} --egress-access-logs {}
```

此命令没有返回值。

**要禁用打包组的访问日志记录，请使用 AWS CLI**  
使用 `configure-logs` 命令禁用访问日志记录。如果 `configure-logs` 命令未声明一个或多个访问日志参数，则会禁用相应的访问日志。例如，在以下命令中，`configure-logs` 不包含 `--egress-access-logs`，因此禁用出口日志：

```
aws mediapackage configure-logs --id {{package-group-name}}
```

此命令没有返回值。

## 访问日志格式
<a name="access-log-format"></a>

访问日志文件由一系列 JSON 格式的日志记录组成，其中每个日志记录代表一个请求。日志中字段的顺序可能会变化。以下是通道出口访问日志示例：

```
{
    "timestamp": "2020-07-13T18:59:56.293656Z",
    "clientIp": "192.0.2.0/24",
    "processingTime": 0.445,
    "statusCode": "200",
    "receivedBytes": 468,
    "sentBytes": 2587370,
    "method": "GET",
    "request": "https://aaabbbcccdddee.mediapackage.us-east-1.amazonaws.com:443/out/v1/75ee4f20e5df43e5821e5cb17ea19238/hls_7_145095.ts?m=1538005779",
    "protocol": "HTTP/1.1",
    "userAgent": "sabr/3.0 Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Safari/528.17",
    "account": "111122223333",
    "channelId": "my_channel",
    "channelArn": "arn:aws:mediapackage:us-west-2:111122223333:channels/ExampleChannelID",
    "domainName": "aaabbbcccdddee.mediapackage.us-east-1.amazonaws.com",
    "requestId": "aaaAAA111bbbBBB222cccCCC333dddDDD",
    "endpointId": "my_endpoint",
    "endpointArn": "arn:aws:mediapackage:us-west-2:111122223333:origin_endpoints/ExampleEndpointID"
}
```

以下列表按顺序描述了日志记录字段：

*timestamp*  
收到请求的日期时间。该值是 `ISO-8601` 日期时间，基于为此请求提供服务的主机的系统时钟。

*clientIp*  
请求客户端的 IP 地址。

*processingTime*  
处理您的请求所 MediaPackage 花费的秒数。该值计算从收到您的请求的最后一个字节到发出响应的第一个字节的时间。

*statusCode*  
响应的数字 HTTP 状态代码。

*receivedBytes*  
 MediaPackage 服务器接收的请求正文中的字节数。

*sentBytes*  
 MediaPackage 服务器发送的响应正文中的字节数。此值通常与服务器响应中包含的 `Content-Length` 标头值相同。

*method*  
用于请求的 HTTP 请求方法：DELETE、GET、HEAD、OPTIONS、PATCH、POST 或 PUT。

*request*  
请求 URL。

*protocol*  
用于请求的协议类型，比如 HTTP。

*userAgent*  
一个用户代理字符串，用于标识发出请求的客户端，用双引号括起来。该字符串由一个或多个产品标识符组成（product/version）。如果字符串长度超过 8 KB，则将被截断。

*account*  
用于发出请求的账户的账户 ID。 AWS 

*channelId*  
收到请求的通道 ID。

*channelArn*  
收到请求的通道 Amazon 资源名称（ARN）。

*domainName*  
客户端在 TLS 握手期间提供的服务器名称指示域，用双引号括起来。如果客户端不支持 SNI，或者域与证书不匹配，并且向客户端提供默认证书，则将此值设置为 `-`。

*requestId*  
由生成的字符串， MediaPackage 用于唯一标识每个请求。

*endpointId*  
收到请求的端点 ID。

*endpointArn*  
收到请求的端点 Amazon 资源名称（ARN）。

日志中字段的顺序可能会发生变化。

## 读取访问日志
<a name="read-access-logs"></a>

MediaPackage 将访问日志写入 Amazon CloudWatch 日志。通常 CloudWatch 会收取日志费用。使用 CloudWatch Logs Insights 读取访问日志。有关如何使用 Lo CloudWatch gs Insights 的信息，请参阅《[日志*用户指南》中的 “使用 CloudWatch 日志见解分析AWS CloudWatch 日志*数据](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)”。

**注意**  
访问日志可能需要几分钟才能显示在中 CloudWatch。如果您没有看到日志，请等待几分钟，然后重试。

### 示例
<a name="query-examples"></a>

 本节包括可用于读取 MediaPackage调试日志数据的示例查询。

**Example 查看通道的 HTTP 状态代码响应。**  
 使用此查询可按通道的 HTTP 状态代码查看响应。您可以使用查询来查看 HTTP 错误代码响应，以帮助您排查问题。  

```
fields @timestamp, @message
| filter {{channelId}} like {{'my-channel'}}
| stats count() by statusCode
```

**Example 获取通道上每个端点的请求数。**  

```
fields @timestamp, @message
| filter {{channelId}} like {{'my-channel'}}
| stats count() by {{endpointId}}
```

**Example 查看每个资产的状态代码。**  

```
fields @timestamp, @message
| filter assetArnlike {{'my-asset-id'}}
| stats count() by statusCode
```

**Example 获取一段时间内打包配置的 P99 响应时间**  

```
fields @timestamp, @message
| filter packagingConfigArn like {{'my-dash-config'}}
| stats pct(processingTime, 99) by bin(5m)
```