不管是任何操作系统,编程语言,中间服务件还是网络设备在出现各种问题的时候大多数都会依赖日志来判断问题的根源,而且重要的服务器上还会建立日志备份服务器,例如信息安全等级保护来说,所有的安全设备以及服务器的日志必须保存半年以上,由此可见日志有多重要了吧!
1.日志服务启动
ps aux | grep rsyslogd #查看服务启动
chkconfig --list | grep rsyslog #查看服务是否自启动
2.常见的日志
/var/log/messages为服务器最核心的系统日志,该日志并不专门记录特定服务相关的日志,一般,后台守护进程(如crond)会把执行日志打印到此文件,查看
此文件可以使用文本编辑器或文本查看命令,如cat、head或tail等。
/var/log/dmesg 记录系统开机内核自检信息
/var/log/wtmp、/var/log/btmp、/var/log/lastlog这3个日志文件记录了关于系统登录和退出信息。其中wtmp 查查用户的登录、注销、同时记录系统的启动、重启、关
机等信息。btmp不能用 cat/vim查看,需要使用 lastb查看。utmp记录当前登录用户的信息。用户登录和退出的记录保存在wtmp文件中,各个用户最后一次登录的日志可以
使用lastlog查看。lastlog也是用lastlog查看
/var/log/maillog 记录邮件相关日志,比如发给了哪个,是否发出去了。
/var/log/cron 记录系统定时任务的相关日志。
/var/log/secure 记录了系统的登录行为,通过此日志可以分析异常的登录请求,可以使用文本查看相关的命令。
/var/log/cups 记录打印信息的日志
/var/log/boot.log 记录的Linux 系统在引导阶段发生的事件,也就是说系统开机自检过程中产生的日志
/var/log/syslog 它只记录警告信息,常常是系统出问题的信息
/var/run/utmp 该日志文件记录有关当前登录的每个用户的信息
/var/log/xferlog 该日志文件记录FTP会话,可以显示出用户向FTP服务器或从服务器拷贝了什么文件
/root/install.log:存储了安装系统中的软件包以及其版本信息
/root/install.log.syslog:存储了安装过程中留下的事件记录
/root/anaconda-ks.cfg:以kickstart配置文件的格式记录安装过程中设置的选项信息(kickstart配置文件是配置多台服务器需要参考的文件)
3.日志文件格式
基本日志格式包含:
事件产生的时间,发生事件的服务器的主机名,产生时间的服务名或程序名,事件的具体信息
/etc/rsyslog.conf配置文件格式 #系统默认日志等级,可以根据实际情况自定义等级和位置
配置文件例如:
authpriv.* /var/log/secure
#服务名称[连接符号] 日志等级 日志记录位置
#下方附上常用的服务名称/连接符号/日志等级等
常见服务名称 | 说明 |
auth | 安全和认证相关消息(不推荐使用authpriv替代) |
authpriv | 安全和认证相关消息(私有的) |
cron | 系统定时任务cront和at产生的日志 |
daemon | 和守护进程产生的日志 |
ftp | ftp守护进程产生的日志 |
kern | 内核产生的日志(不是用户进程产生的) |
local0-local7 | 为本地使用预留的服务 |
lpr | 打印产生的日志 |
| 邮件收发信息 |
news | 与新闻服务器相关的日志 |
syslog | 有syslog服务产生的日志 |
user | 用户等级类别的日志信息 |
uucp | uucp子系统的日志信息 |
连接符号 | 说明 | 举例 |
* | 代表所有的日志等级 | authpriv.* |
. | 代表只要比后面的等级高的日志都记录 | cron.info日志级别大于info都记录 |
.= | 代表制记录所需等级的日志,其他等级的都不记录 | *.=emerg |
.! | 除了该等级的都记录 |
日志等级 | 等级级别 | 说明 |
debug | 1 | 一般的调试信息说明 |
info | 2 | 基本的通知信息 |
notice | 3 | 普通信息,但是有一定的重要性 |
warning | 4 | 警告信息,但是不影响到服务的运行 |
err | 5 | 错误信息,影响服务运行 |
crit | 6 | 临界状况信息,比err严重 |
alert | 7 | 警告状态,比crit严重,必须立即采取行动 |
emerg | 8 | 疼痛等级,系统已经无法使用 |
日志记录方式 | 举例 |
绝对路径方式 | /var/log/secure |
系统设备文件 | /dev/lp0 |
转发远程主机 | @102.0.0.1:111 |
发给某个用户 | root |
忽略日志 | ~ |
4.日志的分割和轮换(切割和覆盖)
如果不对生成的日志做优化处理,存储的日志保存在一个位置会越来越大,打开看的时候不容易查找相应的日志信息,所以要对日志进行一系列处理。例如大型企业的IPS或者防火墙来说,每天少说有几万甚至几十万行日志,出了问题用上二郎神的眼睛也未必能立马找到问题所在,所以。。。
分割:将日志按时间分割,便于查找日志
轮换:将日志按指定的时间覆盖,新日志覆盖旧日志,以节省空间 #源码包安装的需要修改配置文件才能轮替
5.日志管理工具(logrotate、swatch、logcheck)
logrotate:linux系统自带的日志管理工具,用于分割,压缩,删除日志
/etc/logrotate.conf #主配置,下图1
/etc/logrotate.d/ #子配置,按照应用来分,每行对应一个文件,点进去就能看到,下图2
一般情况下日志要记录的话有两种情况,第一是自动触发,意思就是写好配置,等待规定的时间或其他要求到了之后才记录日志,第二种是手动触发,意思就是不管有没有达到记录日志的时间或者其他规定都会记录日志。
自动触发:
vim /etc/logrotate.conf
在下方添加:
asr/local/apache2/logs/message_log{
daily
create
rotate20
}
如下图:
手动触发:用logrotate命令来触发
root@kali:~# logrotate --help
Usage: logrotate [OPTION...] <configfile>
-d, --debug Don't do anything, just test and print debug messages
-f, --force Force file rotation #强制执行轮替,忽略配置文件设置的条件
-m, --mail=command Command to send mail (instead of `/usr/bin/mail')
-s, --state=statefile Path of state file
-v, --verbose Display messages during rotation #显示日志轮替过程
-l, --log=logfile Log file or 'syslog' to log to syslog
--version Display version information
例如:logrotate -f /etc/logrotate.conf
最下方附上logrotate.conf配置文件的主要参数。
logrotate配置文件常用参数 | 说明 |
compress | 启用压缩,指的是轮替后的旧日志,这里默认用的是gzip压缩的 |
compressoptions | 以gzip -9的模式压缩 |
uncompresscmd | 解压日志,默认是gunzip |
daily | 每天轮替选项 |
dateext | 轮替的日志文件会附加上一个短横线和YYYYMMDD格式的时间戳 |
delaycompress | 将以前的日志文件压缩推迟到下一次轮替 |
ifempty | 即使日志文件是空的也轮替 |
| 将轮替后的文件发送到指定E-mail地址 |
copytruncate | 用于还在打开中的日志文件,把当前日志备份并截断,开始轮替 |
mailfirst/maillast | 向邮件发送轮替文件/轮替后历史文件(默认) |
monthly | 一个月轮替一次 |
nocompress | 如果在logrotate.conf中启用了压缩,这里是做不用压缩的参数 |
nomail | 不发送邮件到任何地址 |
ifempty | 如果日志时空的就不轮替 |
olddir directory | 轮替后日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 |
postrotate/endscript | 在做完轮替后的命令,两个关键字必须单独成行,使用的操作在2者之间相当于分组“{}”,注意的使用外部指令时要用绝对路径 |
prerotate/endscript | 在做轮替前的命令,同上 |
rotate count | 轮替最多保留之前的数据几次,超出的将被删除或邮件接收,设为0则不保存 |
size size | 当日志增长到指定大小的时候开始轮替,它不会考虑 |
start count | 轮替文件名基于这个数字。 例如,指定0时,原日志文件轮替的备份文件以.0为扩展名,如果指定9,就直接从.9开始跳过0-8 然后再继续向后轮替rotate指定的次数。 |
weekly | 如果当前的星期几比上次轮替的星期几少,或者过了一个多星期,就会发生轮替通常是在每周的第一天轮替,如果logrotate不是每天运行的,会在第一次有机会时进行轮替。 |
yearly | 如果当前年份不同于上次轮替的年份,则进行日志轮替 |
create mode owner group | 在轮替动作之后,postrotate脚本执行之前,立即使用刚轮替的日志文件名创建日志文件。 MODE 指定日志文件的权限(0660之类) OWNER 指定日志文件的属主 GROUP 指定日志文件的属组 |
extension ext | 日志文件可在轮替后使用指定的EXT扩展名。如果使用压缩,通常EXT后还会加上压缩文件的扩展名,通常是.gz。例如想把mylog.foo轮转为mylog.1.foo.gz而不是mylog.foo.1.gz |