日志格式:文本日志/二进制日志/数据库日志
默认的相关日志文件:
//tail -f 循环读取 #tail -f /var/log/boot.log 可以查看改变
/var/log/boot.log 系统引导日志,记录开机启动信息
/var/log/dmesg 核心的启动日志
/var/log/message 系统的日志文件
/var/log/maillog 邮件服务的日志
/var/log/xferlog ftp服务的日志
/var/log/secure 网络连接及系统登录的安全信息
/var/log/cron 定时任务的日志
last -f 查看. 这两个不能用cat
/var/log/wtmp 记录所有的登入和登出 #last -f /var/log/wtmp
/var/log/btmp 记录失败的登入尝试 #last -f /var/log/btmp
在RHEL6中,syslogd已经被rsyslog取代,它可以将日志写入数据库,并可以利用模板和插件控制输入输出。
rsyslog程序管理本地和远程日志
安装软件
根据需求修改配置文件
启动服务
测试验证
# man syslog
日志信息分为以下级别,从上到下级别依次降低
none none不是一个等级,它表示不记录服务的所有信息
0 emerg 系统不可用
1 alert 特别留意的报警信息
2 crit 非常严重的状况
3 err 错误信息
4 warning 警告信息
5 notice 稍微需要注意的信息
6 info 正常信息
7 debug 调试信息,开发人员使用
[root@server ~]# rpm -q rsyslog
rsyslog-5.8.10-8.el6.x86_64
[root@server ~]# rpm -ql rsyslog
/etc/logrotate.d/syslog
/etc/rc.d/init.d/rsyslog //启动脚本
/etc/rsyslog.conf //主配置文件
/etc/rsyslog.d //子配置文件
[root@server ~]# grep -v ^# /etc/rsyslog.conf //排除#开头的,即不看注释的
........ ❤记录日志要有设备载体去承载
*.info;mail.none;authpriv.none;cron.none /var/log/messages
表示所有服务>=info级别产生的日志,除了mail,authpriv,cron等日志都记录在存储在/var/log/message中
其实它是设备载体 mail,authprriv,none,cron。 除了xx的日志 在文档下面自己补充指定记录了
authpriv.* /var/log/secure
记录所有跟验证有关日志
mail.* -/var/log/maillog
记录所有跟邮件有关的日志信息
cron.* /var/log/cron
记录跟任务计划相关的日志
*.emerg *
把所有级别为emerrg的信息发送给所有登录到系统上的用户
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
记录所有跟启动相关的日志信息
........
1.日志定义相关符号
配置文件中常见的表示符合
. 用来分隔服务和级别
* 任何服务,或者任何级别
= 有等号表示等于某一级别,没有等号表示大于或者等于某一级别
! 排除操作,前面有相同服务的表达式,这个操作才有意义
代表从前面表达式所包含的内容中排除某些内容
; 用于分隔不同的 服务,级别,组合
, 用于分隔不同服务
- 用于指定目标文件时,代表异步写入 //不着急实时,等待一下再一起加
举例说明
mail.=info
mail.info mail服务大于等于info级别的日志 0123456
mail.info;cron.=info /var/log/test.log 邮件服务大于等于info级别,计划任务等于info级别,存储在test.log
mail,cron.err 表示邮件服务和计划任务的大于等于err级别
cron.=warning
mail,cron.info
cron.info;cron.!=err
0123456 0124567 两个取交集,012456
cron.info;cron.!err 456
0123456 4567
❤特别说明:
man rsyslog.conf
The facility is one of the following keywords: auth,
authpriv, cron, daemon, kern, lpr, mail, mark, news,
security (same as auth), syslog, user, uucp and
local0 through local7.(设备载体)
log facility 设备 设施:用来记录一种类型日志的日志设备
载体设备有:
daemon
auth
authpriv
user
mail
lpr
news
uucp
ftp
local0-7
需求1:将本地邮件服务的日志记录到/var/log/test_mail.log里
思路:
软件安装
修改配置文件
启动服务测试验证
环境:
log-server:10.1.1.2 mail服务
步骤:
1.修改配置文件
#cp /etc/rsyslog.conf /etc/rsyslog.conf.bak
#vim /etc/rsyslog.conf
....
注释掉 mail.* 是因为会浪费资源,只要记录自己想要的就OK。 如果不注释,再写一条。那么两个都会记录的。
写一条:mail.info 表示mail服务大于等于info级别的日志
mail.info /var/log/test_mail.log
2.启动服务
#service rsyslog restart
3.测试验证
同时开两个窗口
1)发送一封邮件
第一个窗口:#tail -f /var/log/test_mail.log
第二个窗口:
#echo hahah | mail -s "test mail log" linux123 //邮给linux123 这个人,-s是指定主题
#cat /var/spool/mail/linux123
❤需求2:把ssh的日志指定记录到/var/log/ssh下
思路:
1.更改ssh服务的默认日志记录载体(在ssh服务完成,修改ssh服务的配置文件)
2.通过rsyslog程序去管理来自指定设备载体的日志记录到指定的文件(修改/etc/rsyslog.conf)
3.测试验证
步骤:
man sshd_config 查看支持的载体
1.修改ssh服务的默认的日志载体 (ssh服务是默认记录在 AUTHPRI载体上,这个载体还有记录其他服务)
(根据需求是要 把ssh的日志记录单独取出来,因此要单独一个载体来记录ssh服务)
#cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
#vim /etc/ssh/sshd_config
SyslogFacility LOCAL6 //选择LOCAL6 作为ssh服务的设备载体 去 记录日志。
2.重启sshd服务
#service sshd restart
3.将来自LOCAL6设备载体的日志记录到指定位置 (由rsyslog完成)
#cp /etc/rsyslog.conf /etc/rsyslog.conf.bak
#vim /etc/rsyslog.conf
...
local6.* /var/log/ssh 表示记录到这去
...
~~~~~~~~~
//如果不想记录到/messages,可修改/etc/rsyslog.conf,添加local6.none,则不再显示ssh的日志
*.info;mail.none;authpriv.none;cron.none;local6.none /var/log/messages
~~~~~~~~~
4.重启rsyslog服务
#service rsyslog restart 重启服务
5.测试验证
服务端两个窗口
#tail -f /var/log/messages
和
#tail -f /var/log/ssh
客户端
#ssh 10.1.1.2
目的:把多台服务器的日志远程记录到其中一台日志服务器集中化管理,方便对其统一分析和管理
环境:
log-server:10.1.1.2
web应用服务器:10.1.1.3
ssh服务 ——》其他人远程访问该web应用服务器 ——》产生ssh服务日志 ——》远程记录到log-server上
client:10.1.1.4 —— 我用XSHELL
ssh 10.1.1.3 ——》日志记录10.1.1.2
需求:把web服务器上的ssh的服务日志,远程记录到log-server上
思路:
以下2步在web应用服务器上操作:
ssh默认是没有单独记录的
(ssh服务是默认记录在 AUTHPRI载体上,这个载体还有记录其他服务)
(根据需求是要 把ssh的日志记录单独取出来,因此要单独一个载体来记录ssh服务)
1.将web服务器上的ssh服务的日志单独记录,
指定ssh服务的设备载体
重启服务sshd
2.将来自于ssh服务的日志设备载体上的日志远程发送到log-server
以下操作在log-server上完成
1.修改配置文件打开日志传输的接收端口
加载模块 tcp | udp
打开接收端口 默认514端口
2.启动服务后日志默认会保存到/var/log/messages
步骤:
❤以下操作在log-server(10.1.1.2)服务完成:
1.加载相应的模块打开接收端口
#vim /etc/rsyslog.conf
# Provides UDP syslog reception //加载UDP协议的模块,端口514
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception //加载TCP协议的模块,端口514
$ModLoad imtcp
$InputTCPServerRun 514
2.重启rsyslog服务
#service rsyslog restart
#netstat -nltup|grep 514 //验证
_________________
以下操作在应用服务器(10.1.1.3)服务完成:
1.指定ssh服务的日志文件的设备载体
#vim /etc/ssh/sshd_config
...
SyslogFacility LOCAL0
2.重启ssh服务
#service sshd restart
3.修改/etc/rsyslog.conf文件来指定ssh服务的日志发送到远端去
#vim /etc/rsyslog.conf
...
local0.* @10.1.1.2:514 //一个@代表UDP协议传输;两个@代表TCP协议传输
4.重启rsyslog服务
#service rsyslog restart
测试验证:
log服务器:#tail -f /var/log/messages
web服务器:#tail -f /var/log/messages
❤(不想让应用服务器记录就在应用服务器修改/etc/rsyslog.conf,将local0.none加在/var/log/messages那行里)
客户端:ssh 10.1.1.3
________________________
在上面配置的基础之上,再增加
❤远程日志单独保存 ( 不同服务器,各自保存不同,根据主机名 )
学完全部来补充,转到log服务器上 也能进行 转存的
log 服务器:
#man 5 rsyslog.conf 查看模板怎么使用
/temp 找到$template DynFile,"/var/log/system-%HOSTNAME%.log"
#vim /etc/rsyslog.conf 增加模板,然后调用模板
$template DynFile,"/var/log/system-%HOSTNAME%.log"
local0.* ?DynFile
解释:来自于local0设备上的日志 会调用DynFile模板,模板会放到/var/log/system-主机名.log
这样就实现了单独保存,
验证:
log 服务器
#cd /var/log 先确保没有主机名的日志
#service rsyslog restart //client ssh连接
#ll
#tail -f system-ssh-server.log
复习:修改配置文件,指定保存到哪,得放在一个地方,这个地方称为 日志的设备载体,设备载体 有定义的那么几个载体, 一般情况,有一些比较常见的服务。 邮件服务 对应设备载体是 mail,计划任务 对应的设备载体cron
用rsyslog管理日志,就得有设备载体,无非就两个步骤
1.更改ssh服务的默认日志记录载体(在ssh服务完成,修改ssh服务的配置文件)
2.通过rsyslog程序去管理来自指定设备载体的日志记录到指定的文件(修改/etc/rsyslog.conf)
载体设备有以下等等:
daemon
auth
authpriv
user
mail
lpr
news
uucp
ftp
local0-7
日志轮训(轮转):日志轮转,切割,备份,归档
为什么要日志轮转?
避免日志过大占满/var/log的文件系统
方便日志查看
将丢弃系统中最旧的日志文件,以节省空间
日志轮转的程序是logrotate
logrotate本身不是系统守护进程,它是通过计划cron每天执行
如何进行日志轮转?
了解相关配置文件
#rpm -q logrotate
#rpm -ql logrotate
/etc/cron.daily/logrotate 周期性计划任务
/etc/logrotate.conf 配置文件
/etc/logrotate.d 子配置文件存放路径
★/etc/logrotate.conf 配置文件
#cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs 保留4周备份日志
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file 日期作为后缀给旧文件重命名
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d 加载外部目录
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1 保留1份日志文件,每一个月备份一次日志文件
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
常见的一些参数:
daily 指定转储周期为每天
monthly 指定转储周期为每月
weekly 每周轮转一次
rotate 4 同一个文件最多轮转4次,4次之后就删除该文件
create 0664 root uttmp 轮转之后创建新文件,权限是0664,属于root用户和utmp组
dateext 用日期来做轮转之后的文件的后缀名
compress 用gzip对轮转后的日志进行压缩
minsize 30K 文件必须大于30k,且周期到了,才会轮转
size 30K 文件大于30k才会轮转,不论周期是否已到
missingok 如果日志文件不存在,不报错
notifempty 如果日志文件是空的,不轮转
delaycompress 下一次轮转的时候才压缩
sharedscripts 不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
prerotate 如果符合轮转的条件,则在轮转之前执行prerotate和endscript之间的shell代码
postrotate 轮转完成后执行postrotate和e
★/etc/logrotate.d
[root@server~]# cat /etc/logrotate.d/syslog
这个子配置文件,没有指定的参数都会以默认方式轮转
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts 不管有多少个文件待轮转,prerotate和postrotate代码只执行一次
postrotate 转换完后执行postrotate和endscirpt之间的shell代码
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
轮转后对rsyslog的pid进行刷新(但pid其实不变) || 或关系
endscript
}
需求1:ssh服务的日志单独保存到了/var/log/ssh里,如任何进行轮转?
要求:
1.每天进行轮转,保留5天的日志文件
2.日志文件大小大于5M进行轮转
思路:
1.修改logrotate程序的主配置文件 增加/var/log/ssh文件的轮转
或者
2.在/etc/logrotate.d/目录创建一个文件
步骤:
方法1:修改主配置文件 (上部分配置日志,下部分配置轮转)
#vim /etc/ssh/sshd_config
...
SyslogFacility LOCAL6
...
#vim /etc/rsyslog.conf
...
local6.* /var/log/ssh
下部分:
#vim /etc/logrotate.conf
...
/var/log/ssh {
missingok //报错也不警告
daily
rotate 5
size 5M
create
}
#cd /var/log
#find ./ -type f -delete
#service rsyslog restart //重启服务是想生成日志文件,轮转日志是没服务的
#logrotate -f /etc/logrotate.conf //强制轮转
方法2:创建子配置文件 (上部分跟方法1一样,下部分)
要清空之前的配置过的文件
vim /etc/logrotate.conf 清空配置过的
#cd /etc/logrotate.d
#vim ssh
...
/var/log/ssh {
missingok //报错也不警告
daily
rotate 5
size 5M
create
nodateext //不以日期作为后缀,因为全局是以日期作为后缀
}
#cd /var/log
#find ./ -type f -delete
#service rsyslog restart //重启服务是想生成日志文件,轮转日志是没服务的
#logrotate -f /etc/logrotate.conf //强制轮转
只有ssh设置了不以日期作为后缀, 可以看到 ssh.1
作业1:将authpriv设备日志记录到/var/log/auth.log
#vim /etc/rsyslog.conf
...
authpriv.* /var/log/auth.log
...
作业2:改变应用程序sshd的日志设备为local5,并定义local5设备日志记录到/var/log/local5.local
#vim /etc/ssh/sshd_config
SyslogFacility LOCAL5
#vim /etc/rsyslog.conf
local5.* /var/log/local5.local
#service rsyslog restart
作业3:
要求如下:
1.记录所有日志类型的info级别以及大于info级别的信息,保存到/var/log/test,但是mail邮件信息,authpriv验证方面的信息和cron时间任务相关的信息除外
#vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none;local0.none /var/log/test
2./var/log/test日志轮询方式为: ·指定新日志记录,默认是不会轮转的,设置轮转(1.2方法)
1>每天轮询一次
2>保留4个文件
3>以时间命名(默认)
4>创建与原日志同名的新文件
/var/log/test {
daily
rotate 4
create //新建的没有加时间后缀
}
方法1:vim /etc/logrotate.conf
或
方法2:vim /etc/logrotate.d/test
补充: /etc/logrotate.conf 对应的 /var/log/message 要删掉 或者 补 missingok 。 因为轮转时 已经不存在,不然会报错
-HUP 是平滑重启的意思
为什么要这么去做?
在Linux系统中,系统并不是按照文件名寻找,而是按照 inode号寻找文件的
重启服务创建新文件,inode会变
准备环境:
不以时间作为后缀去轮转
#vim /etc/logrotate.conf
#cd /var/log/
#find ./ -type f -exec rm -f {} ;
#rm -f /etc/logrotate.d/ssh
#serrvice rsyslog restart
#tail -f /var/log/messages
#logger -t “哈哈” “你好”
#vim /etc/logrotate.d/syslog 刷新之前再写一个,ta 就会写到旧文件里
#logrotate -f /etc/logrotate.conf //指定文件轮转 ,PID会改变
轮转之后会发现,会增加messages新文件。 message.1就是刚刚的message
呵呵,再见会在 老文件 message.1
结论1: 先写日志再刷新PID;刷新之前写的日志文件是老的日志文件。