日志管理
日志文件:系统中各个运行消息的文件,不同的日志文件记录了不同类型的信息,如内核消息、错误消息等
syslog服务:
syslogd: 系统,非内核产生的信息
klogd:内核,专门负责记录内核产生的日志信息
一.分析日志文件
通过浏览日志查找关键信息,对系统服务进行调试
判断故障发生的原因
1. 分类
1)内核及系统日志:数据由系统服务rsyslog统一管理可以根据主配文件/etc/rsyslog.conf中的设置决定内核消息及其各种系统消息的记录位置
2)用户日志:数据用于记录系统用户登录及其退出系统的相关信息,包括用户名、登录终端、登录时间、来源、使用的进程等等
3)程序日志:应用程序自己独立管理的一个日志,记录程序本身运行过程中的各种事件信息
2. 内核和系统日志
/etc/rsyslog.conf
日志服务配置文件
主配文件使用(举例):
mail.notice
服务 级别
/var/log/messages
内核和大多数系统消息日志位置
每一行的消息内容:
时间:消息发出的时间和日期
主机名:生成消息的计算机的名称
子系统的名称:发出消息的应用程序的名称
消息内容:消息的具体内容
3. 用户日志和程序日志
查询当前登录的用户情况:users,who,w
查询用户登录的历史记录:last,lastb
查看安全日志文件:/var/log/secure
程序日志:
如:httpd
服务的日志文件access_log
和error_log
分别记录客户访问事件和错误信息
4. 常见日志文件
/var/log/boot.log
:记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息
/var/log/messages
:记录Linux操作系统常见的系统和服务错误信息
/var/log/cron
crond 计划任务产生的事件信息
/var/log/dmesg
引导过程中产生的信息
/var/log/maillog
记录电子邮件活动信息
/var/log/lastlog
记录最后一次用户成功登陆的时间、登陆IP等信息
/var/log/secure
Linux系统安全日志,记录用户和工作组变化情况、用户登陆认证情况
/var/log/syslog
:只记录警告信息,常常是系统出问题的信息,使用lastlog查看
/var/log/wtmp
记录用户登录、注销、系统启动、关键等信息,使用last命令
查看
/var/log/btmp
记录失败或者是错误的登录信息和验证 lastb命令查看
/var/run/utmp
: 该日志文件记录有关当前登录的每个用户的信息。如 who、w、users、finger等就需要访问这个文件
5. 日志消息的级别
0 emerg(panic) 会导致主机系统不可用的情况
1 alert 必须马上采取措施解决的问题
2 crit(critical) 比较严重的情况
3 err(error) 运行出现问题
4 warning(warn) 可能影响系统功能,需要提醒用户的重要事件
5 notice 不会影响正常功能,但是需要注意的事件
6 info 一般信息
7 debug 程序或系统调试信息等
8 none 不记录任何日志
6. 服务名称
auth # 认证相关的
authpriv # 权限,授权相关的
cron # 任务计划相关的
daemon # 守护进程相关的
kern # 内核相关的
lpr # 打印相关的
mail # 邮件相关的
mark # 标记相关的
news # 新闻相关的
security # 安全相关的,与auth 类似
syslog # syslogd进程相关的
user # 用户相关的
uucp # unix to unix cp 相关的
local0 到 local7 # 用户自定义使用
* # *表示所有的facility
7. action(动作)日志记录的位置
系统上的绝对路径 # 普通文件 如: /var/log/xxx
| # 管道 通过管道送给其他的命令处理
终端 # 终端 如:/dev/console
@HOST # 远程主机 如: @10.0.0.1
用户 # 系统用户 如: root
* # 登录到系统上的所有用户,一般emerg级别的日志是这样定义的
服务名称.日志等级的表示
. mail.warning 表示记录mail服务,warning及其以上级别的日志
.= mail.=warning 表示记录mail服务warning级别日志
.! mail.!warning 表示除了warning级别以外的,其他级别的所有日志都记录
.none 表示不记录
* 表示所有
*. 表示所有服务
.* 表示所有日志级别
*.* 所有服务的所有级别的日志
定义格式例子:
mail.info /var/log/mail.log #表示将mail相关的,级别为info及info以上级别的信息记录到/var/log/mail.log文件中
auth.=info @10.0.0.1 #表示将auth相关的,级别为info的信息记录到10.0.0.1主机上去(前提是10.0.0.1要能接收其他主机发来的日志信息)
user.!=error #表示记录user相关的,不包括error级别的信息
user.!error #与user.error相反
*.info #表示记录所有的日志信息的info级别
mail.* #表示记录mail相关的所有级别的信息
*.* #记录所有日志
cron.info;mail.info #多个日志来源可以用";"隔开
cron,mail.info #与cron.info;mail.info是一个意思
mail.*;mail.!=info #表示记录mail相关的所有级别的信息,但是不包括info级别
8. 修改本地日志
例:vim /etc/rsyslog.conf
注意:
1)书写错误
2)修改完成后需要重启服务
3)selinux必须要关闭的或者是permissive模式,否则无法自动生成你配置的日志文件
修改权限可以防止别人修改我的日志,如:chattr +a /var/log/secure
9. 远程日志
可以做日志的备份,也可以做日志的集中管理
集中管理日志的软件:splunk ELK
环境:
192.168.48.130 远程服务器
192.168.48.129 本机
本机配置:
远程服务器开启接收远程日志的功能
远程服务器关闭防火墙
本地和远程服务器重启服务
验证
本地创建账户:useradd test1
远程服务器查看日志
注意:
1)重启服务
2)关闭本地selinux
3)关闭远程主机防火墙
4)尽量不要互传日志
日志切割
日志切割:logrotate
logrotate [OPTION...] <configfile>
-d, --debug :debug模式,测试配置文件是否有错误。
-f, --force :强制转储文件。
-m, --mail=command :压缩日志后,发送日志到指定邮箱。
-s, --state=statefile :使用指定的状态文件。
-v, --verbose :显示转储过程。
为什么要切割?
1)防止日志文件过大
2)定期清除日志
logrotate的配置文件
[root@localhost ~]# vim /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly #切割的周期,一周一切割,默认每一周执行一次rotate切割工作
# keep 4 weeks worth of backlogs
rotate 4 #保留多少个日志文件(切割几次).默认保留四个.就是指定日志文件删除之前切割的次数,0指没有备份
# create new (empty) log files after rotating old ones
create #旧日志切割后是否创建新的空白日志
# use date as a suffix of the rotated file
dateext #切割后的日志文件以当前日期为格式结尾,如xxx.log-20210410这样,如果注释掉,切割出来是按数字递增,即 xxx.log-1这种格式
# uncomment this if you want your log files compressed
#compress #是否通过gzip压缩转储以后的日志文件,如xxx.log-20210410.gz ;如果不需要压缩,注释掉就行
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d #包含该路径下的所有配置文件
# system-specific logs may be also be configured here.
/var/log/wtmp { #仅针对 /var/log/wtmp 所设定的参数
missingok #丢了也没关系
monthly #切割周期,一个月
create 0664 root utmp #创建新的日志文件 权限664 所有者root 所属组utmp
minsize 1M #文件大小超过1M后才会切割
rotate 1
}
也可以在如下位置进行配置
其他重要参数说明
compress 通过gzip 压缩转储以后的日志
nocompress 不做gzip压缩处理
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
nocopytruncate 备份日志文件不过不截断
create mode owner group 轮转时指定创建新文件的属性,如create 0777 nobody nobody
nocreate 不建立新的日志文件
delaycompress 和compress一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖delaycompress选项,转储同时压缩。
missingok 如果日志丢失,不报错继续滚动下一个日志
errors address 转储时的错误信息发送到指定的Email 地址
ifempty 即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。
notifempty 当日志文件为空时,不进行轮转
mail address 把转储的日志文件发送到指定的E-mail地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
sharedscripts 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
prerotate 在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行
postrotate 在logrotate转储之后需要执行的指令,例如重新启动 (kill-HUP) 某个服务!必须独立成行daily指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5个备份
dateext 使用当期日期作为命名格式
dateformat.%s 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
size(或minsize) log-size 当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).
当日志文件 >= log-size 的时候就转储。 以下为合法格式:
size = 5 或 size 5 (>= 5 个字节就转储)
size = 100k 或 size 100k
size = 100M 或 size 100M
查看某个服务的日志是否切割
[root@localhost ~]# vim /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok
sharedscripts #与endscript中间夹的是需要执行的操作
postrotate #切割后执行的命令
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
endscript
}
/dev/null:空,不管你向它扔什么,都是空
2> :标准错误输出重定向
2>> :标准错误输出追加重定向