一、日志

保存程序的运行状态,错误信息,访问记录等,以文本文件形式保存

可以通过日志对系统进行分析,及错误定位

日志类型:内核信息、服务信息、应用程序信息

存放位置一般放在/var/log/,一般用后缀.log表示日志文件

动态查看日志文件:tail -f

常见日志文件:

文件描述
/var/log/messages系统日志文件
/var/log/secure系统安全日志文件
/var/log/cron计划任务日志
/var/log/dmesg核心的启动日志(硬件相关)
/var/log/boot.log系统引导日志,记录开机启动信息
/var/log/xferlogftp服务的日志(上传和下载文件)
/var/log/maillog邮件服务的日志
/var/log/wtmp记录所有的登入和登出
查看:last -f 文件名
/var/log/btmp记录失败的登入提示

二、日志格式

Facility.Priority Target

手册:# man syslog

1. Facility

日志来源,要记录那个服务的日志)

Facility描述
kern内核消息
user用户级消息
mail邮件系统消息
daemon系统服务消息
auth认证系统消息
syslog日志系统自身消息
lpr打印系统消息
authpriv权限系统消息
cron定时任务消息
news新闻系统消息
uucpuucp系统消息
ftpftp服务消息
local0~local7自定义消息,保留给本机用户使用

2. Priority

日志级别,要记录的日志内容,eg:错误日志、警告日志等

从下到上,级别越来越高

编号日志级别描述
0emerg系统不可用
1alert特别留意的报警信息,需要马上处理
2crit非常严重的情况
3err错误信息
4warning警告信息
5notice稍微需要注意的信息
6info正常信息
7debug调试信息

3. Target

目标位置,(日志保存位置)

-表示异步

mail.*                                                  -/var/log/maillog

4.例子

案例描述可接收日志等级
mail.info /var/log/maillog接收特定日志级别及更高级别的日志0123456
mail.=info /var/log/maillog接受特定级别日志6
mail.!=info /var/log/maillog处了特定级别制外的日志0123457
mail.none所有日志级别都不接收
mail,ftp.* -/var/log/testmail和ftp的所有消息 , -表示异步模式01234567

说明:

  • .:大于及等于特定级别
  • = :等于特定级别
  • ; :分割不同的 facility.priority组合
  • , :分割不同facility
  • !:取反
  • *:匹配所有
  • none:表示不记录服务的所有信息

注意:同一个Facility 可以写多个日志登记的规则,eg:

cron.=info                                                      /var/log/cron_info.log
cron.=err                                                       /var/log/cron_err.log

三、rsyslog

日志管理工具

特点:高性能高安全,可以进行本地日志管理,远程日志管理

1.安装及启动

系统默认安装 rsyslog

启动:

# service rsyslog start

2.配置

配置文件路径:/etc/rsyslog.conf

3.测试 logger

向系统中写入日志

logger -it "Test" -p cron.info "Testing cron log info"
选项作用
-i逐行记录一次logger的进程ID
-t指定标记记录
-p指定输入消息的优先级

四、本地日志管理

1. Cron日志管理

(1)修改rsyslog配置文件 /etc/rsyslog.conf,添加如下规则:

# Save cron log to /var/log/ftp.log
cron.*                                                   /var/log/cron.log

重启服务:# service rsyslog restart

2. FTP日志管理

(1)安装并启动vsftpd

# yum install vsftpd
# service vsftpd start

(2)修改vsftpd配置文件 /etc/vsftpd/vsftpd.conf

# 1.关闭 /var/log/xferlog 日志写入
xferlog_enable=NO
# 2.日志有rsyslog 进行管理,需要手动添加
syslog_enable=YES

重启服务:# service vsftpd restart

(3)修改rsyslog配置文件 /etc/rsyslog.conf,添加如下规则:

# Save ftp log to /var/log/ftp.log
ftp.*                                                   /var/log/ftp.log

重启服务:# service rsyslog restart

3. SSH日志管理

(1)修改sshd配置文件 /etc/ssh/sshd_config

 #把ssh所有日志信息存储到 local0 载体中
 SyslogFacility=local0

重启服务:# service sshd restart

(2)修改rsyslog配置文件 /etc/rsyslog.conf,添加如下规则:

# Save ssh log to /var/log/ssh.log
local0.*                                                   /var/log/ssh.log

重启服务:# service rsyslog restart

(3)验证,建立新的ssh连接

五、远程日志管理

