消费监控告警

本文为您介绍如何对按量计费的计算任务设置消费监控告警,并在超过阈值时通过电话、短信、邮件或钉钉等方式为您发送告警。

功能介绍

MaxCompute按量计费资源为弹性伸缩资源,按需求为计算任务提供资源,对资源使用无限制。因此,您需要监控计算任务的消费情况,以免超出预期。MaxCompute提供如下消费监控告警方式:

  • 单SQL消费限制:MaxCompute支持在执行SQL语句前预估SQL语句的消费(包括使用后付费和包年包月计算资源的SQL)。当预估消费超出设定的阈值时,SQL语句执行受限,系统返回失败状态并给出失败信息。您可以通过此功能预防单个SQL语句产生高额费用。

  • 实时累计消费监控告警:您可以通过云监控平台进行配置,针对未出账的标准SQL和MapReduce、Spark、Mars计算任务进行实时消费监控及告警。系统以项目(Project)为单位,按量统计日或月的累计消费,详细计费方式请参见计算费用(按量付费)。当累计消费超出设定的阈值时,系统会通过电话、短信、邮件或钉钉等方式通知您。

    说明

    实时消费是指单纯的计量消费,未出账,不含任何优惠及折扣。

  • 日累计SQL消费限制:监控Project中标准SQL的日累计消费。如果当日Project中标准SQL已产生的累计消费与新发起的标准SQL预估消费总和超过设定的阈值,新发起的标准SQL执行受限,系统返回失败状态并给出失败信息。您可以通过此功能阻止标准SQL日累计消费超出预期。

    说明

    日累计SQL消费是指单纯的计量消费,未出账,不含任何优惠及折扣。

  • 历史高额消费预警:阿里云费用与成本统一提供的日账单金额超预期告警功能,针对已经出账的账单金额进行监控及告警。MaxCompute按量计费的账单为天账单,即当天消费第二天出账,该方式只能监控历史消费金额。如果当天的账单金额超出设定的阈值,每天短信提醒一次。

单SQL消费限制

单SQL消费限制支持如下两种设置方式:

  • Project级别设置。

    需要由Project Owner或者拥有Super_Administrator角色的用户执行如下命令开启或撤销单SQL消费限制,设置后,该Project发起的可预估的SQL作业都会受到影响。

    --开启单SQL消费限制。
    setproject odps.sql.metering.value.max=<m_value>;
    
    --撤销单SQL消费限制。
    setproject odps.sql.metering.value.max;
  • Session级别设置。

    将如下命令和SQL语句一起提交执行即可开启单SQL消费限制,SQL语句前不添加该命令则表示撤销单SQL消费限制。只对本次执行有效。

    set odps.sql.metering.value.max=<m_value>;

m_value指单SQL消费的最高阈值,是SQL读取量(GB)×SQL复杂度的值,并非消费金额。

说明

Project的单SQL消费受m_value限制。如果某个SQL的预估消费超过m_value,该SQL执行受限。有些SQL目前无法预估(如执行外部表的SQL),则此功能无法对这类SQL生效。

在实际操作中,建议您:

  • 根据项目中历史SQL消费以及您的预期消费设定Project级别的m_value

    您可以下载每天的详细计量信息,以Project为粒度,计算SQL任务(数据分类为ComputationSql的任务)的计算消耗量(即SQL读取量(GB)×SQL复杂度),并根据每日正常消耗的最高值,结合业务波动确定一个合适的值。

    您还可以将计算消耗换算成费用(即SQL读取量(GB)×SQL复杂度×0.3),再结合业务情况,确定一个合适的金额后换算成消耗量m_value值=确定的金额(单位:元)/0.3

  • 先设置Project级别的消费限制,然后针对某些特殊的SQL单独设置Session级别的m_value限制。

    说明
    • 设置Session级别的消费限制前,请您务必确认相应的SQL确实需要Session级别的限制,避免滥用该功能。

    • 如果同时设置Project级别和Session级别的消费限制,则Session级别优先级高于Project级别。例如,Project级别设置m_value为100,而Project中某个SQL设置了Session级别的m_value为200,则该SQL执行前预估消费超过100不受限,超过200会受限。其他没有单独设置Session级别限制的SQL语句,会遵从Project级别的限制,预估消费超过100就会受限。

  • 无论是设置Project级别还是Session级别的消费限制,都会影响任务的执行,建议您结合任务失败告警功能(例如DataWorks的智能监控)使用,及时感知任务失败并进行人工干预处理,以免关键任务被限制后影响业务。

