云器Lakehouse费用异常告警配置指南
概述
本指南帮助您快速配置费用异常监控系统,实现费用突增时的自动告警,保护您的成本安全。
前置条件
- 拥有instance_admin角色权限,用于查询sys.information_schema.instance_usage视图中费用数据。
- 拥有instance_sre角色权限,用于使用“数据质量”和“监控告警”功能。
- 具备某一工作空间内计算集群的使用权限(用于执行质量规则查询SQL)和某一表或视图的元数据查询(read metadata)权限(用于配置质量规则)。
使用数据
sys.information_schema.instance_usage 视图的字段和内容介绍可见文末附录
配置步骤
步骤1:创建数据质量规则
1. 进入数据质量管理模块
2. 点击创建质量规则

3. 填写基本信息:
!
在本案例中主要关注以下两个选项:
1)校验方式,选择:自定义SQL;
2)根据本文建议的规则,直接将SQL粘贴进文本框中;
3)在“期待结果”中根据所选择的规则,配置对应的预期条件和值。
其他字段配置可详见:数据质量的完整配置文档——数据质量
步骤2:配置监控告警
1. 进入监控告警模块,点击“新建规则”

2. 配置告警规则
在本案例中主要关注以下3个选项:
1)监控事项:选择数据质量监控失败告警,并添加过滤条件,有效过滤掉其他质量规则,避免其他质量规则校验失败的干扰。
2)通知策略:根据实际需要选择所需的通知策略,也可单独新建一条通知策略。通知策略的相关配置可参考文档:监控告警系统。
3)通知人员:选择关注费用的相关人员。可以通过在账户中心新建用户,将想通知到的用户纳入到此列表中。