将多台服务器的日志记录到Log Server中,方便统一分析和管理

要求:将Jump Server机器上的ssh日志远程到Log Server

环境:

主机IP
Client10.1.1.6
Jump Server10.1.1.66
Log Server10.1.1.88

① Log Server

修改rsyslog配置文件 /etc/rsyslog.conf,添加如下规则:

  • 开启514端口日志接收
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
  • 创建用于其他服务器推送日志的规则 local0.*
# Save ssh log to /var/log/ssh.log
local0.*                                                /var/log/ssh.log

检测是否开启成功

service rsyslog restart
netstat  -tunpl |grep 514

② Jump Server

(1)修改sshd配置文件 /etc/ssh/sshd_config

 #把ssh所有日志信息存储到 local0 载体中
 SyslogFacility=local0

重启服务:# service sshd restart

(2)修改rsyslog配置文件 /etc/rsyslog.conf,添加如下规则:

# Save ssh log to Log Server 10.1.1.88    by  TCP
local0.*                                                   @@10.1.1.88:514

注意:@@TCP @UPD

重启服务:# service rsyslog restart

③验证

Client ssh连接JumpServer ,然后去LogServer查看日志

# Save ssh log to /var/log/ssh.log
local0.*                                                /var/log/ssh.log

扩展:

多台服务器发送日志到LogServer,根据客户端主机名分别存放日志

(1)修改LogServer主机配置文件 /etc/rsyslog.conf

# Save client ssh log to /var/log/ssh-...  by different hostname
$template DynFile, "/var/log/ssh-%HOSTNAME%.log"
local0.*                                                ?DynFile

(2)验证

永久更改Jump Server主机名称:

# vim /etc/sysconfig/network
HOSTNAME=jumserver.tigeru.cn
# vim /etc/hosts
127.0.0.1 jumpserver.tigeru.cn

Client 重新ssh登陆Jump Server,然后再去Log Server查看是否有文件 /var/log/ssh-jumpserver.log

六、日志轮转

对日志进行分割

作用:方便查看,方便分类及整理

日志轮转工具logrotate

1.配置

配置文件: /etc/logrotate.conf

子配置文件:/etc/logrotate.d/syslog

参数描述
daily每天转存
monthly每月转存
weekly每周转存
create设置转存后文件的权限和属主属组
dateext使用日期做轮转之后的文件后缀名,不以日期做后缀 nodateext
compress压缩
minsize文件大于该值,且周期到了之后才会轮转;文件小于该值,不会进行轮转
size文件大小大于该值之后,直接论转,并且文件必须大于该值之后才能轮转
missingok如果日志文件不存在,不会报错
notifempty如果日志文件时空的,则不论转
delaycompress下一次轮转的时候才压缩
sharedscripts不管有多少文件待轮转,prerotate和postrotate 代码,只执行一次
prerotate论转之执行,prerotate和postrotate 之间代码
postrotate论转之执行 postrotate和endscript 之间代码

2.使用

在目录 /etc/logrotate.d/目录下创建子配置文件或者修改主配置文件 /etc/logrotate.conf

logrotate -f /etc/logrotate.conf

注意:需要结合计划任务实现定时分割

3.扩展 Apache 日志轮转

Apache 访问日志内容定制

①优雅重启

graceful:等待客户端正在进行的连接结束后再进行重启

mv access_log access_log.old
mv error_log error_log.old
apachectl graceful
sleep 600
gzip access_log.old error_log.old

②管道日志

使用rotatelogs进行日志切割,-l 参数表示使用本地系统时间为标准切割

86400 单位为秒,也就是24小时

ErrorLog "| /usr/local/apache2/bin/rotatelogs -l
/usr/local/apache2/logs/error_log-%Y%m%d 86400"
CustomLog "| /usr/local/apache2/bin/rotatelogs -l
/usr/local/apache2/logs/access_log-%Y%m%d 86400" common

七、扩展

last

查看用户登录历史,默认打印所有用户登录信息

打印某个用户登录信息:# last 用户名

选项描述
-x显示系统开关机以及执行等级信息
-a将登陆ip显示在最后一行
-f读取特定文件,eg: last -f /var/log/btmp
-d将IP地址转换为主机名
-n设置列出名单的显示列数
-t查看指定时间的用户登录历史 [-t YYYYMMDDHHMMSS]

lastb

列出登录系统失败的用户相关信息

lastlog

显示所有用户最近一次登录历史

Last modification:February 18th, 2019 at 10:54 pm