一、日志
保存程序的运行状态,错误信息,访问记录等,以文本文件形式保存
可以通过日志对系统进行分析,及错误定位
日志类型:内核信息、服务信息、应用程序信息
存放位置一般放在
/var/log/
,一般用后缀.log
表示日志文件动态查看日志文件:
tail -f
常见日志文件:
文件 | 描述 |
---|---|
/var/log/messages | 系统日志文件 |
/var/log/secure | 系统安全日志文件 |
/var/log/cron | 计划任务日志 |
/var/log/dmesg | 核心的启动日志(硬件相关) |
/var/log/boot.log | 系统引导日志,记录开机启动信息 |
/var/log/xferlog | ftp服务的日志(上传和下载文件) |
/var/log/maillog | 邮件服务的日志 |
/var/log/wtmp | 记录所有的登入和登出查看:last -f 文件名 |
/var/log/btmp | 记录失败的登入提示 |
二、日志格式
Facility.Priority Target
手册:# man syslog
1. Facility
日志来源,要记录那个服务的日志)
Facility | 描述 |
---|---|
kern | 内核消息 |
user | 用户级消息 |
邮件系统消息 | |
daemon | 系统服务消息 |
auth | 认证系统消息 |
syslog | 日志系统自身消息 |
lpr | 打印系统消息 |
authpriv | 权限系统消息 |
cron | 定时任务消息 |
news | 新闻系统消息 |
uucp | uucp系统消息 |
ftp | ftp服务消息 |
local0~local7 | 自定义消息,保留给本机用户使用 |
2. Priority
日志级别,要记录的日志内容,eg:错误日志、警告日志等
从下到上,级别越来越高
编号 | 日志级别 | 描述 |
---|---|---|
0 | emerg | 系统不可用 |
1 | alert | 特别留意的报警信息,需要马上处理 |
2 | crit | 非常严重的情况 |
3 | err | 错误信息 |
4 | warning | 警告信息 |
5 | notice | 稍微需要注意的信息 |
6 | info | 正常信息 |
7 | debug | 调试信息 |
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/test | mail和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 |
---|---|
Client | 10.1.1.6 |
Jump Server | 10.1.1.66 |
Log Server | 10.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 日志轮转
①优雅重启
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
显示所有用户最近一次登录历史