凌峰创科服务平台

Linux服务器日志查看命令有哪些?

在Linux系统中,查看服务器日志是系统管理和故障排查的核心操作之一,日志记录了系统运行状态、应用程序行为、用户操作等信息,通过分析日志可以快速定位问题根源,Linux系统通常使用systemd作为系统和服务管理器,其日志统一存储在/var/log目录下,并通过journalctl命令进行管理,同时部分传统日志文件仍可通过cattailgrep等基础命令查看,以下是查看服务器日志的详细方法和工具使用技巧。

系统日志的核心存储位置

Linux系统的日志文件主要分布在/var/log目录下,不同类型的日志存储在不同文件中,常见的日志文件及其作用如下表所示:

日志文件名 重要性
/var/log/messages 记录系统启动信息、内核错误、服务状态等通用日志(非认证相关)
/var/log/syslog 部分传统系统中记录系统和服务日志,功能类似messages(如Ubuntu 18.04之前)
/var/log/kern.log 专用于记录内核相关的日志信息,如驱动加载、硬件错误等
/var/log/auth.log 记录用户认证信息,如登录成功/失败、sudo操作、SSH连接等(Debian/Ubuntu系统)
/var/log/secure 类似auth.log,记录认证相关日志(RHEL/CentOS系统)
/var/log/cron.log 记录定时任务(cron)的执行情况,包括任务启动时间和输出结果
/var/log/dmesg 记录系统启动时内核的缓冲区信息,包括硬件检测和驱动加载过程
/var/log/mail.log 记录邮件系统(如postfix、sendmail)的发送和接收日志
/var/log/apache2/ Apache Web服务器的访问日志(access.log)和错误日志(error.log
/var/log/nginx/ Nginx Web服务器的访问日志(access.log)和错误日志(error.log
/var/log/mysql/ MySQL数据库的错误日志(error.log)、查询日志(slow-query.log)等
/var/log/boot.log 记录系统启动过程中各个服务的启动状态

使用journalctl查看系统日志(推荐方法)

journalctlsystemd日志系统的核心工具,功能强大且高效,支持实时查看、过滤、格式化输出等操作,以下是常用用法:

查看所有日志

  • 基础查看journalctl(默认显示当前本次启动的所有日志,按时间倒序排列)
  • 显示实时日志journalctl -f(类似tail -f,实时跟踪新增日志)
  • 显示指定行数journalctl -n 100(显示最近100条日志)

按时间范围过滤

  • 查看最近指定时间journalctl --since "2025-10-01 10:00"(从指定时间开始的日志)
  • 查看最近一段时间journalctl --since "10 min ago"(最近10分钟的日志)
  • 时间范围查询journalctl --since "2025-10-01" --until "2025-10-02 12:00"(指定起止时间)

按服务/进程过滤

  • 查看特定服务日志journalctl -u nginx(查看nginx服务的日志)
  • 查看多个服务journalctl -u nginx -u mysql(同时查看nginx和mysql的日志)
  • 查看特定进程journalctl _PID=1234(查看进程ID为1234的日志)

按优先级过滤

日志优先级从低到高分为emerg(紧急)、alert(警告)、crit(严重)、err(错误)、warning(警告)、notice(注意)、info(信息)、debug(调试)。

  • journalctl -p err(显示所有错误及以上级别的日志)
  • journalctl -p warning --since today(显示今天的警告及以上级别日志)

其他常用选项

  • 显示日志字段journalctl -o verbose(显示日志的详细字段,如时间戳、主机名、进程ID等)
  • 过滤关键字journalctl | grep "error"(通过grep过滤包含关键字的日志)
  • 持久化日志journalctl --vacuum-size=500M(清理旧日志,保留500M空间)

使用传统命令查看日志文件

对于/var/log目录下的普通日志文件,可结合以下命令高效查看:

catless

  • 查看完整日志cat /var/log/messages(直接输出所有内容,适合小文件)
  • 分页查看less /var/log/auth.log(支持上下翻页、搜索/keyword、退出q

tail:实时跟踪日志末尾

  • 默认查看末尾10行tail /var/log/syslog
  • 实时跟踪tail -f /var/log/nginx/error.log(常用于监控服务运行状态)
  • 指定行数tail -n 50 /var/log/kern.log(查看末尾50行)

head:查看日志开头

  • head -n 20 /var/log/boot.log(查看文件前20行,适合查看启动信息)

grep:过滤关键字

  • grep "failed" /var/log/secure(在认证日志中搜索包含"failed"的行)
  • grep -i "error" /var/log/messages(忽略大小写搜索"error")
  • grep -A 5 -B 5 "warning" /var/log/syslog(显示匹配行及其前后5行上下文)

awksed:高级文本处理

  • awk '{print $5, $6}' /var/log/access.log(提取日志中的第5、6列,如IP和时间)
  • sed -n '/2025-10-01/,/2025-10-02/p' /var/log/messages(提取指定日期范围的日志块)

日志轮转与归档

Linux系统通过logrotate工具实现日志轮转,防止单个日志文件过大,通常配置文件位于/etc/logrotate.conf/etc/logrotate.d/目录下,nginx的日志轮转配置可能如下:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 644 root root
    postrotate
        systemctl reload nginx
    endscript
}

此配置表示每天轮转一次日志,保留7天的历史日志,并自动压缩旧日志。

日志分析与故障排查实例

查看系统负载异常原因

若系统负载突然升高,可通过以下命令定位问题:

# 查看最近的CPU密集型进程
journalctl -u _PID=$(top -b -n1 | awk '{if(NR==3) print $12}') | head -20
# 查看内核错误日志
dmesg | grep -i error

分析Web服务器访问异常

当网站无法访问时,检查nginx错误日志:

# 查看最近的错误日志
tail -n 100 /var/log/nginx/error.log
# 过滤连接超时错误
grep "timeout" /var/log/nginx/error.log

定位用户登录失败问题

若发现可疑登录尝试,通过认证日志分析:

# 查看最近失败的SSH登录
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c

日志管理最佳实践

  1. 定期清理日志:通过logrotate设置合理的日志保留周期,避免磁盘空间耗尽。
  2. 集中日志管理:对于多台服务器,可使用rsyslogELK Stack(Elasticsearch、Logstash、Kibana)或Graylog将日志集中存储和分析。
  3. 权限控制:确保日志文件权限合理(如/var/log/secure通常为600),避免敏感信息泄露。
  4. 实时监控:使用fail2ban结合日志自动封禁恶意IP,或通过Prometheus+Grafana监控日志指标。

相关问答FAQs

Q1: 为什么journalctl无法查看某些服务的日志?
A: 可能的原因包括:1)服务未使用systemd管理(如某些传统服务);2)日志轮转后旧日志被清理;3)服务未正确配置日志输出到journald,可通过systemctl status 服务名检查服务状态,或直接查看/var/log下的对应日志文件。

Q2: 如何自动清理过期的日志文件?
A: Linux系统默认通过logrotate工具实现日志自动清理,可通过编辑/etc/logrotate.d/目录下的配置文件(如/etc/logrotate.d/syslog)设置轮转规则(如daily rotate 30 compress),表示每天轮转一次,保留30天历史日志并压缩,执行logrotate -f /etc/logrotate.conf可手动触发日志轮转。

分享:
扫描分享到社交APP
上一篇
下一篇