MaxCompute计费方式有按量计费和包年包月,其中按量计费若使用不当,比较容易出现预料之外的高额消费产生,本文将结合阿里云提供的相关消费监控以及MaxCompute本身的消费监控/限制功能,介绍如何更好的进行MaxCompute按量计费消费监控和限制,更大程度的避免出现不必要的消费。
MaxCompute计费方式
MaxCompute主要对存储、计算和下载操作进行计费,每种资源计费方式如下图:
对于包年包月,只有计算资源,可通过MaxCompute管家进行日常资源/作业负载监控,同时通过云监控对配额组使用占比进行监控以便及时发现资源满负载的情况。而对于按量计费,可根据不同消费异常的场景结合不同的方式进行监控预警或者限制消费。
常见消费突增场景
- SQL费用突增,主要两种情况:
- 突发某个或某几个作业单作业高额消费,一般是SQL扫描量非常大,常见原因:业务分析人员临时查询没有写好分区条件扫描全表或者大量分区;使用UDF表达分区条件但没开启支持分区裁剪的功能使得分区裁剪失效即全表扫描;源头数据量因为各种原因暴涨等。
- SQL作业量突增,如平是日平均SQL量几百,某天突然上涨到几万,场景的原因:通过SDK发起作业,误操作高频发起大量的作业;正常业务如补历史数据、业务上量而产生大量的计算作业属于正常使用。
- 下载费用突增,常见主要是因为Tunnel SDK导出数据时endpoint和Tunnel endpoint配置为公网导致走公网下载。
消费预警和控制方式
针对上述的常见消费突增场景,MaxCompute产品本身针对SQL和下载都分别支持了一些监控预警或消费限制功能,而对于其他的如spark按量计费任务,也会出现消费突增的情况,我们依然可以结合阿里云提供的成本管家、高额消费预警功能进行监控。可以结合业务使用情况,选择相应的方式进行监控。
实时消费监控告警
您可以通过云监控平台进行配置实时消费监控告警,针对未出账的标准SQL和MapReduce计算任务进行实时消费监控及告警。系统以项目(Project)为单位,按量统计日或月的累计消费,当累计消费超出设定的阈值时,系统会通过电话、短信、邮件或钉钉等方式通知您。
这种监控方式非常适合SQL突增,特别是突增大量SQL导致费用上涨的场景,可以及时获知并止损。
-
POC阶段,若使用的是按量计费,由于对MC计算还不是非常熟知的情况下,为了避免POC超预算,建议分别设置日累计实时消费监控和月累计实时消费监控。如设定每日计算消费超过1000元则预警,月累计消费超过50000则预警,通过此监控,一方面若超出消费预期则能及时获知快速进行人工介入排查,另一方面,也能获知测试的业务量对应消费量为多少。
-
业务稳定阶段,建议也对业务比较稳定的项目进行消费监控,以便突发消费情况能今早发现。如projecta的业务已经比较稳定,日平均消费为5000元,若超过6000则可视为异常,那么可配置监控如
单SQL消费限制
MaxCompute支持在执行SQL语句前预估SQL语句的消费。单SQL消费限制功能支持在预估消费超出设定的阈值时,限制SQL语句执行,系统返回失败状态并给出失败信息。您可以通过此功能预防单个SQL语句产生高额费用。
单SQL消费限制支持如下两种设置方式:
- 项目级别设置。Project Owner或者拥有Super_Administrator角色的用户才能执行该命令。
setproject odps.sql.metering.value.max=<m_value>;
- Session级别设置。该命令需要和SQL语句一起执行。只对本次执行有效。
set odps.sql.metering.value.max=<m_value>;
结合单SQL消费突增常见场景,可以预先配置SQL消费限制:
- 业务分析人员取数专用的project,由于这个场景使用人员比较多,对MaxCompute的SQL了解程度也有限,最容易出现“烂SQL”,也是最容易跑出高消费的SQL,因此建议针对此类项目都配置SQL消费限制,如果预估project下每条SQL消费不超过50元,换算成计算消耗量(即SQL读取量(GB)×SQL复杂度)=50/0.3=166.67,则可针对project设置project级别的sql消费限制
setproject odps.sql.metering.value.max=166.67;
- POC阶段,同样由于对业务和消耗量不是非常熟悉,也可以针对project级别设置单SQL消耗量,若真测试都某个计算量超过设定的值,可以针对该计算SQL设置Session级别的value相对更大的限制。如一开始限制每条SQL不能超过10元(value=10/0.3)则project级别设置
setproject odps.sql.metering.value.max=33.33;
,遇到需要30元的SQL则可针对该SQL设置set odps.sql.metering.value.max=100;
。 - 业务稳定阶段,业务相对稳定的生产项目,建议配置实时日累计消费监控后,不大建议设置单SQL消费限制,因为限制是直接限制SQL执行,会可能影响业务产出,当然您若有强需求如坚决不能有消费超过xxx的sql,则也可以配置。
历史高额账单预警
您可以通过阿里云用户中心进行设置 高额消费预警,针对已经出账的账单金额进行监控及告警。MaxCompute按量计费的账单为天账单,即当天消费第二天出账,该方式只能监控历史消费金额。如果当天的账单金额超出设定的阈值,系统会在第二天09:00左右通过短信方式通知您。
此种方式主要主要是事后,账单出账后才能告警,有一定的延迟性,但是因为是针对整个账单,所以MaxCompute产品本身没有支持监控的其他各类计费项,都可以通过此功能进行统一监控,尽可能快的发现异常,更早人工介入避免异常持续发生。
成本管家监控
阿里云日志服务推出的成本管家功能,可一键开通后自动导入账单,并提供可视化的账单分析报表,帮助您提高账单分析的效率。
您可以通过成本管家自动导入MaxCompute账单,并选择邮件或者WebHook-钉钉机器人的方式发送订阅的报告。以此每日快速阅览账单。
自定义监控
如果上述各种方式都不能满足,您可以考虑通过MaxCompute提供的information schema数据,自定义对按量计费项目任务进行监控告警,您可以参考《统计MaxCompute TOPN费用账号及耗时作业》。
更多相关MaxCompute成本优化相关的介绍、实践等可参考如下:
MaxCompute消费预警与控制-视频讲解
MaxCompute成本优化系列