1. 日志分析概述:什么是日志、日志的作用、日志分析的价值、常见日志格式介绍
大家好,我是老张。做运维和系统开发十几年了,每天打交道最多的东西,就是日志。
很多人觉得日志就是一堆没用的文字,出问题了才想起来翻一翻。说实话,我刚入行那会儿也这么想。直到有一次线上故障,数据库莫名其妙挂了,查了半天没头绪。最后是一个老前辈翻了翻慢查询日志,发现了一条锁等待的记录——就一行日志,定位了问题。从那以后,我再也不敢小看日志了。
这一章,咱们就聊聊日志到底是什么,它有什么用,以及为什么值得你花时间学日志分析。
1.1 什么是日志
日志,说白了就是系统、应用或设备在运行过程中产生的「行为记录」。它像飞机的黑匣子,把每一秒发生了什么、什么时候发生的、结果如何,都记下来。
举个例子:
2025-03-21 14:32:15.123 INFO [http-nio-8080-exec-3] com.example.controller.UserController - 用户登录成功,userId=1024
这一行日志告诉我们:
- 时间:2025年3月21日下午2点32分15秒
- 级别:INFO(普通信息)
- 线程:http-nio-8080-exec-3
- 类名:UserController
- 内容:用户1024登录成功
每一部分都有意义。你想想看,如果没有日志,系统出了错,你连从哪儿查起都不知道。
1.2 日志的作用
日志的作用,我总结为四个字——「追根溯源」。具体来说,有这几个方面:
- 故障排查:系统崩了、接口慢了、数据丢了,日志是第一手线索。
- 安全审计:谁在什么时候做了什么操作,日志里一清二楚。
- 性能分析:通过日志里的响应时间、QPS等数据,找到系统瓶颈。
- 业务监控:比如电商网站的订单量、支付成功率,都可以从日志里统计出来。
- 合规要求:很多行业(金融、医疗)要求保留操作日志,以备检查。
我记得有一次,客户投诉说凌晨三点被扣了钱。我们查了数据库,没有异常。后来翻了应用日志,发现是定时任务重试时重复调用了支付接口。一行日志,帮公司省了一笔赔偿金。
1.3 日志分析的价值
日志本身只是数据,但分析之后,它就变成了价值。
我给大家算一笔账:
| 场景 | 没有日志分析 | 有日志分析 |
|---|---|---|
| 系统宕机 | 人工翻文件,平均2小时定位 | 关键字搜索,5分钟定位 |
| 安全攻击 | 事后才发现,损失已造成 | 实时告警,及时阻断 |
| 性能优化 | 凭感觉猜瓶颈 | 数据驱动,精准优化 |
| 业务决策 | 没有数据支撑 | 用户行为分析,辅助决策 |
说白了,日志分析就是把「死数据」变成「活信息」。你不需要再靠猜、靠经验、靠运气去解决问题,而是靠数据说话。
1.4 常见日志格式介绍
日志格式千奇百怪,但万变不离其宗。我挑几个最常见的说说。
1.4.1 文本日志(非结构化)
这是最原始的格式,一行一条记录,用分隔符或固定位置区分字段。
192.168.1.1 - - [21/Mar/2025:14:32:15 +0800] "GET /index.html HTTP/1.1" 200 2326
这是Nginx的访问日志。字段之间用空格和括号隔开。看着乱,但解析起来有规律。
1.4.2 JSON日志(结构化)
现在越来越多的应用用JSON格式打日志。结构清晰,机器解析方便。
{
"timestamp": "2025-03-21T14:32:15.123Z",
"level": "ERROR",
"logger": "com.example.service.OrderService",
"message": "订单创建失败",
"orderId": "ORD20250321001",
"errorCode": "E1002"
}
JSON日志的好处是:字段名一目了然,不用猜。我个人的项目,都推荐用JSON格式。
1.4.3 Syslog(系统日志)
Linux系统自带的日志格式,主要用于系统级别的记录。
Mar 21 14:32:15 localhost sshd[1234]: Failed password for root from 192.168.1.100 port 22 ssh2
这个格式比较老,但很多网络设备(路由器、防火墙)还在用。
1.4.4 二进制日志
比如MySQL的binlog、Windows的Event Log。这类日志不能直接用文本编辑器看,需要专门的工具解析。
| 格式类型 | 可读性 | 解析难度 | 典型场景 |
|---|---|---|---|
| 文本日志 | 高 | 低 | Nginx、Apache |
| JSON日志 | 中 | 低 | Spring Boot、Node.js |
| Syslog | 中 | 中 | Linux系统、网络设备 |
| 二进制日志 | 低 | 高 | MySQL、Windows |
1.5 本章知识体系
下面这张图,帮你把这一章的内容串起来: