我想识别在我的 AWS Organizations 下进行大量 API 调用的用量最高者。
解决方法
要识别进行大量 API 调用的账户,最佳做法是同时使用 Amazon CloudWatch Logs 和CloudWatch 指标。
以下解决方案使用 Amazon Virtual Private Cloud (Amazon VPC) DescribeVpcEndpoints API。
**注意:**Amazon Elastic Compute Cloud (Amazon EC2) 在账户级别限制 API 请求。为了提高性能,Amazon EC2 还会在组织级别限制 API 请求。
使用 CloudWatch Logs 识别用量最高者
要识别用量最高者并汇总特定时间段内所有账户的 API 调用总数,请使用 CloudWatch Logs。要创建 CloudWatch Logs 控制面板,请完成以下步骤:
- 为您的组织创建新的 AWS CloudTrail 跟踪或修改现有跟踪,以将跟踪发布到 CloudWatch Logs。
**注意:**必须将 CloudWatch Logs 设置为 Enabled(启用)。
- 打开 CloudWatch 控制台。
**注意:**请使用您用来创建 CloudWatch Logs 的账户。
- 在导航窗格中,选择 Logs,然后选择 Contributor Insights。
- 创建 Contributor Insights 规则,然后选择 Syntax(语法)。
- 要获取每个账户发起的 API 调用次数,请在语法编辑器中输入以下代码:
{
"AggregateOn": "Count",
"Contribution": {
"Filters": [
{
"Match": "$.eventName",
"In": [
"DescribeVpcEndpoints"
]
}
],
"Keys": [
"$.userIdentity.accountId",
"$.eventName"
]
},
"LogFormat": "JSON",
"Schema": {
"Name": "CloudWatchLogRule",
"Version": 1
},
"LogGroupARNs": [
"arn:aws:logs:us-west-2:account:log-group:aws-cloudtrail-logs-73008ace"
]
}
要获取所有账户的全部 API 调用汇总,请输入以下代码:
{
"AggregateOn": "Count",
"Contribution": {
"Filters": [
{
"Match": "$.eventName",
"In": [
"DescribeVpcEndpoints"
]
}
],
"Keys": [
"$.eventName"
]
},
"LogFormat": "JSON",
"Schema": {
"Name": "CloudWatchLogRule",
"Version": 1
},
"LogGroupARNs": [
"arn:aws:logs:us-west-2:account:log-group:aws-cloudtrail-logs-73008ace"
]
}
**注意:**请将 DescribeVpcEndpoints 替换为您的 API 调用,将 arn:aws:logs:us-west-2:account:log-group:aws-cloudtrail-logs-73008ace 替换为您的日志组 ARN。
- 选择 Action(操作),然后选择 Add to dashboard(添加到控制面板)。
- 选择现有控制面板或创建新的控制面板。
- 选择 Save(保存)。
要查找特定时间段内的用量最高者,您还可以运行以下 CloudWatch Logs Insights 查询:
fields @timestamp, @message, @logStream, @log
| filter eventName = 'DescribeVpcEndpoints'
| sort @timestamp desc
| stats count() by bin(1m)
**注意:**请将 DescribeVpcEndpoints 替换为您的 API 调用。
使用 CloudWatch 指标来识别用量最高者
**注意:**确保您的配置符合 Metrics Insights 配额。
最佳做法是创建 CloudWatch 警报,以在您达到 API 调用最大配额的 60% 时提醒您。
要设置 CloudWatch 指标控制面板,请完成以下步骤:
- 设置跨账户可观测性。
- 打开 CloudWatch 控制台。
- 选择 Use metrics(使用指标),然后选择 All metrics(所有指标)选项卡。
- 选择 Source(源),然后输入以下代码:
{
"metrics": [
[
{
"expression": "SELECT SUM(CallCount) FROM SCHEMA(\"AWS/Usage\", Class,Resource,Service,Type) WHERE Resource = 'DescribeVpcEndpoints'",
"label": "Query1",
"id": "q1",
"period": 60
}
]
],
"view": "timeSeries",
"stacked": false,
"region": "us-east-1",
"stat": "Average",
"period": 60,
"annotations": {
"horizontal": [
{
"label": "Org throttle",
"value": 225
}
]
}
}
**注意:**请将 DescribeVpcEndpoints 替换为您的 API 调用,将 us-east-1 替换为您的 AWS 区域,将 225 替换为警报配额。
- 选择 Update(更新)。
- 选择 Action(操作),然后选择 Add to dashboard(添加到控制面板)。
- 选择现有控制面板或创建新的控制面板。最佳做法是使用包含您的 CloudWatch Logs 数据的同一个控制面板。
- 选择 Save(保存)。
相关信息
在 Amazon CloudWatch 中分析 AWS Cloudtrail
AWS PrivateLink 配额