在一处查看 AWS ALB 访问日志
View AWS ALB access logs in one place
我为我的 AWS ALB 配置了访问日志记录。它每隔一段时间将这些日志转储到 S3 存储桶中。
要查看它们,您必须下载然后解压缩文件并浏览文本。
我想在一个地方查看 ALB HTTP 请求的列表,而不必执行上述过程。
AWS 是否提供此类服务?
AWS Application Load Balancer 将日志文件保存到 Amazon S3。
Amazon Athena 可用于查询保存在 S3 中的文件。重要的部分是了解文件格式。
查看这篇优秀文章:Athena & ALB Log Analysis
他们使用此查询创建 table:
CREATE EXTERNAL TABLE IF NOT EXISTS logs.web_alb (
type string,
time string,
elb string,
client_ip string,
client_port string,
target string,
request_processing_time int,
target_processing_time int,
response_processing_time int,
elb_status_code int,
target_status_code string,
received_bytes int,
sent_bytes int,
request_verb string,
request_url string,
request_proto string,
user_agent string,
ssl_cipher string,
ssl_protocol string,
target_group_arn string,
trace_id string
)
PARTITIONED BY(year string, month string, day string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1',
'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*) ([-0-9]*) ([-0-9]*) ([-0-9]*) ([-0-9]*) ([^ ]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) ([^ ]*) ([^ ]*)\" \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)'
) LOCATION 's3://{{BUCKET}}/AWSLogs/{{ACCOUNT}}/elasticloadbalancing/us-east-1/';
AWS 将这些日志文件放在 S3 中。这是无法更改的,而且我看不到 AWS 也可以放置这些日志的任何其他更好的地方。现在,重要的是您希望如何处理来自 S3 的这些日志!你在那里有什么要求!
几个选项:
正如约翰所说;您可以使用 Athena 直接查询此 S3 存储桶。这就像你在本地文件系统上有这些日志,然后你 运行 grep 就可以了。
如果您需要聚合此数据;创建一些 reports/dashboards --> 在这些日志文件上使用 EMR。
如果您真的需要查看这些文件;您始终可以在其中一台每小时运行一次的服务器上设置一个 cronjob,这与您在上面手动执行的操作完全相同。这将确保您始终准备好日志文件以供使用。
我们甚至可以将这些日志文件放入 CloudWatch 日志、Kinesis 流中。
这完全取决于您的要求..
我为我的 AWS ALB 配置了访问日志记录。它每隔一段时间将这些日志转储到 S3 存储桶中。
要查看它们,您必须下载然后解压缩文件并浏览文本。
我想在一个地方查看 ALB HTTP 请求的列表,而不必执行上述过程。
AWS 是否提供此类服务?
AWS Application Load Balancer 将日志文件保存到 Amazon S3。
Amazon Athena 可用于查询保存在 S3 中的文件。重要的部分是了解文件格式。
查看这篇优秀文章:Athena & ALB Log Analysis
他们使用此查询创建 table:
CREATE EXTERNAL TABLE IF NOT EXISTS logs.web_alb (
type string,
time string,
elb string,
client_ip string,
client_port string,
target string,
request_processing_time int,
target_processing_time int,
response_processing_time int,
elb_status_code int,
target_status_code string,
received_bytes int,
sent_bytes int,
request_verb string,
request_url string,
request_proto string,
user_agent string,
ssl_cipher string,
ssl_protocol string,
target_group_arn string,
trace_id string
)
PARTITIONED BY(year string, month string, day string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1',
'input.regex' = '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*) ([-0-9]*) ([-0-9]*) ([-0-9]*) ([-0-9]*) ([^ ]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) ([^ ]*) ([^ ]*)\" \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)'
) LOCATION 's3://{{BUCKET}}/AWSLogs/{{ACCOUNT}}/elasticloadbalancing/us-east-1/';
AWS 将这些日志文件放在 S3 中。这是无法更改的,而且我看不到 AWS 也可以放置这些日志的任何其他更好的地方。现在,重要的是您希望如何处理来自 S3 的这些日志!你在那里有什么要求!
几个选项:
正如约翰所说;您可以使用 Athena 直接查询此 S3 存储桶。这就像你在本地文件系统上有这些日志,然后你 运行 grep 就可以了。
如果您需要聚合此数据;创建一些 reports/dashboards --> 在这些日志文件上使用 EMR。
如果您真的需要查看这些文件;您始终可以在其中一台每小时运行一次的服务器上设置一个 cronjob,这与您在上面手动执行的操作完全相同。这将确保您始终准备好日志文件以供使用。
我们甚至可以将这些日志文件放入 CloudWatch 日志、Kinesis 流中。
这完全取决于您的要求..