Linux-日志管理
Posted guardwhy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux-日志管理相关的知识,希望对你有一定的参考价值。
1.1 基本介绍
1、日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。
2、日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
3、日志是用来记录重大事件的工具。
1.2 系统常用的日志
1.2.1 查看系统日志
1、系统日志文件的保存位置:/var/log
2、系统常用的日志
日志文件 | 具体作用 |
---|---|
/var/log/boot.log | 系统启动日志 |
/var/log/cron | 记录与系统定时任务相关的日志 |
/var/log/cups/ | 记录打印信息的日志 |
/var/log/dmesg | 记录系统在开机时内核自检的信总,也可以使用dmesg命令直接查看内核自检信息 |
/var/log/btmp | 记录错误登录的日志,这个文件是二进制,不能直接用vi 查看,而要使用lastb 命名查看。命令如下[root@localhost log]#lastb |
/var/log/lasllog | 记录系统中所有用户最后一次的登录时间的日志,这个文件也是二进制文件,要使用lastlog 命令查看。 |
/var/Iog/mailog | 记录邮件信息的日志。 |
/var/log/message | 记录系统重要消息的日志,这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题,首先要检查的应该就是这个日志文件。 |
/var/log/secure | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户、sudo授权。甚至添加用户和修改用户密码都会记录在这个日志文件中。 |
/var/log/wtmp | 永久记录所有用户的登录,注销信息,同时记录系统的后动、重启、关机事件。是二进制文件,而要使用last 命令查看。 |
/var/tun/ulmp | 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息,这个文件不能用vi 查看,而要使用w、who、user等命令查看。 |
1.2.2 案例实现
使用 root 用户通过 xshell登陆, 第1、2次使用错误的密码,第3次使用正确的密码登录成功。
1、先进入log日志目录cd /var/log
,清空以前日志。。。
2、查看日志文件/var/log/secure 里有没有记录相关信息。
1.3 日志管理服务 rsyslogd
1.3.1 原理示意图
CentOS7.x日志服务是 rsyslogd
, CentOS6.x 日志服务是 syslogd
。rsyslogd
功能更强大,rsyslogd
的使用、日志文件的格式,和 syslogd
服务兼容的。
1.3.2 rsyslogd 相关概念
1、查询 Linux 中的 rsyslogd 服务是否启动。
ps aux | grep "rsyslog" | grep -v "grep" # grep -v 反向匹配
2、查询 rsyslogd 服务的自启动状态
systemctl list-unit-files | grep rsyslog
3、查看配置文件
more /etc/rsyslog.conf
编辑文件时的格式为: *.*
存放日志文件,其中第一个代表日志类型,第二个代表日志级别。
1.3.3 日志类型
参数 | 具体作用 |
---|---|
auth | pam 产生的日志 |
authpriv | ssh、ftp 等登录信息的验证信息 |
corn | 时间任务相关 |
kern | 内核 |
lpr | 打印 |
邮件 | |
mark(syslog)-rsyslog | 服务内部的信息,时间标识 |
news | 新闻组 |
uucp | unix to nuix copy 主机之间相关的通信 |
local 1-7 | 自定义的日志设备 |
1.3.4 日志级别
1、注意:从上到下,级别从低到高,记录信息越来越少。
参数 | 具体作用 |
---|---|
debug | 有调试信息的,日志通信最多。 |
info | 一般信息日志,最常用。 |
notice | 最具有重要性的普通条件的信息。 |
warning | 警告级别 |
err | 错误级别,阻止某个功能或者模块不能正常工作的信息 |
crit | 严重级别,阻止整个系统或者整个软件不能正常工作的信息 |
alert | 需要立刻修改的信息 |
emerg | 内核崩溃等重要信息 |
none | 什么都不记录 |
2、重点:由日志服务 rsyslogd 记录的日志文件,日志文件的格式如下:
- 事件产生的时间。
- 产生事件的服务器的主机名。
- 产生事件的服务名或程序名。
- 事件的具体信息。
1.3.5 日志查看实例
执行more /var/log/secure
命令,这个日志中记录的是用户验证和授权方面的信息。
1.3.6 案例说明
在/etc/rsyslog.conf
中添加一个日志文件/var/log/guardwhy.log
文件,当有事件发送时(比如 sshd 服务相关事件),该文件会接收到
信息并保存。
1、编写文件
vim /etc/rsyslog.conf
2、自定义日志
3、保存文件,重启系统
4、查看记录
1.4 日志轮替
1.4.1 基本介绍
1、日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。
1.4.2 日志轮替文件命名
1、centos7 使用 logrotate 进行日志轮替管理,要想改变日志轮替文件名字,通过 /etc/logrotate.conf 配置文件中dateext
参数。
2、如果配置文件中有dateext
参数,那么日志会用日期来作为日志文件的后缀,例如 secure-20201010
。这样日志文件名不会重叠,也就不需要日志文件的改名, 只需要指定保存日志个数,删除多余的日志文件即可。
3、如果配置文件中没有dateext
参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的secure
日志会自动改名为secure.1
,然后建secure
日志, 用来保存新的日志。当第二次进行日志轮替时,secure.1
会自动改名为secure.2
, 当前的secure
日志会自动改名为secure.1
,然后也会新建secure
日志,用来保存新的日志,以此类推。
4、查看boot.log日志轮替
1.4.3 logrotate 配置文件
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
# 包含 /etc/logrotate.d/ 目录中所有的子配置文件。也就 是说会把这个目录中所有子配置文件读取进来,
#下面是单独设置,优先级更高。
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly # 每月对日志文件进行一次轮替
create 0664 root utmp # 建立的新日志文件,权限是0664,所有者是root,所属组是utmp组
minsize 1M # 日志文件最小轮替大小是1MB,也就是日志一定要超过 1MB 才会轮替,否则就算时间达到一个月,也不进行日志转储。
rotate 1 # 仅保留一个日志备份。也就是只有 wtmp 和 wtmp.1 日志保留而已。
}
/var/log/btmp {
missingok # 如果日志不存在,则忽略该日志的警告信息。
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
参 数 | 参数说明 |
---|---|
daily | 日志的轮替周期是每天 |
weekly | 日志的轮替周期是每周 |
monthly | 日志的轮替周期是每月 |
rotate 数字 | 保留的日志文件的个数。0 指没有备份 |
compress | 日志轮替时,旧的日志进行压缩 |
create mode owner group | 建立新日志,同时指定新日志的权限与所有者和所属组。 |
mail address | 当日志轮替时,输出内容通过邮件发送到指定的邮件地址。 |
missingok | 如果日志不存在,则忽略该日志的警告信息。 |
notifempty | 如果日志为空文件,则不进行日志轮替。 |
minsize 大小 | 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替。 |
size 大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。 |
dateext | 使用日期作为日志轮替文件的后缀。 |
sharedscripts | 在此关键字之后的脚本只执行一次。 |
prerotate/endscript | 在日志轮替之前执行脚本命令。 |
postrotate/endscript | 在日志轮替之后执行脚本命令。 |
1.4.4 自定义日志加入日志轮替
1、方式一:
在/etc/logrotate.conf
配置文件中写入该日志的轮替策略。
2、方式二:
在/etc/logrotate.d/
目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被include
到主配置文件中,所以也可以把日志加入轮替。推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写 入/etc/logrotate.conf
配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。
3、执行命令cd /etc/logrotate.d/
,查看全部轮替文件。
1.4.5 案例说明
直接在 /etc/logrotate.d/
下创建文件 guardwhylog,执行命令vim guardwhylog
,具体轮替的效果 可以参考/var/log
下的 boot.log
。
/var/log/guardwhy.log
{
missingok
daily
copytruncate
rotate7
notifempty
}
执行结果
1.4.6 日志轮替机制
日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在 /etc/cron.daily/
目录,就会发现这个目录中是有 logrotate文件(可执行),logrotate
通过这个文件依赖定时任务执行的。
1.5 查看内存日志
1、常用命令
命令参数 | 参数说明 |
---|---|
journalctl | 可以查看全部内存日志,重启清空 |
journalctl -n 3 | 查看最新 3 条 |
journalctl --since 19:00 --until 19:10:10 | 查看起始时间到结束时间的日志可加日期 |
journalctl -p err | 报错日志 |
journalctl -o verbose | 日志详细内容 |
journalctl _PID=1245 _COMM=sshd | 查看包含这些参数的日志 |
2、案例说明
使用 journalctl | grep sshd
来看看用户登录清空, 重启系统
以上是关于Linux-日志管理的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情