第2章:日志基础——分类、结构、常见格式及对存储成本的影响
做日志成本控制,第一步不是去搞压缩、调轮转,而是先把咱们手里的日志“看清楚”。说白了,你连存的是什么、长什么样都不知道,优化的方向大概率是歪的。这一章我就带你把日志的底裤扒干净。
一、先给日志分个类
我习惯把日志分成这么几大类,每类的“烧钱”程度完全不一样。
| 分类 | 典型来源 | 特点 | 成本敏感度 |
|---|---|---|---|
| 系统日志 | OS、内核、systemd | 文本为主,量稳定,行数固定 | 低 |
| 应用日志 | 业务代码、中间件 | 格式多样,量大且随时间波动 | 极高 |
| 安全日志 | WAF、IPS、审计 | 结构清晰,必须完整保留 | 中 |
| 网络日志 | 交换机、负载均衡 | 字段固定,但每秒可能上万条 | 高 |
| 访问日志 | Nginx、API网关 | K/V结构明显,可压缩率很高 | 中高 |
你想想看,应用日志和网络日志经常是成本的大头。我优化过一个电商平台的日志系统,访问日志占了总存储量的60%以上。嗯,这里要注意,并不是所有日志都值得原样存下来。
省钱第一课:分类是你决定“砍谁”的依据。系统日志,保留天数可以短一些;应用日志里的DEBUG级别,线上环境能不能干脆不落盘?这是我常在团队里问的一个问题。
二、解析日志的结构
日志的结构决定了你解析它的开销,以及最终落盘的大小。说穿了就两种:固定长度和可变长度。
1. 固定长度结构
每个字段占的字节是定好的。比如一个时间戳14字节、一个IP 15字节。简单粗暴,解析飞快,但浪费空间。一个很短的数值也得按最大长度撑开。
2. 可变长度结构
现在的主流。字段用分隔符或标签隔开,每个字段实际多长就多长。解析稍微费点CPU,但空间利用率高。
我接手的项目里,有人用纯文本写了非常长的错误堆栈。你知道一条堆栈可能上万个字符吗?而且每行都重复了相同的类名。这种日志结构要是没控制好,存储成本直接起飞。
避坑指南(我曾经):曾经有个服务,日志里每条都打印了完整的HTTP请求体,包括base64的图片数据。一条日志几百KB。他们还没意识到问题,直到我计算了一下:每天1亿条请求,每天产生的日志量超过10TB,仅仅是因为日志结构里塞了不该塞的东西。
三、聊聊常见格式:JSON、纯文本、还有别的
格式这东西,直接影响你的存储效率和查询速度。我个人在制定日志规范时很少允许团队用纯文本,除非是临时调试。
JSON格式
可读性强,易于解析和嵌套。缺点也很明显:开销大。
{
"time": "2024-03-15 10:00:00",
"level": "ERROR",
"service": "user-svc",
"message": "数据库连接超时",
"request_id": "abc-123",
"duration_ms": 30012
}
这个例子,有效数据大概60个字符,但加上JSON的key、引号、冒号、花括号,实际存储量增加了近一倍。你想想看,每天存几亿条,多出来的全是钱。
文本格式(非结构化)
长得像这样:
2024-03-15 10:00:00 ERROR [user-svc] 数据库连接超时 | req_id=abc-123 | dur=30012ms
没有冗余的key,体积比JSON小了三分之一左右。但是解析起来费劲,按字段搜索得靠正则或分词,CPU开销又上去了。
其他格式(如Apache格式、Protobuf、Avro)
这些一般用于内部传输或特殊中间件。Protobuf二进制格式确实小,但调试时你基本没法直接看。要不要用,得看你们的运维工具链跟不跟得上。
从成本角度看,JSON存储成本高但查询成本低;纯文本存储成本低但查询成本高。怎么选?说白了,看你们哪项成本更敏感。
四、理解格式对存储成本的实际影响
我拿真实的业务场景给你算一笔账。假设有100GB原始日志数据:
| 格式 | 原始体积 | 压缩后体积(gzip) | 索引后体积(ES) | 月成本估算(按冷存储) |
|---|---|---|---|---|
| 纯文本 | 100 GB | 15 GB | — | ¥150 |
| JSON紧凑 | 130 GB | 20 GB | 60 GB | ¥300 |
| JSON标准 | 160 GB | 25 GB | 80 GB | ¥500 |
我建议,线上服务日志统一采用“紧凑JSON”或“结构化文本”格式。就是去掉没必要的空格、缩短key名,比如把service_name写成svc,duration_ms写成dur。别小看这点改动,每秒千万级写入时,一天能省下几个GB。
个人技巧:我自己写了一个小linter,提交日志格式的代码变更时自动检查:有没有冗余key?是否可控?有没有意外加入的base64大字段?像这种前置检查,通常能堵住80%的成本浪费。
五、完整知识结构图
下面这张图可以帮你理清日志基础知识与存储成本之间的对应关系。只有从分类、结构到格式都理解到位了,后面的压缩、轮转、冷热分离才有扎实的根据。
搞清楚了这些基础,后面咱们聊压缩策略、冷热分离、索引优化才算是站在同一起跑线上。我个人回头看,当初在这个章节上花时间做梳理,是成本控制课程里最值的一笔投资。