复盘成本发现 Bedrock 调用量异常偏高。CloudTrail 一查——一个忘关的测试 Lambda 在持续调用。
CloudTrail 记录 AWS 账号里所有 API 调用。对 AI Agent 来说,它能告诉你:谁调了 Bedrock、调了哪个模型、什么时间、从哪个 IP。
开启 Bedrock 数据事件
默认 CloudTrail 不记录 InvokeModel(属于数据事件),需要手动开:
aws cloudtrail put-event-selectors \
--trail-name your-trail \
--advanced-event-selectors '[{
"Name": "Bedrock events",
"FieldSelectors": [
{"Field": "eventCategory", "Equals": ["Data"]},
{"Field": "resources.type", "Equals": ["AWS::Bedrock::Model"]}
]
}]'
实用查询(CloudWatch Logs Insights)
按小时统计调用量:
fields @timestamp, requestParameters.modelId
| filter eventSource = "bedrock.amazonaws.com" and eventName = "InvokeModel"
| stats count(*) by bin(1h)
按模型统计:
fields requestParameters.modelId
| filter eventSource = "bedrock.amazonaws.com"
| stats count(*) as cnt by requestParameters.modelId
| sort cnt desc
查半夜异常调用:
filter eventSource = "bedrock.amazonaws.com"
| filter datepart(@timestamp, "hour") < 6 or datepart(@timestamp, "hour") > 22
设告警
# Metric Filter
aws logs put-metric-filter \
--log-group-name /aws/cloudtrail/bedrock-audit \
--filter-name BedrockInvokeCount \
--filter-pattern '{ $.eventSource = "bedrock.amazonaws.com" && $.eventName = "InvokeModel" }' \
--metric-transformations metricName=BedrockInvokeModelCount,metricNamespace=Custom/Bedrock,metricValue=1
# 每小时超 100 次报警
aws cloudwatch put-metric-alarm \
--alarm-name bedrock-high-invoke \
--metric-name BedrockInvokeModelCount \
--namespace Custom/Bedrock \
--statistic Sum --period 3600 --threshold 100 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 \
--alarm-actions arn:aws:sns:us-west-2:123456789012:ops-alerts
日志成本
S3 存长期($0.023/GB/月),CloudWatch Logs 存 30 天方便查( �L�Ј9�a9ai{�"x� �L9i*yd#�/k�X�Y\�9� zd�x� ���-�HRHY�[�9�9o�yi!�."y.��ie��&�PSH9�y��fd8� U��[��[�9�y�dy��8� P��Y�Z[9�yk�z+�x� ���KKB���9g*9.��jk:"�.�y��y��9."�j�:+�z`&�/���