如何统计CloudWatch日志中IP地址的出现次数

Bri*_*ian 5 amazon-web-services amazon-cloudwatch

假设我有一个如下所示的云监视日志:

在此输入图像描述

最左边的IP代表请求来自哪里。

是否可以列出每个IP在我指定的时间范围内出现的次数?

我的意思是我想创建如下所示的数据:

time range: 2019-06-02 00:00:00 - 2019-06-04 13:00:00
number of occurrences of `172.31.13.80`: 130
number of occurrences of `172.31.25.110`: 112
number of occurrences of `172.31.8.124`: 99
number of occurrences of `172.31.8.121`: 86
Run Code Online (Sandbox Code Playgroud)

CloudWatch Logs Insights似乎可以做与我想要的类似的事情。但我还没有弄清楚如何使用 Insights 来做到这一点。

有谁知道如何统计每个IP出现的次数?

小智 5

下面的查询进行您需要的分组。我在这里看到了。

fields @timestamp, @message
  | parse @message /(?<@ip>^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})[.]*)/
  | stats count() as requestCount by @ip
  | filter strlen(@ip) > 0
  | sort requestCount desc
Run Code Online (Sandbox Code Playgroud)


gue*_*est 2

如果您的目标是分析实际的远程 IP 地址并且您正在使用 ELB,那么最好捕获ELB访问日志并分析这些日志。这将带来以下好处:

  • 访问源请求数据,包括客户端 IP 和 SSL 参数。
  • 计时信息,包括失败请求的计时。
  • 无需编写公开请求标头的自定义日志格式。

AWS Athena具有用于访问这些日志的预构建查询,并且 Athena 的类似 SQL 的查询语言为您提供了比 CloudWatch Logs Insights 更多的灵活性。您还可以将日志发送到 CloudWatch 并使用 Insights(它可以识别 ELB 日志格式),但这似乎是不必要的工作。