凌晨两点,电商平台的订单表突然多了 20% 的空值,如果没人发现,第二天的销量报表会严重低估,推荐模型的训练样本也会被污染——而这一切在报表数字恢复正常之前都不会被察觉。这就是数据质量失控的代价。想把这种事故挡在门外,你可以把它想象成一座现代化自来水厂的日常:质检员老张每天盯着浊度、pH 值、余氯、细菌总数等水质指标,一旦某项超标就立即分级预警,然后沿管道逐段排查污染源头,修复后再复检并把事故写进报告。数据质量监控告警系统干的就是同一件事:数据管道是“水管网络”,数据是“水”,监控指标是“检测项目”,规则阈值是“安全线”,告警通知是“分级预警”,根因定位是“逐段排查”,修复闭环是“修复与复盘”。读完这篇文章,你将掌握从监控指标设计、规则阈值配置、告警分级通知,到根因定位与修复闭环的完整实战链路。

岗位关联

对 AI 从业者而言,数据质量监控是保障数据资产可信的底线工程。学会这套方法,你能在模型训练和报表产出前拦截脏数据,避免“垃圾进、垃圾出”,为整个数据驱动体系守住大门。

目录
  1. 可视化演示
  2. 监控指标设计
  3. 质量规则配置
  4. 阈值设置策略
  5. 告警分级通知
  6. 根因定位分析
  7. 修复闭环机制
  8. 监控系统落地
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

通过质量指标仪表盘、告警分级路由和修复闭环状态机,直观展示数据质量监控系统的核心机制与工作流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

四大质量维度监控 完整性:字段缺失率与记录缺失率 准确性、时效性、一致性三维并行监测 质量分 = Σ(w_i × score_i) 多维度加权合成总体质量评分

监控指标设计

自来水厂质检员老张每天上班第一件事,就是按检测手册取水样。手册上列着浊度、pH 值、余氯、细菌总数等检测项,每一项都回答“这水是否合格”的一个侧面。数据质量监控的第一步也一样:定义清楚要“检测哪些项目”。业界通常把数据质量拆成四个大项——完整性、准确性、一致性、时效性,它们各司其职,像水质检测一样缺一不可。

完整性回答“数据有没有缺席”,准确性回答“数据有没有记错”,一致性回答“同一件事在不同表里是否自相矛盾”,时效性回答“数据是否来得够快、够新”。就像水质检测绝不只测一个项目,数据监控也要多维度组合,否则容易陷入“报告显示完整、实际字段全是空值”的假象。比如订单表分区缺失,完整性报警;金额字段乱码,准确性报警;日活报表和订单明细对不上,一致性报警;凌晨的数据到中午才送达,时效性报警。

以完整性为例,最直观的量化指标是完整率。假设一张订单表期望有 \(N_{\text{期望}}\) 条记录,通过校验的实际有效记录数是 \(N_{\text{有效}}\),那么完整率就是二者的比值,再换算成百分比:

老张的检测手册项目越全,越能早发现水质隐患;数据团队把完整性、准确性、一致性、时效性都纳入监控,相当于给数据做了一次“全面体检”,而不是“只看体温的初诊”。

完整率=N有效N期望×100%\text{完整率} = \frac{N_{\text{有效}}}{N_{\text{期望}}} \times 100\%
完整率衡量的是“该有的数据到了多少”,它是监控中最基础也最常用的指标。
  1. 期望总数 \(N_{\text{期望}}\)业务规则下应该出现的总记录数,类比“水厂按供水量算出的应到水量”。
    N期望N_{\text{期望}}
  2. 有效记录数 \(N_{\text{有效}}\)实际表中非空、可用的记录数,类比“真正流入水池的有效水量”。
    N有效N_{\text{有效}}
  3. 比值 \(\dfrac{N_{\text{有效}}}{N_{\text{期望}}}\)有效量占期望量的比例,低于 1 说明有缺失。
    N有效N期望\frac{N_{\text{有效}}}{N_{\text{期望}}}
  4. \(\times 100\%\)把小数比值换算成更直观的百分数,方便设定 98%、99.9% 这类可读阈值。
    ×100%\times 100\%

