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 知识体系总览
下面这张图,是我对数据治理与标准化整个知识体系的总结。你可以把它当成一张地图,随时回来看看。
数据治理这事儿,急不得。我建议你从最脏的数据开始,先做清洗,再做标准化,然后打标签,最后定生命周期。一步一步来,稳扎稳打。
记住一句话:数据治理不是成本,是投资。前期投入越多,后期平台越稳。