3. 日志系统入门:日志级别与分类、日志存储与轮转、日志采集架构
各位好,我是老张。今天咱们聊聊基站日志系统。说实话,干我们这行的,不会看日志就像医生不会看化验单——基本等于瞎忙活。我带过不少新人,发现很多人一上来就对着日志文件发懵,不知道从哪看起。其实啊,日志系统没那么玄乎,搞懂几个核心概念就够了。
3.1 日志级别:从DEBUG到FATAL
先说说日志级别。我个人习惯把日志级别想象成「警报的严重程度」。基站系统里,常见的级别有这么几个:
| 级别 | 含义 | 我在项目中遇到的场景 |
|---|---|---|
| DEBUG | 调试信息 | 开发阶段才开,生产环境一般关掉 |
| INFO | 正常操作信息 | 基站启动、配置加载、用户接入 |
| WARN | 警告 | 信号弱、资源紧张、配置异常 |
| ERROR | 错误 | 链路中断、硬件故障、协议异常 |
| FATAL | 致命错误 | 系统崩溃、看门狗复位、内存泄漏 |
嗯,这里要注意:别在生产环境开DEBUG级别。我曾经在某个项目里,同事为了查一个偶发问题,把日志级别调成了DEBUG,结果一天下来日志文件涨了20GB,直接把磁盘撑爆了。基站直接宕机,那叫一个惨。
3.2 日志分类:按模块和功能划分
日志光有级别还不够,还得分类。你想想看,一个基站系统少说几十个模块,日志全混在一起,找起来跟大海捞针似的。我一般把日志分成这么几类:
- 系统日志:操作系统层面,比如进程启动、内存使用、CPU负载
- 通信日志:信令交互、协议栈消息、接口数据
- 操作日志:运维人员做了什么操作,谁在什么时候改了配置
- 性能日志:吞吐量、时延、丢包率、用户数
- 安全日志:登录尝试、权限变更、异常访问
为什么要分类?说白了就是为了快速定位问题。我记得有一次,某个基站频繁掉线,我直接去看通信日志,发现是SCTP链路心跳超时。如果当时去翻系统日志,估计得花半天时间。
syslog_20250101.log、comm_20250101.log。这样 grep 的时候方便很多。
3.3 日志存储与轮转:别让日志撑爆磁盘
日志存储是个老生常谈的问题。基站设备通常存储空间有限,日志如果不做管理,几天就能把磁盘写满。我见过最夸张的一次,一个基站因为日志轮转配置错误,三个月没清理,最后系统启动都报错。
常用的日志轮转策略有几种:
- 按大小轮转:比如每个日志文件最大100MB,满了就自动切下一个
- 按时间轮转:每天或每小时生成一个新文件
- 按数量轮转:保留最近10个文件,旧的自动删除
实际项目中,我一般会组合使用。举个例子:
# logrotate 配置示例
/var/log/bs/comm.log {
daily # 每天轮转一次
rotate 7 # 保留7天
compress # 压缩旧日志
delaycompress # 延迟一天压缩
maxsize 100M # 超过100M也触发轮转
missingok # 文件不存在不报错
notifempty # 空文件不轮转
}
这个配置什么意思呢?每天切一次日志,保留最近7天的。如果某天日志量特别大,超过100MB也会提前切。旧日志用gzip压缩,能省不少空间。
3.4 日志采集架构:从基站到中心
单台基站的日志好处理,但一个网络有成百上千个基站,日志怎么集中管理?这就涉及到采集架构了。
我参与过的项目里,常见的架构分三层:
- 采集层:每个基站上跑一个Agent,负责收集本地日志
- 传输层:通过专网或VPN,把日志实时或定时传到中心
- 存储层:中心服务器接收日志,做索引、归档、分析
举个例子,我们之前用Filebeat + Kafka + Elasticsearch这套组合:
# Filebeat 配置示例
filebeat.inputs:
- type: log
paths:
- /var/log/bs/*.log
fields:
node_id: "BS-001"
node_type: "macro"
output.kafka:
hosts: ["kafka1:9092", "kafka2:9092"]
topic: "bs-logs"
partition.round_robin:
reachable_only: false
为什么要用Kafka?说白了就是削峰填谷。基站多的时候,日志量可能瞬间暴涨,直接写数据库容易崩。Kafka作为缓冲层,能扛住高并发。
close_inactive参数,让Agent别老盯着文件不放。
3.5 实战经验:日志分析三板斧
最后分享点干活。拿到一堆日志,怎么快速找到问题?我总结了三步:
- 先看时间戳:找到故障发生的时间点,缩小范围
- 再搜ERROR/FATAL:用grep直接过滤出异常日志
- 最后看上下文:用
-C 5参数,看错误前后各5行
举个例子:
# 快速定位问题
grep -n "ERROR" /var/log/bs/comm_20250101.log | head -20
# 查看上下文
grep -n -C 5 "SCTP link down" /var/log/bs/comm_20250101.log
嗯,这套方法我用了十年,基本没失手过。当然,前提是你得知道日志存在哪、叫什么名字。所以,日志系统的规范命名和统一存储,比什么都重要。
好了,日志系统入门就聊到这儿。下一节咱们会深入讲讲具体的日志分析工具和实战案例。到时候我会拿几个真实故障来拆解,保证干货满满。