本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
监控和可观测性
Amazon Bedrock 会针对您的托管知识库发出Amazon CloudTrail 数据事件Retrieve和 GetDocumentContent API 调用。您可以使用这些事件来监控成功使用情况并检测访问失败。以下演练设置了向 Amazon Logs CloudWatch 日志组传送数据事件的 CloudTrail 跟踪,然后创建指标筛选条件和警报以提醒错误。
第 1 步:在 Amazon CloudTrail CloudWatch 上启用 Amazon Bedrock 知识库活动
设置一条 CloudTrail 跟踪以捕获 Amazon Bedrock 知识库数据事件并将其传送到 Amazon Lo CloudWatch gs 日志组。在托管知识库所在的区域中创建跟踪和日志组。您也可以通过控制台执行此操作, CloudTrail 控制台会自动创建日志组和 IAM 角色。
创建 S3 存储桶,应用允许 CloudTrail 写入的存储桶策略,然后创建 Amazon Lo CloudWatch gs 日志组:
aws s3 mb s3://YOUR_TRAIL_BUCKETaws s3api put-bucket-policy --bucketYOUR_TRAIL_BUCKET--policy '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::YOUR_TRAIL_BUCKET" }, { "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::YOUR_TRAIL_BUCKET/AWSLogs/ACCOUNT_ID/*", "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}} } ] }' aws logs create-log-group --log-group-name bedrock-kb-cloudtrail
创建允许 CloudTrail 向日志组传送日志的 IAM 角色:
aws iam create-role \ --role-name CloudTrail-CWLogs-Role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": {"Service": "cloudtrail.amazonaws.com"}, "Action": "sts:AssumeRole" }] }' aws iam put-role-policy \ --role-name CloudTrail-CWLogs-Role \ --policy-name CWLogsPolicy \ --policy-document '{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["logs:CreateLogStream", "logs:PutLogEvents"], "Resource": "arn:aws:logs:REGION:ACCOUNT_ID:log-group:bedrock-kb-cloudtrail:*" }] }'
创建跟踪,将其配置为捕获 Amazon Bedrock 知识库数据事件,然后开始记录:
aws cloudtrail create-trail \ --name bedrock-kb-data-events \ --s3-bucket-nameYOUR_TRAIL_BUCKET\ --cloud-watch-logs-log-group-arn "arn:aws:logs:REGION:ACCOUNT_ID:log-group:bedrock-kb-cloudtrail:*" \ --cloud-watch-logs-role-arn "arn:aws:iam::ACCOUNT_ID:role/CloudTrail-CWLogs-Role" aws cloudtrail put-event-selectors \ --trail-name bedrock-kb-data-events \ --advanced-event-selectors '[{ "Name": "BedrockKBDataEvents", "FieldSelectors": [ {"Field": "eventCategory", "Equals": ["Data"]}, {"Field": "resources.type", "Equals": ["AWS::Bedrock::KnowledgeBase"]} ] }]' aws cloudtrail start-logging --name bedrock-kb-data-events
第 2 步:为 Amazon 快速检索调用创建指标筛选条件
创建指标筛选条件,以便在 Amazon Quick 调用您的托管知识库时跟踪检索调用和错误。
呼叫量指标-跟踪您的托管知识库的检索呼叫量。
aws logs put-metric-filter \ --log-group-name bedrock-kb-cloudtrail \ --filter-name QuickSight-Retrieve-CallCount-KB_ID\ --filter-pattern '{ $.eventSource = "bedrock.amazonaws.com" && $.eventName = "Retrieve" && $.userIdentity.invokedBy = "quicksight.amazonaws.com" && $.resources[0].ARN = "*KB_ID*" }' \ --metric-transformations '[{ "metricName": "RetrieveCallCount", "metricNamespace": "QuickSight/BedrockKB", "metricValue": "1", "dimensions": {"KnowledgeBaseId": "$.resources[0].ARN"} }]'
错误指标 — 以下示例统计来自 Amazon Quick 但失败的Retrieve调用AccessDenied。当 Amazon Quick 服务角色缺少权限或跨账户资源策略配置错误时,会触发此警报。您可以ThrottlingException根据自己的监控需求为其他错误代码创建额外的指标筛选器。
aws logs put-metric-filter \ --log-group-name bedrock-kb-cloudtrail \ --filter-name QuickSight-Retrieve-AccessDenied-KB_ID\ --filter-pattern '{ $.eventSource = "bedrock.amazonaws.com" && $.eventName = "Retrieve" && $.userIdentity.invokedBy = "quicksight.amazonaws.com" && $.resources[0].ARN = "*KB_ID*" && $.errorCode = "AccessDenied" }' \ --metric-transformations '[{ "metricName": "RetrieveAccessDeniedCount", "metricNamespace": "QuickSight/BedrockKB", "metricValue": "1", "dimensions": {"KnowledgeBaseId": "$.resources[0].ARN"} }]'
步骤 3:创建 CloudWatch 警报
创建在出现拒绝访问错误时触发的警报。(可选)向其中添加 SNS 主题 ARN --alarm-actions 以获取通知。
aws cloudwatch put-metric-alarm \ --alarm-name QuickSight-Retrieve-AccessDenied-KB_ID\ --metric-name RetrieveAccessDeniedCount \ --namespace "QuickSight/BedrockKB" \ --dimensions Name=KnowledgeBaseId,Value="arn:aws:bedrock:REGION:ACCOUNT_ID:knowledge-base/KB_ID" \ --statistic Sum \ --period 300 \ --threshold 1 \ --comparison-operator GreaterThanOrEqualToThreshold \ --evaluation-periods 1 \ --treat-missing-data notBreaching