找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1431

积分

0

好友

208

主题
发表于 10 小时前 | 查看: 2| 回复: 0

日志是系统运行的详细记录,当服务器出现性能异常或服务中断时,高效的日志排查能力是快速定位问题的关键。面对分散且格式多样的日志文件,掌握正确的工具和方法能极大提升系统运维的效率。本文将系统介绍传统的命令行工具与现代的journalctl,助你构建清晰的日志排查思路。

二、日志查看命令大全

下表汇总了Linux环境下核心的日志查看命令及其适用场景:

命令 主要功能 典型使用场景 关键参数
tail -f 实时监控日志更新 服务部署后观察启动情况 -f(实时)、-n(行数)
grep 关键词过滤 查找特定错误信息 -i(忽略大小写)、-C(上下文)
less 分页查看日志 分析历史日志文件 /(搜索)、Shift+g(跳转末尾)
journalctl -f 实时监控系统日志 系统级故障实时监控 -f(实时跟踪)
journalctl -u 查看特定服务日志 服务故障排查 -u(指定服务单元)
journalctl --since 按时间范围查询 定位特定时间段的问题 --since--until
journalctl -p 按优先级过滤 快速定位错误和警告 -p(优先级级别)

三、传统日志查看工具:基础但不可替代

尽管现代Linux发行版普遍采用systemd,但tailgrepless等传统命令仍是处理文本日志文件的基石,熟练掌握它们至关重要。

1. tail命令:实时监控的“监视器”

tail命令能够实时输出文件末尾的新增内容,是观察日志动态的利器。

# 实时查看日志更新
tail -f /var/log/nginx/access.log

# 查看最后100行并持续监控
tail -n 100 -f /var/log/system.log

# 同时监控多个日志文件
tail -f /var/log/nginx/access.log -f /var/log/nginx/error.log

应用场景:部署新服务后,使用tail -f实时跟踪启动日志,即时发现报错。

2. grep命令:日志中的“搜索引擎”

grep用于在文件中搜索匹配指定模式的行,能从海量日志中快速提取关键信息。

# 查找包含“error”的行
grep “error” /var/log/system.log

# 忽略大小写搜索“timeout”
grep -i “timeout” /var/log/application.log

# 显示匹配行及其后10行内容
grep -A 10 “NullPointerException” /var/log/app.log

# 搜索“ERROR”或“WARN”
grep -e “ERROR” -e “WARN” /var/log/system.log

应用场景:用户反馈接口超时,使用grep -i "timeout"快速过滤相关请求日志。

3. less命令:大型日志文件的“导航器”

对于庞大的日志文件,less支持分页浏览和交互式搜索,便于深入分析。

# 打开日志文件
less /var/log/large-logfile.log

# 在less中常用的导航命令:
# /keyword - 向前搜索关键词
# ?keyword - 向后搜索关键词
# n - 下一个匹配项
# N - 上一个匹配项
# Shift+g - 跳转到文件末尾
# g - 跳转到文件开头

应用场景:分析前一日日志时,用less打开后按Shift+g跳至末尾,再用?向上回溯搜索错误。

四、journalctl:现代Linux的日志利器

journalctlsystemd系统自带的日志管理工具,它统一管理内核、系统及服务的日志,提供强大的查询和过滤功能,是现代Linux故障排查的核心工具。

1. 基础查询:掌握日志排查的“三板斧”

# 查看全部日志(信息量大,慎用)
journalctl

# 查看本次启动后的日志
journalctl -b

# 实时跟踪日志输出
journalctl -f

应用场景:系统出现异常时,开启一个终端执行journalctl -f实时监控全局日志。

2. 精准过滤:像侦探一样缩小嫌疑范围

高效的故障排查依赖于精准的日志过滤。

# 按服务单元过滤
journalctl -u nginx.service

# 按时间范围过滤
journalctl --since “2025-01-20 09:00:00” --until “2025-01-20 10:00:00”
journalctl --since “1 hour ago”

# 按优先级过滤(err及以上)
journalctl -p err -b

应用场景:监控显示9-10点系统负载飙升,可快速过滤该时段错误日志:

journalctl --since “09:00” --until “10:00” -p err..warning

3. 高级技巧:深度排查的“秘密武器”

# 查看指定进程ID的日志
journalctl _PID=1234

# 以JSON格式输出(便于脚本解析)
journalctl -u nginx.service -o json-pretty

# 查看内核日志
journalctl -k

# 显示日志占用的磁盘空间
journalctl --disk-usage

# 清理7天前的旧日志
journalctl --vacuum-time=7d

应用场景:某个进程异常崩溃,使用_PID=参数查看其完整的生命周期日志记录。

五、实战案例:从报警到恢复的完整流程

通过一个模拟案例,串联使用上述命令解决问题。

案例:数据库连接池耗尽

场景:凌晨收到数据库连接池耗尽的报警。

第一步:快速确认问题

# 实时查看最近5分钟应用日志
journalctl -u application.service -f --since “5 minutes ago”

观察到大量“Could not obtain database connection”错误,确认连接池耗尽。

第二步:定位根本原因

# 检索过去10分钟内与数据库相关的日志
journalctl -u application.service --since “10 minutes ago” | grep -i “database”

发现一条执行超过30秒的慢查询SQL,正是它长期占用连接导致池耗尽。

第三步:解决并验证
优化问题SQL后,持续监控恢复状态:

tail -f /var/log/application.log | grep “connection”

观察到可用连接数逐渐回升,问题得以解决。

六、日志管理最佳实践

  1. 定期轮转日志:配置logrotate工具,防止单个日志文件过大。
  2. 关键日志备份:将重要日志同步至远程存储或日志平台,避免本地丢失。
  3. 建立监控告警:对日志中的关键错误模式(如ERRORFATAL)配置实时告警。
  4. 合理配置日志级别:生产环境避免使用DEBUG级别,以防日志量剧增影响性能。

七、总结

掌握Linux日志排查命令是后端工程师和运维人员的必备技能。传统文本工具(tail, grep, less)与现代系统化工具(journalctl)相辅相成,应根据实际场景灵活选用。高效的故障排查更依赖于清晰的方法论:从整体监控切入,利用过滤条件逐步缩小范围,最终定位问题根因。

参考资料

  1. https://blog.csdn.net/gitblog_01128/article/details/151604666
  2. https://m.php.cn/faq/1388465.html
  3. https://m.jb51.net/server/335812xmz.htm
  4. https://www.cnblogs.com/huangjiabobk/p/18731994
  5. https://worktile.com/kb/ask/368776.html
  6. https://blog.csdn.net/gitblog_00652/article/details/152380322
  7. https://blog.csdn.net/gao_gavin_fei/article/details/153004003



上一篇:Rust CI优化实战:Cargo构建时间激增,使用sccache解决CI Pipeline崩溃
下一篇:3D打印入门成本全解析:从千元设备到耗材配件的真实花费
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 17:17 , Processed in 0.153802 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表