访问日志记录 - AWS Elemental MediaPackage

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

访问日志记录

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

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

将访问日志发布到 CloudWatch Logs 所需的权限

启用访问日志记录后,MediaPackage 会在您的 AWS 账户中创建一个 IAM 服务相关角色 AWSServiceRoleForMediaPackage。此角色允许 MediaPackage 将访问日志发布到 CloudWatch。有关 MediaPackage 如何使用服务相关角色的信息,请参阅 对 MediaPackage 使用服务相关角色

启用访问日志记录

您可以使用 AWS Management Console或 AWS CLI 启用访问日志。

要使用控制台为现有通道启用访问日志
  1. 打开 MediaPackage 控制台:https://console.aws.amazon.com/mediapackage/

  2. 选择通道。

  3. 配置访问日志部分,执行以下操作:

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

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

要使用控制台为现有打包组启用访问日志
  1. 打开 MediaPackage 控制台:https://console.aws.amazon.com/mediapackage/

  2. 从导航部分选择打包组

  3. 选择打包组。

    1. 在导航栏中选择编辑

    2. 访问日志记录部分,选择启用出口访问日志

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

  4. 选择 Save changes(保存更改)。

要使用 AWS CLI 启用通道的访问日志

configure-logs 命令与 --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 命令与 --egress-access-logs 参数一起使用,启用访问日志记录。您可以为 --egress-access-logs 参数添加 CloudWatch 日志组名称。如果未指定日志组名称,则使用 MediaPackage 默认日志组。对于入口日志,默认日志组为 /aws/MediaPackage/IngressAccessLogs;对于出口日志,默认日志组为 /aws/MediaPackage/EgressAccessLogs

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

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

此命令没有返回值。

禁用访问日志记录

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

使用控制台禁用访问日志记录
  1. 打开 MediaPackage 控制台:https://console.aws.amazon.com/mediapackage/

    选择通道或打包组。

  2. 选择编辑

  3. 访问日志记录部分,取消选择入口访问日志记录出口访问日志记录,或两者均取消。

  4. 选择 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

此命令没有返回值。

访问日志格式

访问日志文件由一系列 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,则将被截断。

账户

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

channelId

收到请求的通道 ID。

channelArn

收到请求的通道 Amazon 资源名称(ARN)。

domainName

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

requestId

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

endpointId

收到请求的端点 ID。

endpointArn

收到请求的端点 Amazon 资源名称(ARN)。

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

读取访问日志

MediaPackage 将访问日志写入 Amazon CloudWatch Logs。典型的 CloudWatch Logs 将收取费用。使用 CloudWatch Logs Insights 读取访问日志。有关如何使用 CloudWatch Logs Insights 的信息,请参阅《AWS CloudWatch Logs 用户指南》中的使用 CloudWatch Logs Insights 分析日志数据

注意

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

示例

该部分包含可用于读取 MediaPackage 调试日志数据的示例查询。

例 查看通道的 HTTP 状态代码响应。

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

fields @timestamp, @message | filter channelId like 'my-channel' | stats count() by statusCode
例 获取通道上每个端点的请求数。
fields @timestamp, @message | filter channelId like 'my-channel' | stats count() by endpointId
例 查看每个资产的状态代码。
fields @timestamp, @message | filter assetArnlike 'my-asset-id' | stats count() by statusCode
例 获取一段时间内打包配置的 P99 响应时间
fields @timestamp, @message | filter packagingConfigArn like 'my-dash-config' | stats pct(processingTime, 99) by bin(5m)