9. Linux中日志管理

130 阅读4分钟

本系列都是是基于RedHat体系的,所以CentOS也可以用,但是Debian系列的可能会有些命令上的出入。

1. 日志程序rsyslog

rsyslog专门处理系统日志的程序,处理绝大部分的日志记录,主要记录系统操作有关的信息,如登录信息、程序启动关闭信息、错误信息。各种应用程序也有可能产生日志信息,不属于本节所述。

日志大部分存储在/var/log目录下。实时显示日志文件tail -f /var/log/messages

CentOS系列Linux的日志(Ubuntu不太一样,但是也有该程序)

  • /var/log/messages记录主日志。

  • var/log/security记录认证、安全相关日志。

  • /var/log/yum.log记录yum相关日志。

  • /var/log/maillog记录跟邮件postfix相关的日志。

  • /var/log/cron记录crond、at进程产生的相关日志。

  • /var/log/dmesg记录和系统启动相关的日志。

  • /var/log/audit/audit.log系统审计相关日志。

  • /var/log/mysqld.logMySQL日志

  • /var/log/xferlog访问FTP服务器相关日志。

  • /var/log/wtmp当前登录的用户(命令:w)

  • /var/log/btmp最近登录的用户(命令:last)

  • /var/log/lastlog所有用户的登录情况(命令:lastlog)

1.1 rsyslog配置

  1. 安装:yum install rsyslog,默认已经安装。

  2. 启动:systemctl start rsyslog.service

  3. 相关文件:

    列出所有相关文件:CentOS:rpm -ql rsyslog,Ubuntu:dpkg -S rsyslog

    列出配置文件:CentOS:rpm -qc rsyslog,Ubuntu:dpkg -s rsyslog,Conffiles部分。这一部分可以参考:RPM & APT

    • /ect/rsyslog/rsyslog:rsyslogd的主配置文件**【关键】**
    • /etc/sysconfig/rsyslog:定义日志级别
    • /etc/logrotate.d/syslog:和日志轮转(切割)相关

1.2 主配置文件

主配置文件一般都位于/etc目录下,并且一般以程序名.conf命名。

RULES: 设备.日志级别 file-path,即FACILITY.LEVEL FILE。应用程序属于什么设备是由开发人员确定的,一种设备对应多个应用程序,一个应用程序对应一种设备。

Ubuntu的这个文件位于需要查看/etc/rsyslog.confrules所述在哪个文件,然后现在是在/etc/rsyslog.d/50-default.conf

设备的类型和日志的级别具体的内容可以查看:man 3 syslog

  • authpriv.* /var/log/secure认证设备日志
  • mail.* /var/log/maillog邮件日志位置
  • cron.* /var/log/cron定时任务日志

日志的级别:

  1. emerg(ency)
  2. error
  3. info
  4. debug
  5. *:代表任何级别

:star:一般不要修改这个/etc/rsyslog.conf,如果修改了配置文件要使其生效的方式有(坚决推荐不要修改!!!):

# 重启
$ reboot
# $ init 6		# 也是重启

# 不杀死进程加载所有配置
$ ps aux | grep rsyslogd
$ kill -1 <rsyslogd-pid>

2. 日志轮转 logrotate

安装:yum install logrotate

启动:systemctl start logrotate.service

需要日志轮转是因为,日志有很多有用的信息,但是磁盘空间有限。所以需要删除不需要的日志。但是这是系统自动完成的,不需要手动调用logrotate。手动调用是:/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf-s是指定logrotate日志轮转状态文件。

logrotate的工作原理是按照配置进行轮转。

配置文件:

  • /etc/logrotate.conf:主配置文件,决定每个日志文件如何轮转
  • /etc/logrotate.d/*:子配置目录,一般是自定义,将来不想要了好删除,而且万一改错了,可以删除子配置,不影响原来的程序

配置的具体方式查看man logrotate

  • weekly:轮转的周期,按周来轮转
  • rotate 4:保留4份
  • create:轮转后创建新文件(老文件重命名)
  • dateext:使用时间作为文件后缀名称
  • compress:压缩日志文件,默认关闭
  • include /etc/logrotate.d:包含该目录下的子配置文件

子配置文件内容举例:

# /etc/logrotate.d/wtmp
/var/log/wtmp {								# 在配置文件中书写日志的名字和{},就可以独立设置该日志的轮转规则 
    missingok								# 该文件缺失不提示,就不轮转了
    # noifempty								# 空文件不轮转
    monthly									# 按月轮转(这里的优先级高),还有daily、yearly
    create 0664 root utmp					# 创建,指定权限,属主和属组
    minsize 1M								# 最小大小达到 1M 才轮转,这里和monthly是“且”的关系
    # maxsize 30K							# 达到30K轮转,和monthly是“或”的关系
    rotate 1								# 保留1份(这里的优先级高)
}

# /etc/logrotate.d/btmp
/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}
  • 子配置文件的优先级高于全局配置文件

  • 只有当monthlyminsize的条件都达到了,才会发生轮转。而monthlymaxsize是或的关系,有一个达到就会轮转。