如何解决寻找一种更好的方法来计算 API 的 5 分钟请求率
我正在尝试使用 AWS CloudWatch Logs Insights 来计算 API 5 分钟内来自每个 IP 地址的请求数。
这是我想要获取的数据示例。
时间范围:01:05 - 01:10
请求来源 | 请求数量 |
---|---|
53.240.51.81 | 314 |
36.241.227.134 | 237 |
201.72.45.51 | 201 |
时间范围:01:10 - 01:15
请求来源 | 请求数量 |
---|---|
43.142.151.81 | 334 |
36.131.237.174 | 230 |
161.72.15.52 | 198 |
时间范围:01:15 - 01:20
请求来源 | 请求数量 |
---|---|
31.132.141.91 | 334 |
39.138.217.174 | 230 |
191.76.15.42 | 198 |
...
这是我的查询:
fields @timestamp,@message
| filter (@message like "/my_api")
| parse @message '* - * [*] * * * "*" * * * "*" "*" "*"' as remote_addr,remote_user,time_local,http_method,path,http_version,header,status_code,request_length,body_bytes_sent,http_referer,http_user_agent,http_x_forwarded_for
| stats count() as requestCount by http_x_forwarded_for
| sort requestCount desc
因此,如果我想获取过去 24 小时内的数据,则必须将 Logs Insights 的时间范围指定为 24 * 60 / 5
= 288
次。并运行查询 288 次。
执行我上面描述的步骤会非常耗时。
我想获取数据的原因是我想使用 AWS WAF 对我的 API 设置速率限制。
在应用速率限制之前,我需要知道我的 API 在正常情况下的请求速率。
解决方法
针对我的 CloudTrail 事件日志尝试了类似的查询,而 bin()
正是您想要的:
fields @timestamp,@message
| stats count(*) by eventName,bin(5m)
| sort desc
| limit 20
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。