在Linux系统中,日志文件包含大量信息,从中提取关键信息是系统管理和故障排查的重要技能。以下是几种常用的日志信息提取方法:
/var/log/messages
- 常规系统消息/var/log/syslog
- 系统日志/var/log/auth.log
- 认证日志/var/log/kern.log
- 内核日志/var/log/boot.log
- 启动日志/var/log/dmesg
- 设备驱动消息/var/log/nginx/
- Nginx日志/var/log/apache2/
- Apache日志# 搜索包含"error"的行
grep "error" /var/log/syslog
# 不区分大小写
grep -i "error" /var/log/syslog
# 显示匹配行及前后5行
grep -A 5 -B 5 "error" /var/log/syslog
# 查看最后100行
tail -n 100 /var/log/syslog
# 实时查看新增日志
tail -f /var/log/syslog
# 查看前50行
head -n 50 /var/log/syslog
less /var/log/syslog
# 提取第5列
awk '{print $5}' /var/log/syslog
# 按条件过滤并提取
awk '/error/ {print $1, $2, $5}' /var/log/syslog
# 替换文本
sed 's/error/ERROR/g' /var/log/syslog
# 提取特定行范围
sed -n '10,20p' /var/log/syslog
# 提取以空格分隔的第3列
cut -d' ' -f3 /var/log/syslog
# 查看全部日志
journalctl
# 查看特定服务的日志
journalctl -u nginx.service
# 查看特定时间段的日志
journalctl --since "2023-01-01" --until "2023-01-02"
# 查看错误日志
journalctl -p err
# 手动执行日志轮转
logrotate -f /etc/logrotate.conf
# 查找过去1小时内包含"error"的日志,按时间排序
grep "error" /var/log/syslog | grep "$(date -d '1 hour ago' '+%b %d %H')" | sort
# 统计nginx访问日志中访问量最高的10个IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10
# 提取特定时间段的ssh登录失败记录
grep "Failed password" /var/log/auth.log | grep "May 10"
#!/bin/bash
# 分析/var/log/syslog中的错误
LOG_FILE="/var/log/syslog"
OUTPUT_FILE="error_report_$(date +%Y%m%d).txt"
# 提取今天的错误日志
echo "=== 系统错误报告 $(date) ===" > $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "1. 所有错误信息:" >> $OUTPUT_FILE
grep -i "error" $LOG_FILE | grep "$(date +'%b %d')" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "2. 错误统计:" >> $OUTPUT_FILE
grep -i "error" $LOG_FILE | grep "$(date +'%b %d')" | awk '{print $5}' | sort | uniq -c | sort -nr >> $OUTPUT_FILE
echo "报告生成完成: $OUTPUT_FILE"
通过以上方法和工具的组合使用,可以高效地从Linux日志中提取所需的关键信息。