质量规则配置

检测手册不仅写“测什么”,还写“怎么判”。比如浊度必须低于 1 NTU、余氯必须在 0.3~2 mg/L,这些判定线落在纸面上,就成了一套可执行的质检标准。数据质量规则做的事情完全一致:把“完整率大于等于 98%”这类判断固化成机器可执行的条件,让监控系统自动评判数据是否合格。

规则配置在实践中涉及四个要点:规则引擎机制负责统一执行“条件判断”;规则模板复用让同类规则一键复制,避免每个表都从零写一遍;规则调度周期决定监控的频率,小时级任务每小时跑一次规则,天级任务每天跑一次;规则生命周期则管理规则的创建、测试、上线和下线,防止僵尸规则长期占用资源。

一条规则本质上是一个条件表达式。用指示灯函数 \(\mathbb{1}(\cdot)\) 表示“条件是否成立”非常方便:当完整率低于 98% 时指示灯亮起,值为 1,触发告警动作:

就像检测标准要经过专家评审才能写进水厂手册,数据质量规则也要先评审、再测试、后上线,避免拍脑袋写出的规则误伤正常数据。

1(完整率<98%)→Alert\mathbb{1}(\text{完整率} < 98\%) \rightarrow \text{Alert}
规则的执行机制很像灵敏的烟雾报警器:条件触发、信号输出、联动响应三步走。
  1. 条件 \(\text{完整率} < 98\%\)规则判定的核心门槛,类比自己定的“健康警戒线”。
    完整率<98%\text{完整率} < 98\%
  2. 指示灯函数 \(\mathbb{1}(\cdot)\)一种数学记号,括号内条件成立时取值为 1,不成立时取值为 0。
    1(⋅)\mathbb{1}(\cdot)
  3. 触发箭号 \(\rightarrow \text{Alert}\)条件为真后的动作,即进入告警流程。
    →Alert\rightarrow \text{Alert}

阈值设置策略

国标里的浊度限值不是凭空定的,而是监管部门基于大量水质数据反复推演的结果。数据质量阈值也一样:定得太严,系统天天误报,值班同事很快麻木;定得太松,真出问题时告警又迟迟不来。阈值是一条需要精心校准的“安全红线”。

阈值分为静态与动态两类。静态阈值如“完整率必须大于等于 98%”,简单直观,适合业务量平稳、波动不大的指标;动态阈值则适合有明显周期波动的场景,比如电商大促期间订单量暴涨,用固定阈值会导致误报。动态阈值的思想是:跟着历史数据分布的“体温”走,数据正常波动时它自动放行,真正越界时它果断报警。

动态阈值最常用的算法是基于均值和标准差设定上下界。假设历史指标均值为 \(\mu\),标准差为 \(\sigma\),则阈值上限为:

阈值策略本质上是“安全红线的智慧”:静态阈值守护稳定的日常,动态阈值适配上蹿下跳的业务周期,两者配合才能既少打扰、又不漏报。

Tupper=μ+kσT_{\text{upper}} = \mu + k\sigma
动态阈值像一位熟悉业务节奏的老员工:平常的小波动它不在乎,但数据异常偏离到“离谱”的程度时才拉响警报。
  1. 历史均值 \(\mu\)过去一段时间指标的算术平均,代表“正常水平应该是多少”。
    μ\mu
  2. 标准差 \(\sigma\)衡量指标围绕均值波动的离散程度,\(\sigma\) 越大代表变化越剧烈。
    σ\sigma
  3. 灵敏度系数 \(k\)控制红线离均值多远,通常取 2~3;\(k\) 越大越不敏感,越小越容易告警。
    kk
  4. 阈值上限 \(T_{\text{upper}}\)动态计算出的告警触发线,实际值超过它就触发规则。
    Tupper=μ+kσT_{\text{upper}} = \mu + k\sigma

告警分级通知

水质预警分蓝、黄、橙、红四色,不同颜色意味着不同的响应级别和处置力度。数据告警同样需要分级,否则一个影响极小的 P3 问题也会让专人半夜爬起来处理,时间长了必然造成“狼来了”的疲惫感。

