查看服务器日志是系统管理和故障排查中的核心操作,通过日志可以定位应用程序错误、监控系统性能、分析安全事件等,不同操作系统(如Linux、Windows)和不同服务(如Nginx、MySQL)的日志查看方式存在差异,掌握常用命令能大幅提升运维效率,以下从Linux系统日志、应用服务日志、日志分析技巧及工具等方面展开详细说明。

Linux系统日志查看命令
Linux系统日志通常存储在/var/log目录下,核心日志文件包括messages(系统主日志)、secure(安全认证日志)、cron(定时任务日志)、dmesg(内核日志)等,常用查看命令包括cat、less、tail、head、grep等。
基础查看命令
cat:直接输出整个日志文件内容,适合小文件查看。cat /var/log/messages # 查看系统主日志
less:分页查看日志,支持上下翻页(方向键)、关键词搜索()和退出(q),适合大文件。less /var/log/secure
head/tail:分别用于查看文件开头和末尾内容,tail常用于实时追踪日志更新。head -n 100 /var/log/syslog # 查看前100行 tail -f /var/log/nginx/access.log # 实时追踪Nginx访问日志
过滤与搜索命令
grep:按关键词过滤日志,支持正则表达式和颜色高亮(--color=auto)。grep "ERROR" /var/log/application.log # 搜索包含ERROR的行 grep -i "failed" /var/log/secure # 忽略大小写搜索failed grep -A 5 -B 5 "192.168.1.1" /var/log/nginx/access.log # 显示匹配行及前后5行
awk:按列提取或处理日志,适合结构化日志(如Nginx、MySQL)。awk '{print $1, $9}' /var/log/nginx/access.log # 提取IP和状态码
系统专用日志查看
dmesg:查看内核启动过程中的日志,可过滤硬件或驱动相关错误。dmesg | grep -i "error" # 搜索内核错误
journalctl:systemd系统的日志管理工具,功能强大,支持按时间、服务、优先级等过滤。journalctl -u nginx # 查看Nginx服务日志 journalctl --since "2023-10-01" --until "2023-10-02" # 查看指定时间范围日志 journalctl -p err # 查看错误级别及以上日志
应用服务日志查看
不同应用服务的日志路径和格式各异,需根据具体服务调整查看方式。
Web服务器日志
- Nginx:默认日志路径为
/var/log/nginx/,包括access.log(访问日志)和error.log(错误日志)。tail -f /var/log/nginx/access.log | grep "GET /api" # 实时追踪API访问 awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr # 统计URL访问量 - Apache:日志路径为
/var/log/apache2/(Ubuntu)或/var/log/httpd/(CentOS),常用access_log和error_log。grep "POST" /var/log/apache2/access_log | awk '{print $1}' | sort | uniq -c # 统计POST请求IP
数据库日志
- MySQL:错误日志默认在
/var/log/mysql/error.log(需开启log_error配置),慢查询日志在/var/log/mysql/mysql-slow.log。tail -f /var/log/mysql/error.log # 实时查看MySQL错误 mysqldumpslow -s t /var/log/mysql/mysql-slow.log # 按查询时间排序慢查询
- Redis:日志路径通常为
/var/log/redis/redis-server.log,可通过CONFIG GET loglevel查看日志级别。grep "client" /var/log/redis/redis-server.log # 查看客户端连接日志
中间件与其他服务
- Tomcat:日志路径为
$CATALINA_HOME/logs/catalina.out,需使用catalina.sh脚本管理。tail -f $CATALINA_HOME/logs/catalina.out | grep "Exception" # 实时追踪异常
- Docker:容器日志通过
docker logs查看,支持--follow(实时)和--tail(指定行数)。docker logs -f --tail 100 my_container # 查看容器最近100行实时日志
日志分析技巧与工具
常用技巧
- 按时间范围过滤:结合
grep和日期格式提取特定时间日志。grep "2023-10-01 10:[0-5][0-9]" /var/log/messages # 提取某小时日志
- 统计高频错误:使用
sort、uniq、wc组合统计错误频率。grep "ERROR" /var/log/application.log | awk '{print $5}' | sort | uniq -c | sort -nr # 统计错误类型 - 日志轮转处理:Linux通过
logrotate工具管理日志轮转,可通过/etc/logrotate.conf查看配置。
可视化与分析工具
- ELK Stack:Elasticsearch(存储)、Logstash(处理)、Kibana(可视化),适合大规模日志分析。
- Graylog:开源日志管理系统,支持实时监控和告警。
- GoAccess:实时Web日志分析工具,生成可视化报表。
goaccess /var/log/nginx/access.log -o report.html # 生成HTML报表
日志查看注意事项
- 权限问题:系统日志通常需root权限查看,普通用户可通过
sudo提权。 - 日志大小:大文件避免使用
cat,优先选择less或tail,防止终端卡顿。 - 实时监控:使用
tail -f或journalctl -f时,需结合grep过滤无关信息,提升效率。
相关问答FAQs
问题1:如何查看Nginx访问日志中IP的访问次数?
解答:使用awk提取IP列,通过sort、uniq和sort统计次数,命令如下:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
命令说明:awk '{print $1}'提取IP地址列,sort排序后uniq -c统计重复次数,sort -nr按次数降序排列。

问题2:Linux系统日志满了怎么办?
解答:可通过以下方式处理:
- 清理日志:使用
> /var/log/logfile清空日志(需root权限),或truncate -s 0 /var/log/logfile截断日志。 - 配置轮转:检查
/etc/logrotate.conf或服务专用轮转配置(如Nginx的/etc/logrotate.d/nginx),确保日志自动按大小或时间轮转。 - 扩容磁盘:若日志路径所在磁盘空间不足,需清理非必要文件或扩容磁盘。
注意:直接清空日志前,建议先备份重要日志内容,避免丢失关键信息。

