0

0

Linux 日志过滤与分析命令实战

冰川箭仙

冰川箭仙

发布时间:2026-02-25 18:18:41

|

952人浏览过

|

来源于php中文网

原创

grep搜不到关键词主因是大小写敏感,应加-i参数;日志可能含ansi字符、被压缩或分隔符不统一,需用cat -v、zgrep、awk -f'\s+'或jq等针对性处理。

linux 日志过滤与分析命令实战

grep 筛日志时为什么搜不到明明存在的关键词?

常见现象是 grep "ERROR"/var/log/syslog 里没结果,但用 less 手动翻又确实有。根本原因通常是日志行被截断、编码异常,或更常见的是——日志里实际写的是 error(小写)或 Error(首字母大写),而 grep 默认区分大小写。

  • -i 参数做不区分大小写的匹配:grep -i "error"
  • -E 支持正则,比如匹配 ERROR/Warning/CRITICAL:grep -E "(ERROR|Warning|CRITICAL)"
  • 注意日志可能含 ANSI 转义字符(尤其容器日志),先用 cat -v 看真实内容,必要时用 sed 's/\x1b\[[0-9;]*m//g' 清洗
  • 如果日志是压缩的(如 syslog.1.gz),直接 zgrep 更省事:zgrep -i "timeout" /var/log/syslog.1.gz

用 awk 提取特定字段时字段数总对不上

awk '{print $5}' 在日志里经常打印出空或错位内容,不是 awk 有问题,而是日志分隔符不统一:系统日志常用空格,但有些字段本身含空格(如进程名带路径),还有时间戳里带冒号和中括号。硬按空格切必然崩。

  • 优先用 awk 的固定分隔符模式,比如 systemd 日志用 -F' ' 不够稳,改用 -F'[[:space:]]+'(多个空白当一个分隔符)
  • 真正可靠的方案是用 awk 配合正则捕获,例如提取 systemd[12345] 中的 PID:awk '/systemd\[[0-9]+\]/ {match($0, /systemd\[([0-9]+)\]/, arr); print arr[1]}'
  • 若日志是 JSON 格式(如 Docker 或 fluentd 输出),别硬啃 awk,直接上 jqdocker logs myapp | jq -r '.level, .message'

tail -f 实时看日志卡住或漏行

tail -f /var/log/auth.log 有时突然不动,或者新日志来了但终端没刷新。这不是网络问题,而是日志轮转(logrotate)触发后,tail 还锁着旧文件句柄,新内容写进新文件,它就“失联”了。

AI Background Remover
AI Background Remover

AI背景移除工具,免费使用

下载
  • -F(大写 F)替代 -ftail -F /var/log/auth.log,它会自动跟踪文件名,轮转后重新打开新文件
  • 如果日志写入频繁但缓冲大(如某些 Java 应用),可能因 stdout 缓冲导致 tail 看不到实时输出;此时需在应用侧加 -Djava.util.logging.SimpleFormatter.format="%1$tF %1$tT %4$s %2$s %5$s%6$s%n" 并禁用缓冲,或用 stdbuf -oL 启动
  • tail -n 100 -F 每次重启都重读最后 100 行,适合调试;但生产环境慎用,避免 IO 毛刺

日志量太大时 grep + awk 组合变慢甚至 OOM

查一周的 /var/log/journal 或 Nginx access.log 十几 G,grep "500" *.log | awk '{print $1}' | sort | uniq -c 很容易卡死或被系统 kill —— 因为管道把全量数据拖进内存,中间步骤还重复扫描。

  • journalctl 原生过滤代替文本处理:journalctl -S "2024-04-01" -U "2024-04-07" -p err -o short-iso,它走二进制索引,秒级响应
  • 对普通文本日志,先用 awk 做单遍过滤输出关键字段,再交给 sort | uniqawk '$9 ~ /^500$/ {print $1}' access.log | sort | uniq -c | sort -nr
  • 实在要高频分析,别硬扛,导出到 sqlitetsvcsvsql 查,比 shell 管道稳定得多

日志格式千差万别,没有银弹命令。最常被忽略的是确认日志源头是否做了结构化输出,以及轮转策略是否影响了你的路径假设——比如以为 /var/log/nginx/access.log 是主文件,其实它刚被 rename 成 access.log.1,而新日志正往空的 access.log 写。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

240

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

519

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

587

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

243

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

585

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3606

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

51

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

67

2026.01.13

batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

127

2026.02.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.7万人学习

Git 教程
Git 教程

共21课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号