分级之后要配套差异化的通知渠道:P0 级影响核心链路,用短信 + 语音电话强打扰;P1 级影响主要报表,走 IM 群 + 邮件;P2 级影响局部数据,发邮件 + 记工单;P3 级仅记录不打扰,供后续复盘。同时还要设计告警收敛机制,把重复告警合并、抖动告警去抖,避免“告警风暴”刷屏;再加一道未响应升级:P1 告警 30 分钟没人认领会自动升级到 P0,确保问题不被漏掉。

分级怎么定更科学?可以给每类问题打个综合分:严重程度乘影响面。设严重程度为 \(S_{\text{severity}}\)(0~10 分),影响的下游任务数为 \(I_{\text{impact}}\),则告警优先级评分:

好的告警系统是“哨兵”而不是“喇叭”:它用最合适的分贝,在正确的时机喊醒正确的人,而不是见谁都吼一嗓子。

Palert=Sseverity×IimpactP_{\text{alert}} = S_{\text{severity}} \times I_{\text{impact}}
把“这事多严重”和“波及多少人”乘起来,告警级别就不再靠拍脑袋,而是有据可查。
  1. 严重程度 \(S_{\text{severity}}\)数据被污染后的业务伤害度,比如报表错乱定 8 分、日志少一行定 2 分。
    SseverityS_{\text{severity}}
  2. 影响面 \(I_{\text{impact}}\)被波及的下游任务或报表数量,数量越多影响越大。
    IimpactI_{\text{impact}}
  3. 相乘 \(S_{\text{severity}} \times I_{\text{impact}}\)两个维度乘积作为综合优先级,乘积越高级别越高。
    Sseverity×IimpactS_{\text{severity}} \times I_{\text{impact}}

根因定位分析

发现浊度超标后,老张不会直接冲洗末端蓄水池了事,而是会沿输水管逐段取样:先查水库源头,再看中途管道,最后查配水站,最终锁定污染到底出在哪一环。数据血缘追踪就是数据世界的“逐段取样”。当监控告警亮起,只说明“下游数据坏了”,真正要回答的是“哪张上游表把它带坏了”。

根因定位通常三招并用:第一招是血缘追踪,从异常表出发沿调度依赖往上游逐级检查,定位最先变脏的表;第二招是日志关联分析,把任务运行日志、报错信息和数据特征关联起来,找出“哪个环节开始出现异常值”;第三招是影响面评估,量化当前脏数据波及了多少下游任务和报表,为修复优先级提供依据。

影响面评估可以这样计算:假设直接下游任务有 \(m\) 个,第 \(i\) 个任务消费了 \(n_i\) 条被污染记录,则受影响记录总数:

只有找到“哪根水管破了”,才能避免每次都在末端反复刮水垢。血缘追踪 + 日志关联 + 影响面评估,这三板斧让根因定位从“猜谜”变成“查案”。

Naffected=∑i=1mniN_{\text{affected}} = \sum_{i=1}^{m} n_i
影响面评估回答的是“这颗老鼠屎坏了一锅多大的汤”,数字越大,处理级别越高。
  1. 第 \(i\) 个任务消费量 \(n_i\)每个下游任务读取的脏记录数。
    nin_i
  2. 下游任务数 \(m\)直接消费该表数据的任务总量。
    mm
  3. 累加符号 \(\displaystyle\sum_{i=1}^{m}\)把从第 1 个到第 \(m\) 个任务的影响全部加起来。
    ∑i=1m\sum_{i=1}^{m}

修复闭环机制

水厂发现污染后绝不会只发个预警就完事,还要走完关闸、冲洗、复检、写事故报告这整套流程。数据质量修复闭环同样讲究“有始有终”:从问题工单流转,到脏数据修复、补数重跑,最后复盘沉淀,环环相扣。

问题工单流转负责“有人认领”,每个告警自动生成工单并指派给表 Owner;脏数据修复针对源头表和中间表做订正,把错误值改对;补数重跑作业负责把“损失追回来”,修复后重新调度下游任务,让报表和模型用到干净数据;复盘沉淀则把事故经过、根因、处置动作沉淀为文档,避免同类问题再次发生。

