在一处查看 AWS ALB 访问日志

View AWS ALB access logs in one place

我为我的 AWS ALB 配置了访问日志记录。它每隔一段时间将这些日志转储到 S3 存储桶中。

要查看它们,您必须下载然后解压缩文件并浏览文本。

我想在一个地方查看 ALB HTTP 请求的列表,而不必执行上述过程。

AWS 是否提供此类服务?

A​​WS 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 的这些日志!你在那里有什么要求!

几个选项:

  1. 正如约翰所说;您可以使用 Athena 直接查询此 S3 存储桶。这就像你在本地文件系统上有这些日志,然后你 运行 grep 就可以了。

  2. 如果您需要聚合此数据;创建一些 reports/dashboards --> 在这些日志文件上使用 EMR。

  3. 如果您真的需要查看这些文件;您始终可以在其中一台每小时运行一次的服务器上设置一个 cronjob,这与您在上面手动执行的操作完全相同。这将确保您始终准备好日志文件以供使用。

  4. 我们甚至可以将这些日志文件放入 CloudWatch 日志、Kinesis 流中。

这完全取决于您的要求..