我需要分析我的 Application Load Balancer 访问日志。如何使用 Amazon Athena 执行此操作?

默认情况下,Elastic Load Balancing 不启用访问日志记录。在启用访问日志记录时,将指定一个 Amazon Simple Storage Service (Amazon S3) 存储桶。所有 Application Load Balancer 和 Classic Load Balancer 访问日志都存储在该 S3 存储桶中。然后,当您希望进行故障排除或分析负载均衡器的性能时,可以使用 Athena 分析 S3 中的访问日志。

注意:虽然您可以使用 Athena 分析 Application Load Balancer 和 Classic Load Balancer 的访问日志,但此处仅介绍了 Application Load Balancer。 

要在 Athena 中分析访问日志,请创建数据库和表:

1.    打开 Athena 控制台

2.    在查询编辑器中,运行类似如下的命令以创建数据库
注意:最佳实践是在与 S3 存储桶相同的 AWS 区域中创建数据库。

create database alb_db

3.    在您在步骤 2 中创建的数据库中,为 ALB 日志创建表

4.    在左侧窗格中的 Tables (表) 下,从表名称旁边的菜单按钮中选择 Preview table (预览表)。在 Results (结果) 窗口中,您将看到 ALB 访问日志中的数据。这意味着您已成功创建 Athena 表,现在可以查询 ALB 访问日志。

5.    使用查询编辑器对您在步骤 3 中创建的表运行 SQL 语句。您可以保存查询、查看以前的查询或下载 CSV 格式的查询结果。

示例查询

在以下示例中,alb_log 为表名称。修改表名称、列值和其他变量以适合您的查询。

操作 查询

按时间顺序查看前 100 个访问日志条目。

使用案例:分析和问题排查

SELECT *
FROM alb_log
ORDER by time ASC
LIMIT 100;

列出所有已访问 ALB 的客户端 IP 地址,以及它们访问 ALB 的次数。

使用案例:分析和问题排查

SELECT distinct client_ip, count() as count from alb_log
GROUP by client_ip
ORDER by count() DESC;

列出请求/响应对中通过 ALB 传递的平均数据量(以 KB 为单位)。

使用案例:分析和问题排查

SELECT (avg(sent_bytes)/1000.0 + avg(received_bytes)/1000.0)
as prewarm_kilobytes from alb_log;

列出 ALB 将流量路由到的所有目标以及 ALB 按百分比分配将请求路由到每个目标的次数。

使用案例:识别潜在的目标流量不平衡

SELECT target_ip, (Count(target_ip)* 100.0 / (Select Count(*) From alb_log))
as backend_traffic_percentage
FROM alb_log
GROUP by target_ip
ORDER By count() DESC;

列出客户端将请求发送到 ALB,然后在 ALB 空闲超时过期前终止与 ALB 的连接的次数(HTTP 460 错误)。

使用案例:纠正 HTTP 460 错误

SELECT * from alb_log where elb_status_code = '460'

列出因侦听器规则将请求转发给空的目标组而无法路由客户机请求的次数(HTTP 503 错误)。

使用案例:纠正 HTTP 503 错误

SELECT * from alb_log where elb_status_code = '503'

按照每个客户端访问指定 URL 的次数以降序顺序列出客户端。

使用案例:分析流量模式

SELECT client_ip, elb, request_url, count(*) as count from alb_log
GROUP by client_ip, elb, request_url
ORDER by count DESC;

按降序顺序列出 Firefox 用户最频繁访问的 10 个 URL。

使用案例:分析流量分配和模式

SELECT request_url, user_agent, count(*) as count
FROM alb_log
WHERE user_agent LIKE '%Firefox%'
GROUP by request_url, user_agent
ORDER by count(*) DESC
LIMIT 10;

按照每个客户端发送给 ALB 的请求中包含的数据量(以 MB 为单位)以降序顺序列出客户端。

使用案例:分析流量分配和模式

SELECT client_ip, sum(received_bytes/1000000.0) as client_datareceived_megabytes
FROM alb_log
GROUP by client_ip
ORDER by client_datareceived_megabytes DESC;

列出指定日期范围内每次目标处理时间超过 5 秒的时间。

使用案例:解决指定的时间范围内的延迟问题

SELECT * from alb_log
WHERE (parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z')
     BETWEEN parse_datetime('2018-08-08-00:00:00','yyyy-MM-dd-HH:mm:ss')
     AND parse_datetime('2018-08-08-02:00:00','yyyy-MM-dd-HH:mm:ss'))
AND (target_processing_time >= 5.0)


此页内容对您是否有帮助? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2018 年 12 月 20 日