衡量修复效率,业界常用可用性指标。设平均故障间隔时间为 \(\text{MTBF}\),平均修复时间为 \(\text{MTTR}\),则数据可用性:

闭环的意义在于:告警不是终点而是起点。只有完成“工单 → 修复 → 补数 → 复盘”这一整圈,数据资产才真正从“有人看”升级为“有人管”。

A=MTBFMTBF+MTTRA = \frac{\text{MTBF}}{\text{MTBF} + \text{MTTR}}
这个公式揭示了“少出故障”和“快修故障”同样重要,两者一起决定数据服务的可靠程度。
  1. 平均故障间隔 \(\text{MTBF}\)两次故障之间平均能正常运行多久,越长说明系统越稳定。
    MTBF\text{MTBF}
  2. 平均修复时间 \(\text{MTTR}\)从发现故障到修复完成平均耗费多久,越短说明应急处置越快。
    MTTR\text{MTTR}
  3. 比值 \(\dfrac{\text{MTBF}}{\text{MTBF} + \text{MTTR}}\)正常运行时间占整个周期的比例,越接近 1,数据越可靠。
    MTBFMTBF+MTTR\frac{\text{MTBF}}{\text{MTBF} + \text{MTTR}}

监控系统落地

老张刚上班那会儿,水厂靠人工每天取十个水样送实验室,后来建了自动化水质监测站,24 小时连续采样、实时回传。数据团队最终也要把监控从“人肉盯报表”升级为“系统自动站岗”,这就是监控系统的落地。

落地要过四道关:第一是工具选型,开源方案可选 Great Expectations、dbt test、Airflow 监控插件,商业化方案有 Soda Data;第二是“监控即代码”理念,把质量规则写进代码仓库,走 Code Review 和版本发布,让每次规则变更都有迹可循;第三是监控面板可视化,把各种指标、规则、告警状态集中展示成一个“总控台”;第四是组织制度保障,明确每个表的 Owner 和告警响应责任人,避免“人人有责、人人无责”。

落地效果最终要用覆盖率说话。设全部核心表数量为 \(T_{\text{total}}\),已接入监控的表数量为 \(T_{\text{monitored}}\),则监控覆盖率:

当监控成为数据基础设施的一部分,数据质量就从“靠质检员抽查”升级为“24 小时自动站岗”。老张可以安心喝茶,因为管道里的每一滴水都在被时刻守护。

Ccoverage=TmonitoredTtotalC_{\text{coverage}} = \frac{T_{\text{monitored}}}{T_{\text{total}}}
覆盖率告诉我们“有多少关键资产被保护起来了”,它是监控体系建设程度的晴雨表。
  1. 全部核心表 \(T_{\text{total}}\)纳入治理范围的有价值数据表总数。
    TtotalT_{\text{total}}
  2. 已监控表数 \(T_{\text{monitored}}\)至少配置了一条质量规则的表数量。
    TmonitoredT_{\text{monitored}}
  3. 覆盖率 \(C_{\text{coverage}}\)已监控表占全部核心表的比例,越高说明监控体系越完善。
    TmonitoredTtotal\frac{T_{\text{monitored}}}{T_{\text{total}}}

AI 应用场景

数据仓库 ETL 质量监控

阶段:数据采集与加工

解决的问题:传统 ETL 靠人工在跑批后检查数据,“跑完发现报错”往往已经晚了几个小时。AI 赋能的监控系统在每次调度后自动执行完整性、准确性和时效性规则,第一时间定位脏数据,避免下游报表和模型被污染。

具体案例:某电商数据团队在 Hive 数仓上部署监控规则,每天凌晨 T+1 调度结束后自动检查订单明细表行数、金额汇总和分区时间戳。某日订单表行数比基线骤降 18%,系统在 10 秒内发出 P1 告警,值班同学通过血缘追踪定位到上游采集任务漏跑,立即重跑补数,早报数据未受影响。

实时数据管道监控

