【问题标题】:How to count number of occurrences of IP address in CloudWatch log如何计算 CloudWatch 日志中 IP 地址的出现次数
【发布时间】:2019-06-04 08:34:03
【问题描述】:

假设我有一个如下所示的云观察日志:

最左边的 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

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

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

【问题讨论】:

  • Insights 提供了parse 函数,它可以让您使用正则表达式提取字段,但没有很好的文档记录。
  • 但是,这真的是您想要做的吗?根据您的其他问题,我假设这是来自您的 ELB 应用程序服务器背后的访问日志。这意味着这些 IP 地址是 ELB 节点,不是实际的远程客户端。这真的是你想要的吗? (我无法想象我会关心这些信息的任何情况,但你可能有一个)我发现分析load balancer access logs 更有用。
  • 是的,这确实是我想做的。我不想暴露我公司客户的真实 IP。这就是我在问题中使用负载均衡器 IP 的原因。
  • 我将使用 the methods here 将客户端的 IP 地址上传到 CloudWatch。
  • 关于“我不想暴露真实的 IP”:正如所写,您的问题并没有说明这一点,并且考虑到关于 SO 的问题普遍存在,这些问题询问如何执行无意义的任务,这是一个合理的假设,这是其中之一。

标签: amazon-web-services amazon-cloudwatch


【解决方案1】:

下面的查询会生成您需要的分组。我看到了here

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

【讨论】:

    【解决方案2】:

    如果您的目标是分析实际的远程 IP 地址并且您使用的是 ELB,那么最好捕获ELB access logs 并对其进行分析。这将提供以下好处:

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

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

    【讨论】:

      【解决方案3】:

      在日志中的任何位置识别 IP:

      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
        | sort requestCount desc
      

      【讨论】:

        【解决方案4】:

        “Elastic Load Balancing 会尽最大努力记录请求。我们建议您使用访问日志来了解请求的性质,而不是作为对所有请求的完整记录。”

        https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html

        如果准确性非常重要并使用 ELB 日志,则值得牢记。我过去做过一些工作,用 ELB 日志分析 HTTP 访问日志,发现它们之间的请求计数存在相当大的差异(http 日志是准确的)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-19
          相关资源
          最近更新 更多