一、日志管理核心组件

Linux 日志系统的核心是日志服务,负责收集、处理和存储各类日志信息。主流的日志服务有两种:

1. rsyslog(传统主流)

rsyslog 是 syslog 的增强版,几乎所有 Linux 发行版(如 CentOS、Ubuntu)默认预装,用于接收、过滤、转发和存储日志。

  • 工作原理:通过 “设施(facility)” 和 “优先级(priority)” 对日志分类,再根据配置规则(如存储到本地文件、转发到远程服务器)处理。
    • 设施:日志来源(如内核、用户程序、邮件服务等,用kernusermail等表示)。
      (1)日志类型分为:
      auth					##pam 产生的日志
      authpriv				##ssh、ftp 等登录信息的验证信息
      corn					##时间任务相关
      kern					##内核
      lpr						##打印
      mail					##邮件
      mark(syslog)-rsyslog	##服务内部的信息,时间标识
      news					##新闻组
      user					##用户程序产生的相关信息
      uucp					##unix to nuix copy主机之间相关的通信
      local 1-7				##自定义的日志设备
    • 优先级:日志重要程度
      (2)日志级别分为:
      debug		##有调试信息的,日志通信最多
      info		##一般信息日志,最常用
      notice		##最具有重要性的普通条件的信息
      warning		##警告级别
      err			##错误级别,阻止某个功能或者模块不能正常工作的信息
      crit		##严重级别,阻止整个系统或者整个软件不能正常工作的信息
      alert		##需要立刻修改的信息
      emerg		##内核崩溃等重要信息
      none		##什么都不记录	
      #注意:从上到下,级别从低到高,记录信息越来越少
  • 配置文件/etc/rsyslog.conf(主配置)和/etc/rsyslog.d/(子配置,用于单独配置服务日志)。
    • 示例规则:user.info /var/log/user.log(将用户设施、info 及更高优先级的日志写入user.log)。
  • 由日志服务 rsyslogd 记录的日志文件, 日志文件的内容:
    • 每一行都代表一个事件,每一行有以下四个内容:
    • 1) 事件产生的时间
    • 2) 产生事件的服务器的主机名
    • 3) 产生事件的服务名或程序名
    • 4) 事件的具体信息
  • 示例:

2. systemd-journald(现代系统)

随着 systemd 的普及(如 CentOS 7+、Ubuntu 16.04+),journald成为日志收集的前端,负责实时收集日志并暂存于内存或磁盘,可配合 rsyslog 持久化存储

  • 特点:日志以二进制格式存储(高效、结构化),需通过journalctl工具查询;支持按时间、服务、优先级等多维度筛选。
  • 存储位置:默认在/run/log/journal/内存,重启丢失),若配置持久化,会存于/var/log/journal/(磁盘,需手动创建目录并重启服务)。

二、关键日志文件位置

Linux 日志文件集中在/var/log/目录下,以下是常用日志文件及其作用:

日志文件作用说明
/var/log/messages系统核心日志(大部分非调试类系统消息,如服务启动 / 停止、用户操作等)
/var/log/secure安全相关日志(用户登录 / 注销、sudo 操作、SSH 连接等,常用于排查暴力破解)
/var/log/maillog邮件服务日志(sendmail、postfix 等邮件收发记录)
/var/log/cron定时任务(crontab)日志(任务执行结果、错误信息)
/var/log/boot.log系统启动过程日志(服务初始化、硬件检测等)
/var/log/dmesg内核启动日志(硬件驱动加载、内核错误,可通过dmesg命令实时查看)
/var/log/wtmp登录历史记录(二进制文件,需用last命令查看:last -f /var/log/wtmp
/var/log/btmp失败登录记录(二进制文件,需用lastb命令查看:lastb -f /var/log/btmp
/var/log/lastlog用户最后一次登录信息(二进制文件,用lastlog命令查看)
应用日志(如 Nginx/Apache)通常在/var/log/nginx//var/log/httpd/,包含访问日志(access.log)和错误日志(error.log)

三、日志查询与分析工具

1. 基础文本工具(处理文本日志)
  • cat/tail:查看日志(如tail -f /var/log/secure实时跟踪安全日志)。
  • grep:筛选关键字(如grep "Failed password" /var/log/secure查找失败登录)。
2. journalctl(处理 journald 二进制日志)

journalctl是查询journald日志的专用工具,支持丰富的筛选参数:

  • 查看所有日志:journalctl(默认按时间倒序,最新日志在最后)。
  • 实时跟踪:journalctl -f(类似tail -f)。
  • 按服务筛选:journalctl -u sshd(查看 sshd 服务日志)。
  • 按时间筛选:journalctl --since "2025-08-16 08:00" --until "2025-08-16 12:00"
  • 按优先级筛选:journalctl -p err(只看错误及更高优先级日志,-p 3等价,优先级数字:0=emerg,1=alert,2=crit,3=err,4=warning,5=notice,6=info,7=debug)。
  • 结合内核日志:journalctl -k(查看内核日志,类似dmesg)。
3. 登录日志查询工具
  • last:查看成功登录记录(默认读取/var/log/wtmp),如last -n 10显示最近 10 条登录。
  • lastb:查看失败登录记录(读取/var/log/btmp),如lastb | grep "ssh"查看 SSH 失败登录。
  • lastlog:查看所有用户最后一次登录时间(读取/var/log/lastlog)。

四、日志轮转(Log Rotation)

日志文件会随时间不断增大,若不处理可能占满磁盘。logrotate工具用于自动 “轮转” 日志(切割、压缩、删除旧日志),确保日志文件大小可控。

1. 配置文件
  • 主配置:/etc/logrotate.conf(定义全局默认规则)。
  • 服务单独配置:/etc/logrotate.d/目录下(如/etc/logrotate.d/nginx用于 Nginx 日志轮转)。
2. 核心轮转参数(配置文件中常用)
  • daily/weekly/monthly:按天 / 周 / 月轮转。
  • size 100M:当日志达到 100M 时轮转。
  • rotate 5:保留 5 份轮转后的日志(超过则删除最旧的)。
  • compress:轮转后压缩旧日志(用 gzip)。
  • delaycompress:延迟压缩(下次轮转时再压缩当前轮转的日志)。
  • missingok:日志文件不存在时不报错。
  • notifempty:日志为空时不轮转。
  • postrotate/endscript:轮转后执行脚本(如重启服务,确保新日志被正确写入)。
3. 示例(Nginx 日志轮转配置)

/etc/logrotate.d/nginx内容:

/var/log/nginx/*.log {
    daily               # 每天轮转
    rotate 7            # 保留7天
    compress            # 压缩旧日志
    delaycompress       # 延迟压缩
    missingok           # 日志不存在不报错
    notifempty          # 空日志不轮转
    postrotate          # 轮转后重启Nginx(确保新日志生效)
        if [ -f /var/run/nginx.pid ]; then
            kill -USR1 `cat /var/run/nginx.pid`
        fi
    endscript
}
4.日志轮替机制原理

日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务

在 /etc/cron.daily/目录,就会发现这个目录中是有 logrotate 文件(可执行), logrotate 通过这个文件依赖定时任务执行的。

crond定时后台程序会定时执行cron.daily内的文件 logrotate 文件在cron.daily下 所以也会定时执行文件中的轮替规则

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