阶段:实时特征计算与在线服务

解决的问题:Kafka + Flink 实时管道中,字段格式变化、流量突降等问题肉眼难以捕捉,等到用户反馈异常时损失已不可控。实时监控通过窗口统计和动态阈值,在分钟内发现指标越界并自动告警。

具体案例:某推荐团队为实时特征管道配置了动态阈值监控,对用户点击流事件数按 5 分钟窗口计算均值与标准差。大促期间流量自然上涨时阈值自动跟随上移,而当某台 Flink 节点宕机导致事件数骤降 60% 时,系统立刻触发 P0 语音告警,平台运维在 4 分钟内完成节点切换。

特征平台数据质量监控

阶段:特征工程与模型训练

解决的问题:模型训练依赖的特征数据一旦被污染,轻则指标震荡,重则上线后效果暴跌。特征平台需要把质量监控嵌入特征产线,在特征写入时校验取值范围、缺失率和新鲜度,从源头拦住“毒特征”。

具体案例:某金融风控团队在特征平台上为“用户近 30 天借款次数”特征配置了范围规则和时效规则。某天上游变更了字段含义,导致该特征出现极大异常值,监控规则以 99% 置信区间判定越界,自动阻断该特征进入训练集并通知算法工程师。工程师回滚上游变更后特征恢复,模型训练未受影响。

Python 演示

