linux常用的系统日志
/var/log/audit/audit.log
1.记录系统内核、内核、用户进程的行为事件
2.是 Linux 安全体系的重要部分
3.比 message 记录更详细的信息,可以
(1)查看文件权限
(2)监控系统调用
(3)记录用户指令
(4)记录系统安全事件
(5)监控网络访问
/var/log/cron
1.记录 crontab 执行情况
2.crontab 误删后可以根据日志快速回复命令及调度周期
3.系统被植入恶意定时任务,通过日志内容确定受影响时间段,从而对症下药
/var/log/dmesg
1.记录系统开机时,内核自检信息
2.可以用 dmesg
命令查看
/var/log/messages
记录内核消息及各种应用程序的日志信息,包括:启动、IO 错误、网络错误、程序自定义日志等
/var/log/secure
1.系统安全日志,记录用户登录认证情况,如 pop3、ssh、telnet、ftp 等记录
2.只要涉及到需要账号密码的操作,不管成功与否都会记录
/var/log/boot.log
记录开机自检过程显示的信息
/var/log/btmp
1.记录登录失败的用户信息、时间及远程 ip
2.通过 lastb
命令查看内容
/var/log/lastlog
1.记录最后一次登录的时间、IP 等信息
2.用 lastlog
命令查看,会根据 UID 排序显示
/var/log/maillog
记录邮件收发详细信息
/var/log/wtmp
1.永久记录每个用户登录注销及系统启动停机事件
2.log 文件无法直接打开查看,用 last
命令查看文件信息
/var/run/utmp
1.记录当前登录的用户信息
2.文件不能直接打开查看,原理可执行命令查看 man utmp
3.查询当前用户信息的命令执行结果就从这个 log 中取得,如:who/w/users
关于linux日志的命令
Journalctl
Systemd是Linux发行版的初始化系统,负责启动系统后的所有服务,并监视它们在系统运行期间的状态。Journal是Systemd的一部分,主要负责收集和存储日志数据。
journalctl是Journal的主要接口,提供丰富的功能来检索和显示日志条目。它能从磁盘上的二进制文件或者其他传输目标(如syslog)获取日志。
基础使用
查看所有日志:(分页输出)
journalctl
按时间倒序查看所有日志
journalctl -r
查看最新的10条日志:
journalctl -n 10
实时查看新添加的日志条目
journalctl -f
过滤日志条目
根据服务名称过滤:
journalctl -u nginx
根据进程ID过滤:
journalctl _PID=2001
根据优先级过滤(0-7,0表示最重要)
journalctl -p err -b
时间戳和日志轮转
对于大型系统,日志文件可能会非常大。为了解决这个问题,journalctl提供了日志轮转和时间戳功能。
日志轮转是一个过程,其中旧的日志条目被删除以释放空间给新的日志条目。默认情况下,Journal将根据配置在/var/log/journal中保存日志文件,并在磁盘空间不足时执行日志轮转。
时间戳允许你查找特定时间范围内的日志条目。例如:
journalctl --since="2021-07-01" --until="2021-07-31 03:00"
日志显示不全处理办法:
journalctl -u mysqld |vim -
logrotate
日志每天切割:
11># cat audit
/var/log/audit/audit.log {
su root root
daily
missingok
rotate 32
compress
delaycompress
dateext
copytruncate
}
12># cat nginx_access
/data/wwwlogs/clubmed2488.clubmedmnp.com_nginx.log {
su root root
daily
missingok
rotate 32
compress
delaycompress
dateext
copytruncate
}
su root root: 指定 logrotate 在执行轮转操作时使用的用户和组
daily: 指定日志文件每天轮转一次。
missingok: 如果指定的日志文件不存在,logrotate 不会报错并继续执行其他任务
rotate 32: 指定保留的旧日志文件数量。
compress: 轮转后的日志文件将被压缩,通常使用 gzip 压缩。
delaycompress: 延迟压缩。这意味着当前的日志文件在下一次轮转时才会被压缩
dateext: 使用日期作为扩展名来命名轮转后的日志文件
copytruncate: 先复制当前的日志文件,然后清空原日志文件。这种方法可以确保应用程序在日志文件被轮转后仍然可以继续写入日志,而不会丢失任何数据。
日志大小切割:
vim /etc/logrotate.d/catalinacut #配置个新的logrotate文件名字叫catalinacut
/opt/tomcat/apache-tomcat-9.0.96/logs/catalina.out日志文件位置 {
rotate 10
missingok
dateext
size 10G
copytruncate
}
=====说明=====
rotate 10 # 保留最近10个切割后的日志文件
missingok # 如果日志文件丢失,不报错
dateext # 切割后的日志文件以日期为后缀
size 10G # 当日志文件大小超过10G时切割
copytruncate # 拷贝并截断原日志文件(适用于仍在写入的日志文件)
=====说明=====
crontab -e
0 1 * * * /usr/sbin/logrotate -f /etc/logrotate.d/catalinacut
corntab -l
0 1 * * * /usr/sbin/logrotate -f /etc/logrotate.d/catalinacut
logrotate所有参数释义:
压缩
compress:使用压缩,默认的压缩方式为 gzip
compresscmd:自定义压缩的命令,默认压缩方式为 gzip
uncompresscmd:自定义解压的命令,默认解压工具为 gunzip
compressext:压缩时使用后缀,默认 gzip 压缩格式下后缀为 .gz
compressoptions:压缩选项,默认使用 gzip;如果使用其他压缩选项,需要设置 compressoptions 与之匹配
delaycompress:延迟压缩,实际压缩生效的时间发生在下一次日志切割之时
nodelaycompress:不使用延迟压缩,即轮转时压缩(默认配置)
nocompress:不实用压缩
归档方式
copy:轮转时复制完整的日志文件,常用来做当前日志文件的镜像备份。当指定 copy 选项时, create 选项会失效
copytruncate:轮转时复制完整的日志文件并清空原来的日志文件(相当于 echo > logfile),新写入的日志会继续往清空后的日志文件中写入。但在日志 copy和 truncate 的过程中写入的日志可能会丢失。当指定 copytruncate 选项时,create 选项会失效
nocopy:轮转时不会复制原日志文件
nocopytruncate:轮转时复制原日志文件后不会清空原日志文件的内容
create:轮转时创建一个新的日志文件,可以设置创建文件的权限、所有者、及属组
nocreate:轮转时不会创建新的日志文件
createolddir:轮转时如果指定的目录不存在,则会创建,支持设置目录的权限、所有者和属组
nocreateolddir:轮转时指定的目录不存在时不会进行创建
归档路径
olddir directory:配置目录后,轮转后的日志会保存在指定的目录下
noolddir:轮转后的日志保存在日志原有的目录下
归档删除
shred:删除日志时使用 shred -u(粉碎式删除) 的方式(默认关闭)
shredcycles count:删除日志前会先重写覆盖日志文件,达到设定的次数后才进行删除
noshred:删除日志时使用 unlink 的方式删除(还没搞懂这个删除逻辑)
归档规则
hourly:每小时进行一次日志切割
daily:每天进行一次日志切割
weekly:每周进行一次日志切割
monthly:每月进行一次日志切割
yealy:每年进行一次日志切割
size:按日志大小进行切割
rotate count:日志轮转时保存的归档文件数量
start count:日志轮转时从指定的count开始,例如,start 9,则日志轮转后会跳过 0-8 生成 xxx.9 这样的日志,
maxage count:轮转后的日志超过设定的日期会被删除,只有被轮转的日志才会应用到此规则
maxsize size:设置maxsize后,如果被轮转的日志大小超过设置的 size,则会在设置的轮转时间(例如:weekly)之前进行日志轮转
minsize size:设置minsize后,如果被轮转的日志大小不满足设置的size,即便到了设置的轮转时间也不会触发日志轮转
日期格式
dateext:切割后日志的后缀名以 "YYYYMMDD" 为格式
nodateext:轮转日志时不使用后缀名为日期的格式
dateformat:自定义日志后缀的时间格式,仅 %Y %m %d %H %s 可以被使用。 例如 dateformat %m/%d/%Y
dateyesterday:切割日志时使用昨天的时间而不是今天的时间
extension:日志文件在轮转后使用指定的 ext 扩展名。如果使用压缩,通常ext还会加上压缩文件的扩展名,通常是 .gz。例如,你有一个日志文件名为 mylog.foo,你可以通过 extension ext 将日志轮转为 mylog.1.foo.gz 而不是 mylog.foo.1.gz
轮转规则
ifempty:日志为空时也会按照规则进行轮转
notifempty:日志为空时不进行轮转
missingok:轮转的日志不存在时,继续下一个日志的轮转,不会报错
nomissingok:轮式时日志不存在,会有报错提示 (默认配置)
邮件配置
mail address:配置邮件地址后,会将轮转的日志信息发送到邮箱
nomail:不发送轮转的日志信息到任何邮箱 (默认配置)
mailfirst:配置邮箱后,轮转后将本次生成的日志文件发送到邮箱
maillast:配置邮箱后,将上一次轮转的日志文件发送到邮箱 (默认配置)
归档时执行的脚本
include file_or_directory:轮转前会尝试读取 include 配置的文件或目录,如果配置的是目录,则目录下的所有文件都会被加载到轮转的配置中;但对于文件扩展名以 taboo 结尾的文件或配置路径为多个目录、管道等时,加载配置时会被忽略
prerotate/endscript:日志轮转前会执行自定义的命令(脚本)。通常,轮转的日志的完整路径会作为传入的第一个参数
postrotate/endscript:日志轮转后会执行自定义的命令(脚本)。通常,轮转的日志的完整路径会作为传入的第一个参数
firstaction/endscript:执行 prerotate/endscript 前且最少一个日志会被轮转时执行该语句,整个模式会作为第一个参数传递给该语句,当语句执行异常时,不会再向下执行
lastaction/endscript:执行 postrotate/endscript 前且最少一个已经被轮转后执行该语句,整个模式会作为第一个参数传递给该语句,当语句执行异常时,仅仅展示错误信息
preremove/endscript:仅仅当删除轮转过的日志前执行该语句。即将被删除的日志名会作为参数被传递进该语句
sharedscripts:共享模式。启用共享模式后,当 prerotate 和 postrotate 语句执行时匹配到多个日志时,prerotate 和 postrotate 语句仅仅只会执行一次。正常模式下,轮转时匹配到的每个日志文件都会单独执行一次 prerotate 和 postrotate 语句。
nosharedscripts:轮转时匹配到多个日志文件时,每个日志文件都会执行一次 prerotate 和 postrotate 语句。(默认配置)