4、数据治理与标准化:数据清洗、字段标准化、标签体系设计、数据生命周期管理

数据治理这事儿,说白了就是给运维数据「立规矩」。我见过太多团队,一上来就搞AI运维、搞智能告警,结果数据乱七八糟,模型根本跑不动。你想想看,垃圾数据进,垃圾数据出,再牛的算法也白搭。

这一章,我就把我在多个大型项目中沉淀下来的数据治理套路,掰开了讲给你听。

4.1 数据清洗:别让脏数据毁了你的平台

数据清洗,是我每次做平台的第一步。为什么?因为生产环境的数据,比你想象的脏得多。

我在一个金融客户那里遇到过,他们的监控数据里,CPU使用率居然有-5%的记录。嗯,你没看错,负值。这种数据不处理,告警阈值怎么设?趋势预测怎么做?

核心原则:清洗不是删除,而是标记和修复。保留原始数据,清洗后的数据另存一份。

我常用的清洗策略,分这么几层:

  • 格式校验:时间戳是不是标准格式?IP地址合不合法?数值是不是在合理范围内?
  • 去重处理:同一个指标,同一时间点,被采集了两次怎么办?保留最新一条,或者取平均值。
  • 异常值过滤:3σ原则、IQR箱线图,这些统计方法用起来。我习惯先画个分布图看看。
  • 缺失值填充:别直接删行。用前向填充、线性插值,或者用同类设备的均值来补。
# 一个简单的清洗脚本示例
def clean_metric_data(df):
    # 1. 过滤负值
    df = df[df['value'] >= 0]
    
    # 2. 时间戳标准化
    df['timestamp'] = pd.to_datetime(df['timestamp'], unit='s')
    
    # 3. 去重:相同设备+指标+时间,保留最后一条
    df = df.drop_duplicates(subset=['device_id', 'metric', 'timestamp'], keep='last')
    
    # 4. 缺失值填充:用前一个有效值
    df = df.sort_values(['device_id', 'metric', 'timestamp'])
    df['value'] = df.groupby(['device_id', 'metric'])['value'].ffill()
    
    return df

我的小技巧:清洗规则一定要可配置。别写死在代码里。用YAML或者JSON管理规则,这样业务变了,改个配置文件就行,不用重新部署。

4.2 字段标准化:统一语言,才能对话

字段标准化,解决的是「同一个东西,不同叫法」的问题。举个例子,A团队叫cpu_usage,B团队叫cpu_util,C团队叫cpu_percent。你说这怎么统一分析?

我建议的做法是,建立一套「内部标准字段字典」。所有数据进来,先做一次字段映射。

标准字段名 含义 数据类型 常见别名
cpu_usage_pct CPU使用率(百分比) float (0-100) cpu_util, cpu_percent, cpu_used
mem_usage_pct 内存使用率(百分比) float (0-100) mem_util, memory_usage
disk_read_bytes 磁盘读取字节数 int64 disk_read, io_read_bytes
net_in_bytes 网络入流量字节数 int64 net_recv, network_in

我曾经在一个项目中,光字段映射就写了200多条规则。但做完之后,所有团队的数据都能在一个看板上展示,那种感觉,真的很爽。

注意:字段标准化不是一锤子买卖。新设备、新指标不断出现,字典要持续维护。我一般每季度review一次,看看有没有遗漏的别名。

4.3 标签体系设计:给数据打上「身份标签」

标签,是数据治理的灵魂。没有标签的数据,就是一堆冰冷的数字。有了标签,你才能做精细化运营、做智能分析。

我设计的标签体系,一般分三类:

  • 基础标签:机房、集群、应用、负责人。这些是固定的,一次打好,基本不变。
  • 业务标签:核心业务、非核心业务、支付链路、登录链路。这些跟业务架构走。
  • 动态标签:高负载、低负载、故障中、维护中。这些是实时计算的,自动打上去。

举个例子,一台服务器,它的标签可能是这样的:

{
  "device_id": "host-1234",
  "tags": {
    "机房": "北京-亦庄",
    "集群": "电商-核心",
    "应用": "订单服务",
    "负责人": "张三",
    "业务等级": "P0",
    "状态": "运行中",
    "负载等级": "高负载"
  }
}

有了这套标签,你就能做很多事了。比如:「找出所有P0业务中,负载等级为高负载的机器,看看是不是需要扩容。」

我的经验:标签不要超过20个。太多反而没人用。我见过一个团队打了50多个标签,最后自己都记不住。精简,再精简。

4.4 数据生命周期管理:数据不是越多越好

很多人觉得,数据存得越多越好。其实不是。存储成本、查询性能、维护复杂度,都是问题。

我一般把数据分成三个生命周期:

  • 热数据(7天内):全量保留,用于实时监控和近期分析。存在SSD或者内存数据库里。
  • 温数据(7天-3个月):降采样保留。比如原始数据是1秒一个点,温数据可以聚合到5分钟一个点。
  • 冷数据(3个月以上):只保留统计摘要。比如每天的最大值、最小值、平均值、P99。存到廉价的对象存储里。

我曾经帮一个客户做过数据生命周期管理,他们原来每天产生10TB的监控数据,存储成本高得吓人。做完之后,热数据只占1TB,冷数据压缩后不到500GB。成本直接降了80%。

# 降采样聚合示例
def downsample(df, interval='5min'):
    return df.resample(interval, on='timestamp').agg({
        'value': ['mean', 'max', 'min', 'std']
    })

避坑指南:我曾经犯过一个错,把冷数据直接删了。结果半年后业务方要回溯一个故障,数据没了。从那以后,我坚持冷数据只归档,不删除。至少保留一年。

4.5 知识体系总览

下面这张图,是我对数据治理与标准化整个知识体系的总结。你可以把它当成一张地图,随时回来看看。

数据治理与标准化 数据清洗 • 格式校验 • 去重处理 • 异常值过滤 • 缺失值填充 字段标准化 • 标准字段字典 • 别名映射规则 • 数据类型统一 • 持续维护机制 标签体系设计 基础标签 | 业务标签 | 动态标签 精简设计,不超过20个 数据生命周期管理 热数据 → 温数据 → 冷数据 降采样 + 归档,不删除

数据治理这事儿,急不得。我建议你从最脏的数据开始,先做清洗,再做标准化,然后打标签,最后定生命周期。一步一步来,稳扎稳打。

记住一句话:数据治理不是成本,是投资。前期投入越多,后期平台越稳。

专注资料整理