将系统中发生的事情,按照发生时间的先后顺序,分门别类的记载到不同的文件中称为记录日志,文件就是日志文件。

日志用途

  1. 排查问题,解决错误
  2. 统计数据
  3. 问题追溯

种类

  • 系统日志:与系统运行相关的日志,如/var/log/messages、/var/log/secure等,由rsyslog管理的日志
  • 应用日志:应用程序的日志,如Nginx、MySQL等

Linux系统日志默认存放位置: /var/log

Linux常见系统日志

种类 说明
messages 最重要的系统日志之一,几乎所有的系统信息都会记录在此
cron 计划任务相关的日志
secure 安全相关的日志(需要输入用户名密码的软件,比如ssh、su等)
dmesg 内核检测过程中产生的各种信息,硬件检测信息
lastlog 所有账户最近一次登录系统的相关信息, 使用 lastlog 命令查看
boot.log 记录系统启动信息
wtmp 记录的是正确登录的人的信息,可以用 last 命令来查看
btmp 登录失败日志 可以使用 lastb 命令查看

系统日志服务的后台进程: rsyslog.service

关于服务的管理:

el7 el6
启动 systemctl start 服务名称 /etc/init.d/服务名称 start
停止 systemctl stop 服务名称 /etc/init.d/服务名称 stop
重启 systemctl restart 服务名称 /etc/init.d/服务名称 restart
查看 systemctl status 服务名称 /etc/init.d/服务名称 status
重载 systemctl reload 服务名称 /etc/init.d/服务名称 reload

通用方法(el6 & el7): service 服务名称 {start|stop|restart|reload}

日志配置

日志服务的配置文件

vim /etc/rsyslog.conf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@server ~]# vim /etc/rsyslog.conf
#### MODULES ####         # 模块相关
$ModLoad imuxsock           # 启用本地日志支持 
$ModLoad imklog               # 启用内核相关日志
$ModLoad immark              # 对日志打标记
# Provides UDP syslog reception              # 使用UDP协议接收远端的日志
#$ModLoad imudp                              # 加载udp模块
#$UDPServerRun 514                           # 服务器监听在514端口
   
#### GLOBAL DIRECTIVES ####                   # 全局配置部分
# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf          # 包含/etc/rsyslog.d/目录下所有以.conf结尾的配置文件
...
# 产生日志的服务或者设备.日志的级别               日志操作
*.info;mail.none;authpriv.none;cron.none      /var/log/messages
authpriv.*                                    /var/log/secure
mail.*                                        -/var/log/maillog
cron.*                                        /var/log/cron
*.emerg                                       *
uucp,news.crit                                /var/log/spooler
local7.*                                      /var/log/boot.log
...
# local0~local7:自定义的服务名
...

配置格式

  1. 服务名称

    名称 内容
    authpriv(auth) 用户授权相关的,认证等 ssh、login、su等
    cron 和计划任务相关的服务
    mail 和邮件相关的
    news 新闻相关的 uucp
    kern 和内核相关的
    lpr 打印机相关的
    syslog 和rsyslogd进程相关的
    local0~local7 自定义服务名称
  2. 日志的级别:级别越高、日志越少

    1. none:不记录日志
    2. debug:调试信息
    3. info:一般的通知信息
    4. notice:提醒信息,比 info 稍微重要点
    5. warning(warn):重要信息,可能有问题
    6. error:错误信息
    7. critical(crit):比较严重的错误
    8. alert:警报信息,需要立即行动
    9. emerg(panic):紧急(恐慌),系统可能已经不可用了

selinux:由 linux 内核提供的一种安全审计机制

防火墙:网络数据包的处理系统

查看 selinux 状态:getenforce

三种状态:

  • Enforcing:强制拦截
  • Permissive:不拦截,但会有警告信息
  • Disable:关闭

临时关闭selinux:立即生效

setenforce 0

永久关闭:重启后生效

1
2
修改/etc/selinux/config
   SELINUX=disabled

日志轮转

日志轮转是一种管理日志文件的方法,旨在防止由于持续记录而导致的磁盘空间耗尽。

  • 防止日志文件过大
  • 定期清除过期日志

三步:

  1. 将旧日志重命名
  2. 创建新的日志文件
  3. 将新的日志记录到新的文件日志中 重新打开日志文件(reopen)10|重载配置(reload)1|重启(restart)

lsof

误删文件怎么办?

如果有进程在使用(文件在内存中使用),就可以找回。

在内存中的数据(/proc/进程号/fd/xxx)重定向到文件中,再立即重启服务(一行命令同时重定向+重启)。

😄文件误删除如何处理:

  1. 查看是否有进程打开了此文件:lsof |grep 文件名
  2. 如果有,查看其进程号(PID)及文件描述符
  3. 进入/proc/PID/fd目录,通过文件描述符恢复该文件并立即重启打开此文件的进程

日志轮转的配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
[root@server ~]# vim /etc/logrotate.conf
...
weekly                              # 轮转的周期,一周一轮转
rotate 4                            # 保留几个旧的日志文件,类似于备份
create                              # 旧日志轮转后是否创建新的空白日志
dateext                             # 使用日期作为旧日志的后缀
include /etc/logrotate.d            # 包含该路径下的所有配置文件
...
/var/log/wtmp {                     # 针对特定的日志进行定制设置
    monthly                         # 轮转周期,一个月
    create 0664 root utmp           # 创建新的日志文件  权限664 所有者root 所属组utmp
    minsize 1M                      # 轮转的最小大小是1M
    rotate 1
}
...
/var/log/btmp {
    missingok                       # 忽略错误
    monthly
    create 0600 root utmp
    rotate 1
}