完成上述两步配置,即完成了从监控到报警的完整操作,可以在质量规则监控到异常时,收到对应渠道的报警信息。
下面具体说明在数据质量规则中,可供选择的监控规则。
监控方案
方案一:固定阈值监控(简单快速)
适用场景:费用相对稳定,有明确预算上限。
监控SQL:
-- 查询昨日总费用
SELECT
ROUND(SUM(COALESCE(total_after_discount, amount * discount_rate)), 2) AS total_amount
FROM sys.information_schema.instance_usage
WHERE CAST(SUBSTR(measurement_start, 1, 10) AS DATE) = current_date() - INTERVAL 1 DAY
告警配置:
- 预期结果 ≤ 50(根据实际调整阈值)
- 超过阈值则触发告警
阈值参考查询:
-- 查询过去90天的费用参考值
WITH day_sum AS (
SELECT
CAST(SUBSTR(measurement_start, 1, 10) AS DATE) AS bill_date,
SUM(COALESCE(total_after_discount, amount * discount_rate)) AS day_amount
FROM sys.information_schema.instance_usage
WHERE CAST(SUBSTR(measurement_start, 1, 10) AS DATE) BETWEEN
date_sub(current_date(), 90) AND current_date() - INTERVAL 1 DAY
GROUP BY 1
)
SELECT
ROUND(MAX(day_amount), 2) AS max_daily, -- 历史最高
ROUND(AVG(day_amount), 2) AS avg_daily, -- 平均值
ROUND(percentile_approx(day_amount, 0.95), 2) AS p95_daily -- 95分位
FROM day_sum
方案二:动态基线监控(关注异常波动)
适用场景:费用有稳定的上升或下降,需要关注费用波动而非绝对值
监控SQL:
-- 昨日费用与历史中位数对比
WITH daily_costs AS (
SELECT
to_date(substr(measurement_start, 1, 10)) AS date,
SUM(COALESCE(total_after_discount, amount * discount_rate)) AS cost
FROM sys.information_schema.instance_usage
GROUP BY 1
),
historical_median AS (
SELECT percentile_approx(cost, 0.5) AS median_cost
FROM daily_costs
WHERE date BETWEEN date_sub(current_date(), 31) AND current_date() - INTERVAL 2 DAY
),
yesterday_cost AS (
SELECT COALESCE(cost, 0) AS cost
FROM daily_costs
WHERE date = current_date() - INTERVAL 1 DAY
)
SELECT
CASE
WHEN h.median_cost IS NULL OR h.median_cost = 0 THEN 9999.0
ELSE ROUND(y.cost / h.median_cost, 2)
END AS cost_ratio
FROM yesterday_cost y
CROSS JOIN historical_median h
告警配置:
- 预期结果 ≤ 1.5(昨日费用不超过历史中位数的1.5倍)
- 可根据业务特点调整倍数:
- 1.5倍:敏感监控
- 2.0倍:常规监控
- 3.0倍:宽松监控
基线阈值辅助分析SQL:
如果不确定预期结果的合理配置,可执行以下SQL,取过去30天tp90、tp95和tp99的值作为参考:
-- 分析历史费用波动,帮助确定合理的告警倍数
WITH daily_costs AS (
SELECT
to_date(substr(measurement_start, 1, 10)) AS date,
SUM(COALESCE(total_after_discount, amount * discount_rate)) AS daily_cost
FROM sys.information_schema.instance_usage
WHERE to_date(substr(measurement_start, 1, 10)) >= date_sub(current_date(), 60)
AND to_date(substr(measurement_start, 1, 10)) < current_date()
GROUP BY 1
),
-- 计算过去30天的整体中位数作为基线
baseline AS (
SELECT percentile_approx(daily_cost, 0.5) AS median_cost
FROM daily_costs
WHERE date >= date_sub(current_date(), 31)
AND date < current_date()
),
-- 计算每日费用与基线的比值
ratio_analysis AS (
SELECT
d.date,
d.daily_cost,
b.median_cost,
CASE
WHEN b.median_cost > 0 THEN ROUND(d.daily_cost / b.median_cost, 2)
ELSE NULL
END AS cost_ratio
FROM daily_costs d
CROSS JOIN baseline b
WHERE d.date >= date_sub(current_date(), 30)
)
SELECT
'历史费用波动分析' AS analysis_type,
COUNT(*) AS total_days,
ROUND(MIN(cost_ratio), 2) AS min_ratio,
ROUND(percentile_approx(cost_ratio, 0.25), 2) AS p25_ratio,
ROUND(percentile_approx(cost_ratio, 0.5), 2) AS p50_ratio,
ROUND(percentile_approx(cost_ratio, 0.75), 2) AS p75_ratio,
ROUND(percentile_approx(cost_ratio, 0.90), 2) AS p90_ratio,
ROUND(percentile_approx(cost_ratio, 0.95), 2) AS p95_ratio,
ROUND(percentile_approx(cost_ratio, 0.99), 2) AS p99_ratio,
ROUND(MAX(cost_ratio), 2) AS max_ratio
FROM ratio_analysis
UNION ALL
-- 基于历史波动计算建议阈值
SELECT
'建议告警阈值' AS analysis_type,
NULL AS total_days,
NULL AS min_ratio,
NULL AS p25_ratio,
NULL AS p50_ratio,
NULL AS p75_ratio,
ROUND(
(SELECT percentile_approx(cost_ratio, 0.90) * 1.2 FROM ratio_analysis),
2
) AS p90_ratio, -- 敏感监控
ROUND(
(SELECT percentile_approx(cost_ratio, 0.95) * 1.1 FROM ratio_analysis),
2
) AS p95_ratio, -- 常规监控
ROUND(
(SELECT percentile_approx(cost_ratio, 0.99) * 1.05 FROM ratio_analysis),
2
) AS p99_ratio, -- 宽松监控
NULL AS max_ratio;
监控效果验证
- 手动测试:配置质量规则后,可进行试跑,以验证质量规则配置和SQL正确性。
- 告警测试:试跑测试时,可触发告警验证通知,以验证通知策略配置完整。
- 历史回溯:查看过去7天费用,确认阈值合理性
通过以上步骤,您可以快速搭建费用异常告警系统,有效控制成本风险。