python73 行
import loggingfrom datetime import datetime import pandas as pd logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")  class DataQualityMonitor:    """数据质量监控器:检查行数,完整性,时效性与唯一性"""     def __init__(self, expected_rows, required_cols, max_lag_seconds):        self.expected_rows = expected_rows        self.required_cols = list(required_cols)        self.max_lag_seconds = max_lag_seconds        self.alert_count = 0     def check_row_count(self, df):        if len(df) < self.expected_rows:            self.raise_alert("行数不足", "期望 %d 行,实际 %d 行" % (self.expected_rows, len(df)))        return len(df) >= self.expected_rows     def check_completeness(self, df):        null_ratio = df.isnull().mean()        bad_cols = null_ratio[null_ratio > 0.02].index.tolist()        if bad_cols:            self.raise_alert("完整性不足", "列 %s 空值率超 2%%" % bad_cols)        return len(bad_cols) == 0     def check_freshness(self, ts_series):        newest = pd.to_datetime(ts_series).max()        lag = (datetime.now() - newest.to_pydatetime()).total_seconds()        if lag > self.max_lag_seconds:            self.raise_alert("时效性不足", "最新数据滞后 %.0f 秒" % lag)        return lag <= self.max_lag_seconds     def check_duplicates(self, df, key_col):        dup_count = int(df.duplicated(subset=[key_col]).sum())        if dup_count > 0:            self.raise_alert("唯一性不足", "发现 %d 条重复记录" % dup_count)        return dup_count == 0     def raise_alert(self, rule, message):        self.alert_count += 1        logging.warning("[质量告警] %s:%s", rule, message)     def run_checks(self, df, ts_col, key_col):        self.alert_count = 0        self.check_row_count(df)        self.check_completeness(df)        self.check_freshness(df[ts_col])        self.check_duplicates(df, key_col)        if self.alert_count == 0:            logging.info("所有质量检查通过")  if __name__ == "__main__":    mock_df = pd.DataFrame({        "order_id": [1, 2, 3, 3],        "amount": [100, 200, None, 400],        "created_at": [            "2024-01-01 10:00:00",            "2024-01-01 10:01:00",            "2024-01-01 10:05:00",            "2023-12-01 08:00:00",        ],    })    monitor = DataQualityMonitor(        expected_rows=100,        required_cols=["order_id", "amount", "created_at"],        max_lag_seconds=3600,    )    monitor.run_checks(mock_df, ts_col="created_at", key_col="order_id")
目的:实现一个轻量数据质量监控器,模拟对数据表执行行数、完整性、时效性和唯一性四类检查,任何一项不达标都会打印告警日志。
  1. bad_cols = null_ratio[null_ratio > 0.02].index.tolist()找出空值率超过 2% 的列,作为完整性告警依据。
  2. lag = (datetime.now() - newest.to_pydatetime()).total_seconds()计算最新数据距今的滞后秒数,衡量时效性。
  3. dup_count = int(df.duplicated(subset=[key_col]).sum())统计主键重复的记录数,触发唯一性告警。
  4. logging.warning("[质量告警] %s:%s", rule, message)所有告警统一出口,实际生产可替换为钉钉/短信/电话通知。
  5. if self.alert_count == 0:只有当所有检查零告警时,才输出“所有质量检查通过”。

常见误区

误区我以为监控的价值在于“一个都不能漏”,所以规则能多配就多配,阈值能严就尽量严,告警越频繁越能体现监控系统在干活。结果值班群每天刷几百条告警,真正重要的问题反而被淹没。

正解告警是信号不是噪音。告警泛滥会导致“告警疲劳”,值班同学对警报逐渐麻木,真正 P0 级的问题反而没人响应。合格的监控系统要做告警收敛:合并重复告警、过滤抖动、分级降噪,让每条告警都值得被认真对待。就像水厂预警系统不会因为水压正常波动就响铃,只有真正越线才拉警报。

为何常见:新手容易把“监控数量”当成“监控质量”,忽略了监控的终极目标是准确、及时、可行动。

误区我担心脏数据漏网,于是把完整率阈值设成 99.99%、时效阈值设成 30 秒,想着越严格越稳妥。结果系统一天到晚在报警,每次都查不出真问题,团队都开始怀疑监控系统的价值。

正解阈值过严会产生大量误报,误报过多会直接导致告警被无视,形成“狼来了”效应。阈值设置要和业务实际分布对齐:稳定指标用静态阈值,波动指标用动态阈值(如均值 ± 3 倍标准差)。合理的阈值应该让系统在真正异常时报警,在正常波动时保持安静,这需要持续用历史数据校准。

为何常见:把“严格”误当成“安全”,却忘了监控系统的信噪比远比绝对数量更重要。

误区我一直觉得监控系统发出告警、有人确认了问题,这件事就算结束了。但下游报表依然用着旧数据,直到下一次调度才发现问题还在。

正解告警只是闭环的起点。真正的修复闭环必须走完“工单 → 修复 → 补数 → 复盘”四步:有人认领问题,源头数据被修正,下游任务重新跑数,最后沉淀经验防止复发。缺少任何一步,数据质量都没有真正恢复,问题会反复出现。

为何常见:初学监控的人容易把“发现”和“解决”划等号,低估了数据修复与重跑在真实生产中的工作量。

误区我想着出问题要让所有人都知道,于是把告警机器人拉进了十几个群,相关不相关的人都 @ 一遍,以免“没人负责”。

正解告警的本质是“在正确时机触达正确的责任人”。广撒网通知会让大部分人产生“与我无关”的心理,反而降低响应效率。正确的做法是分级触达:P0 电话给值班人,P1 通知表 Owner 和接口人,P2 走邮件工单,P3 归档即可。每类告警对应明确的责任人,才算真正可执行。

为何常见:把“通知范围”误当成“重视程度”,忽略了告警的目的是驱动行动而非制造恐慌。

误区我以为只要监控指标都正常,数据质量就是好的。于是只配置了行数、空值率这类统计指标,直到业务方投诉才发现某些列的取值语义完全变了。

正解统计指标只能捕捉“量的异常”,无法捕捉“质的错误”。比如字段含义被上游误改、单位从元变成万元、编码从 UTF-8 变成 GBK,这些都不会影响行数和空值率,却会严重污染下游。所以要把统计监控和内容校验结合:取值范围规则、枚举值白名单、正则格式校验,缺一不可。

为何常见:指标的易得性让新手产生“指标=质量”的错觉,实际上质量是多维的,必须多手段交叉验证。

面试题

Q1. 数据完整性指标主要衡量的是?

单选题 · easy

  • A.数据没有缺失和空值← 正确答案
  • B.数据内容准确无误
  • C.数据之间不产生冲突
  • D.数据送达时不过期

答案:A。完整性回答“数据有没有缺席”的问题,缺少记录或字段为空都属于完整性受损。B 对应准确性,C 对应一致性,D 对应时效性。

Q2. 动态阈值通常基于历史数据的哪些统计量?

单选题 · easy

  • A.均值和标准差← 正确答案
  • B.最大值和最小值
  • C.中位数和众数
  • D.总数和缺失数

答案:A。动态阈值最常用的公式是均值 ± k 倍标准差,利用历史均值刻画中心、标准差刻画波动。最大值最小值受极端值影响大,中位数众数不直接用于构造阈值。

Q3. 关于静态阈值与动态阈值的比较,下列说法正确的是?

单选题 · mid

  • A.静态阈值适合波动大的指标
  • B.动态阈值适合稳定的指标
  • C.动态阈值能随业务周期自适应← 正确答案
  • D.静态阈值完全无需人工维护

答案:C。动态阈值基于历史窗口自动更新,能跟随大促、季节等业务周期。静态阈值适合稳定指标,动态阈值适合波动指标,静态阈值也需要定期人工复核调优。

Q4. 关于告警分级通知,下列说法正确的是?

单选题 · hard

  • A.P0 级只需邮件通知即可
  • B.P3 级无需做任何记录
  • C.P1 级通常走 IM 和邮件← 正确答案
  • D.所有级别都应电话通知

答案:C。P0 级影响核心链路需要短信加语音电话;P3 级只需记录归档不打扰;P1 级走 IM 群加邮件,适合快速响应又不至于过度打扰。A、B、D 都与分级设计的初衷相悖。

Q5. 数据血缘追踪的主要用途是?

单选题 · mid

  • A.加速查询性能
  • B.减少存储成本
  • C.定位质量问题源头← 正确答案
  • D.美化监控报表

答案:C。血缘追踪沿数据流向逐级向上游排查,回答“脏数据从哪张表来”。它不直接提升查询性能或降低存储成本,核心价值在根因定位和影响面评估。

Q6. 修复闭环机制包含哪些环节?

多选题 · mid

  • A.创建问题工单← 正确答案
  • B.修复脏数据← 正确答案
  • C.补数并重跑← 正确答案
  • D.调整集群内存

答案:ABC。修复闭环的标准链路为工单流转、脏数据修复、补数重跑、复盘沉淀。调整集群内存属于运维调优,与数据质量修复闭环无直接关系。

Q7. 监控覆盖率公式中的分子是?

单选题 · easy

  • A.已接入监控的表数← 正确答案
  • B.全部数据总表数
  • C.数据分区总个数
  • D.调度任务总个数

答案:A。监控覆盖率的定义是已接入监控的核心表数除以全部核心表数,分子是“已接入监控的表数”,它反映监控体系对核心资产的保护程度。

Q8. 告警收敛的主要目的是?

单选题 · hard

  • A.减少告警数量← 正确答案
  • B.提升服务器性能
  • C.简化数据模型
  • D.减少开发工作量

答案:A。告警收敛通过合并重复告警、去除抖动、按规则聚合同一类问题来降低告警噪声,避免值班团队被海量重复告警淹没。它不直接作用于服务器性能或数据模型。

Q9. 下列属于根因定位常用方法的有?

多选题 · hard

  • A.数据血缘追踪← 正确答案
  • B.日志关联分析← 正确答案
  • C.影响面评估← 正确答案
  • D.告警邮件美化

答案:ABC。血缘追踪沿依赖溯源,日志关联分析定位任务异常点,影响面评估量化波及范围,三者是根因定位的常用手段。美化邮件属于通知体验优化,与根因定位无关。

Q10. 监控即代码(Monitoring as Code)的核心思想是?

单选题 · mid

  • A.规则代码化且纳入版本控制← 正确答案
  • B.用代码替代所有人工运维
  • C.把监控写入数据库存储
  • D.研发强制统一用一种语言

答案:A。监控即代码强调把质量规则当作普通代码管理,纳入 Git 仓库、走评审、可审计、可复用。B 说法过于绝对;C 把监控和存储混为一谈;D 与核心理念无关。