You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Boto3将多指标合并为单个CloudWatch告警及SNS发送违规报告

解决方案

1. 用Boto3创建单个CloudWatch聚合告警

CloudWatch支持基于数学表达式的告警,可以聚合多个同类指标,无需为每列单独创建告警。你可以通过指标搜索表达式匹配所有600列的FeatureBaselineDriftDistance指标,再用聚合函数(如MAX()、ANY())判断是否有任意指标触发阈值,最后用Boto3创建这类告警。

关键思路

利用CloudWatch的SEARCH函数匹配所有符合条件的指标:

SEARCH('AWS/SageMaker,EndpointName=<你的端点名称>,FeatureName FeatureBaselineDriftDistance', 'Average', 300)

再用MAX()函数获取所有指标的最大值,若该值超过预设阈值,则触发告警。

Boto3代码示例

import boto3

cloudwatch = boto3.client('cloudwatch')

response = cloudwatch.put_metric_alarm(
    AlarmName='SageMaker-All-Feature-Drift-Alarm',
    AlarmDescription='告警:任意特征列的基线漂移距离超过阈值',
    ActionsEnabled=True,
    AlarmActions=[
        'arn:aws:sns:<区域>:<账号ID>:<你的SNS主题ARN>'
    ],
    # 使用数学表达式聚合所有指标
    Metrics=[
        {
            'Id': 'e1',
            'Expression': "MAX(SEARCH('AWS/SageMaker,EndpointName=my-endpoint,FeatureName FeatureBaselineDriftDistance', 'Average', 300))",
            'Label': 'Max_Feature_Drift'
        }
    ],
    Threshold=0.5,  # 根据你的需求设置阈值
    ComparisonOperator='GreaterThanThreshold',
    EvaluationPeriods=1,
    Period=300,
    TreatMissingData='notBreaching'
)

注意:如果SEARCH函数的结果包含过多指标,需确认CloudWatch的表达式长度限制,不过通配符匹配的方式通常能覆盖大量指标。

2. 直接通过SNS发送违规报告(无需CloudWatch告警)

如果不想依赖CloudWatch告警,有两种更直接的方式:

方式一:配置SageMaker监控任务自带的SNS通知

在创建SageMaker数据质量监控任务时,直接指定SNS主题,当监控任务检测到漂移(或其他违规情况)时,会自动将包含所有违规列的报告发送到SNS。

方式二:用Lambda定期查询并发送报告

  1. 创建Lambda函数,定期调用CloudWatch的get_metric_data接口,查询所有600列的FeatureBaselineDriftDistance指标。
  2. 筛选出超过阈值的特征列,组装成结构化报告(如JSON或Markdown格式)。
  3. 调用SNS的publish接口,将报告发送到指定主题。

Lambda核心代码示例:

import boto3
import datetime

cloudwatch = boto3.client('cloudwatch')
sns = boto3.client('sns')

def lambda_handler(event, context):
    # 查询最近5分钟的指标数据
    end_time = datetime.datetime.utcnow()
    start_time = end_time - datetime.timedelta(minutes=5)
    
    response = cloudwatch.get_metric_data(
        MetricDataQueries=[
            {
                'Id': 'drift_metrics',
                'MetricStat': {
                    'Metric': {
                        'Namespace': 'AWS/SageMaker',
                        'MetricName': 'FeatureBaselineDriftDistance',
                        'Dimensions': [
                            {'Name': 'EndpointName', 'Value': 'my-endpoint'}
                        ]
                    },
                    'Period': 300,
                    'Stat': 'Average'
                },
                'ReturnData': True
            }
        ],
        StartTime=start_time,
        EndTime=end_time
    )
    
    # 筛选违规指标
    violations = []
    for result in response['MetricDataResults']:
        feature_name = next(d['Value'] for d in result['Dimensions'] if d['Name'] == 'FeatureName')
        latest_value = result['Values'][-1] if result['Values'] else None
        if latest_value and latest_value > 0.5:
            violations.append(f"特征列 {feature_name}: 漂移距离 {latest_value:.2f}")
    
    # 发送报告到SNS
    if violations:
        message = "检测到以下特征列基线漂移:\n" + "\n".join(violations)
        sns.publish(
            TopicArn='arn:aws:sns:<区域>:<账号ID>:<你的SNS主题ARN>',
            Subject='SageMaker数据质量漂移告警',
            Message=message
        )
    
    return {'statusCode': 200, 'body': f"已检测到 {len(violations)} 个违规列"}

内容的提问来源于stack exchange,提问作者SRIRAM SIDHARTHA R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:40:26