面试题答案
一键面试日志格式设计
- 增加时间戳精度:在原有的时间格式基础上,精确到毫秒,便于更精准地定位故障发生时间点。例如将
%d{yyyy-MM-dd HH:mm:ss}
修改为%d{yyyy-MM-dd HH:mm:ss,SSS}
。 - 添加线程信息:在日志中加入线程名,方便了解并行操作中各线程的执行情况,格式为
%t
。 - 记录类名和方法名:添加
%C
(类名)和%M
(方法名),能够快速定位问题代码所在位置。 - 增加唯一标识符:为每个请求生成唯一ID并记录在日志中,方便追踪一个请求在整个系统中的流转情况。
完整日志格式示例:%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5level %C{1}:%M - %X{requestId} - %msg%n
日志收集策略
- 分布式收集:在每个HBase节点上部署日志收集代理(如Flume),实时收集本地产生的日志文件,并将其发送到集中存储。
- 分级别收集:根据日志级别(如DEBUG、INFO、WARN、ERROR)进行分类收集,对于DEBUG级别的日志可以设置较低频率收集,而ERROR级别则需立即收集。
- 按时间和大小滚动:配置日志文件按时间(如每天)和文件大小(如100MB)进行滚动,防止单个日志文件过大影响收集和分析效率。
日志分析策略
- 实时监控:使用工具(如Kibana结合Elasticsearch)实时分析收集到的日志,设置告警规则,如当ERROR级别日志数量在短时间内激增时发出警报。
- 关联分析:利用日志中的唯一标识符,将不同节点上与同一请求相关的日志关联起来,梳理请求处理流程,发现问题节点和环节。
- 历史数据分析:定期对历史日志进行深度分析,挖掘潜在问题模式和规律,如某些操作在特定时间段容易出现故障,为预防故障提供依据。
- 故障模拟分析:根据已知故障场景,在测试环境中模拟并收集日志,对比正常和故障场景下的日志差异,为实际故障排查提供参考。