Linux日志管理:30个必会命令与运维实战技巧
1. Linux日志管理运维工程师的必修课在Linux系统运维的日常工作中日志文件就像系统的黑匣子记录了从内核消息到应用程序行为的完整轨迹。我处理过无数次线上故障90%的排查工作都是从分析日志开始的。掌握日志分析技能不仅能快速定位问题还能发现潜在的系统风险。Linux系统默认生成多种日志文件分布在/var/log目录下。常见的系统日志包括/var/log/messages通用系统活动日志/var/log/syslog系统日志Ubuntu系/var/log/auth.log认证相关日志/var/log/kern.log内核日志/var/log/dmesg启动时内核环缓冲区日志提示不同Linux发行版的日志文件位置可能略有差异建议先用ls -l /var/log查看实际目录结构2. 30个必知必会的日志命令精解2.1 基础查看命令2.1.1 tail命令实战# 实时查看最新日志最常用 tail -f /var/log/syslog # 显示最后100行并持续刷新 tail -100f /var/log/nginx/access.log # 结合grep过滤关键信息 tail -f /var/log/syslog | grep -i error我在处理线上问题时最常用的就是tail -f组合。有一次MySQL连接池耗尽就是通过实时跟踪错误日志发现连接未释放的问题。2.1.2 less/more命令进阶# 分页查看大日志文件支持搜索 less /var/log/syslog # 在less中快速操作 # /关键字 → 搜索 # n → 下一个匹配项 # Shiftn → 上一个匹配项 # G → 跳转文件末尾 # g → 回到文件开头less比more更强大支持双向滚动和高级搜索。我习惯用less F实现类似tail -f的效果按CtrlC停止跟踪再按F恢复。2.1.3 grep日志过滤技巧# 基本搜索区分大小写 grep error /var/log/syslog # 高级用法 grep -i timeout --coloralways /var/log/nginx/*.log grep -A 5 -B 3 critical /var/log/app.log # 显示匹配前后内容 grep -v DEBUG /var/log/app.log # 排除DEBUG日志 zgrep exception /var/log/syslog.2.gz # 搜索压缩日志注意生产环境日志量大的时候先用head或tail缩小范围再grep否则可能卡死终端2.2 统计与分析命令2.2.1 awk日志分析实战# 统计Nginx日志中各状态码出现次数 awk {print $9} /var/log/nginx/access.log | sort | uniq -c | sort -nr # 提取特定时间段的日志 awk /2023-10-01 14:00/,/2023-10-01 15:00/ /var/log/syslog # 计算平均响应时间 awk {sum$10;count} END{print Avg:,sum/count} /var/log/nginx/access.log2.2.2 sed日志处理技巧# 替换日志中的敏感信息 sed s/192.168.1.100/[REDACTED]/g /var/log/auth.log # 提取特定时间范围日志 sed -n /2023-10-01 10:00/,/2023-10-01 11:00/p /var/log/syslog2.2.3 sort/uniq统计组合# 统计访问量TOP 10的IP awk {print $1} /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10 # 统计错误类型分布 grep ERROR /var/log/app.log | awk -F] {print $2} | sort | uniq -c2.3 高级日志分析工具2.3.1 journalctl系统日志分析# 查看系统日志systemd系统 journalctl -xe # 按时间筛选 journalctl --since 2023-10-01 --until 2023-10-02 # 按服务筛选 journalctl -u nginx # 按优先级过滤 journalctl -p err -b2.3.2 logrotate日志轮转配置# 手动执行日志轮转 logrotate -vf /etc/logrotate.conf # 典型配置示例/etc/logrotate.d/nginx /var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate /usr/lib/nginx/modules/nginx -s reopen /dev/null 21 || true endscript }3. 生产环境日志管理经验3.1 日志收集最佳实践统一收集使用ELKElasticsearchLogstashKibana或Fluentd集中管理结构化日志采用JSON格式输出方便后续分析日志分级合理使用DEBUG/INFO/WARN/ERROR等级别敏感信息过滤在日志采集前脱敏如密码、密钥等3.2 性能优化技巧对大日志文件先用split分割再分析使用zcat查看压缩日志避免解压对频繁执行的日志分析任务建立缓存或物化视图在SSD存储上存放频繁访问的日志3.3 安全注意事项严格控制日志文件权限通常640定期检查日志文件完整性防止篡改重要日志实时备份到安全区域实施日志审计跟踪谁查看了什么日志4. 常见问题排查指南4.1 磁盘空间不足# 找出大日志文件 find /var/log -type f -size 100M -exec ls -lh {} \; # 清空日志文件比rm安全 truncate -s 0 /var/log/huge.log4.2 日志时间不一致# 检查系统时区 timedatectl # 检查日志服务时间配置 cat /etc/rsyslog.conf | grep time4.3 日志服务异常# 检查rsyslog状态 systemctl status rsyslog # 测试日志生成 logger This is a test message5. 进阶日志分析场景5.1 慢查询日志分析MySQL# 提取执行时间最长的10个查询 awk /Query_time/ {print $0} /var/log/mysql/mysql-slow.log | \ sort -k3 -nr | head -10 # 统计出现频率最高的慢查询 mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log5.2 Web访问日志分析# 统计HTTP状态码分布 awk {print $9} /var/log/nginx/access.log | sort | uniq -c # 找出响应时间最长的请求 awk {print $1,$4,$7,$10} /var/log/nginx/access.log | sort -k4 -nr | head -205.3 安全审计日志监控# 监控失败登录尝试 grep Failed password /var/log/auth.log | awk {print $11} | sort | uniq -c # 检测暴力破解行为 awk /Invalid user/ {print $8} /var/log/auth.log | sort | uniq -c | sort -nr掌握这些日志分析命令后我建议建立自己的命令手册。我维护了一个CheatSheet包含50多个常用日志分析命令遇到问题时能快速找到合适的工具。日志分析就像侦探工作从蛛丝马迹中还原真相这需要经验积累但掌握这些工具能让你事半功倍。