只对单SQL消费限制不能完全预防意料之外的高额账单,您可能还需要同时使用实时累计消费监控告警,实时监控Project中SQL和MapReduce任务的累计消费金额。

实时累计消费监控告警

项目(Project)为单位,累计统计每个执行成功的SQL/MR/Spark/Mars作业消费金额(通过计量数据按收费公式统计的目录价),支持按日或月的累计数据并推送到云监控,通过云监控实现实时累计消费监控告警。配置操作步骤如下:

  1. 登录云监控控制台

  2. 新建报警联系人,若已经创建过则可以忽略此步骤。详细步骤请参考创建报警联系人或报警联系人组

  3. 配置报警规则,详细步骤可参考创建报警规则。配置MaxCompute实时累计消费监控告警规则时,需要注意的配置项说明如下:

    区域

    参数

    说明

    关联资源

    产品

    选择MaxCompute-按量付费

    资源范围

    报警规则的作用范围。

    • 全部资源:即所有项目(Project)满足报警规则描述时,都会发送报警通知。

    • 应用分组:报警规则作用于指定云产品的指定应用分组内的全部资源,对于新加入的资源生效。

    • 实例(推荐):可以按需选择关联需要监控的项目,比如只需要监控计算资源使用按量付费资源的项目。

    关联资源

    当资源范围选择实例,则在此处选择对应的项目。

    规则描述

    监控指标

    • 按量付费作业的日消费(CNY),即以项目( Project)为单位按日累计。

    • 按量付费作业的月消费(CNY),即以项目( Project)为单位按月累计。

    重要

    USD单位的指标在本站点无效。

    阈值

    单位为CNY,金额为计量数据按收费公式统计的目录价。

日累计SQL消费限制

Project日累计SQL消费限制通过如下命令进行设置。仅Project Owner或者拥有Super_Administrator角色的用户可以执行该命令。

setproject odps.costcontrol.rule={"byDate":{"sql":Limit}};
  • byDate:日累计。以东八区时间为准,计算当日00:00:00~23:59:59期间的累计消费,第二天重新累计消费。

  • Limit:Project标准SQL的日累计消费阈值,单位:元。此处统计的消费不含任何优惠和折扣。

    说明

    单SQL消费=扫描数据量(GB)×复杂度×0.3

通过如上命令设置后:

  • 如果是首次设置,则系统会累计Project中标准SQL的当日所有SQL消费,并预估新发起的标准SQL消费。如果是修改设置的值,则累计的消费量不会重新累计,同时新发起的标准SQL消费预估会通过已经累计的值和最新设置的值进行校验是否限制。系统会开始累计Project中标准SQL的当日消费,并预估新发起的标准SQL消费。

  • 累计消费和预估消费总和大于Limit,则新发起的标准SQL将被拦截不能执行。例如执行setproject odps.costcontrol.rule={"byDate":{"sql":100}};命令设置消费限制,当Project中的标准SQL日累计消费超出限制时,任务执行会报错,报错信息如下。

    Exceed Cost Limit : 
    {"AlreadyCost":"100.1","InstanceId":"xxx","Limit":"100","Project":"xxx","TaskType":"SQL","ThisTaskWillCost":"0","TimeWindow":"BYDATE"}
    说明

    建议您结合任务失败告警功能(例如DataWorks的智能监控)使用,及时感知任务失败并进行人工干预处理,以免关键任务被限制后影响业务。

历史高额消费预警

对已经出账的账单消费进行告警,监控真实的账单。具体配置如下:

  1. 登录阿里云费用与成本

  2. 单击左侧导航栏的成本监控 > 成本预警

  3. 成本预警页面单击高额消费预警后的详情image

  4. 高额消费预警页面,选择预警产品并填写预警阈值,单击增加image