日志文件:系统中各个运行消息的文件,不同的日志文件记录了不同类型的信息,如内核消息、错误消息等
syslog服务:syslogd: 系统,非内核产生的信息
klogd:内核,专门负责记录内核产生的日志信息
1、内核及系统日志:数据由系统服务rsyslog统一管理,可以根据主配文件/etc/rsyslog.conf中的设置决定内核消息及其各种系统消息的记录位置
示例
[root@node2 ~]# tailf /var/log/messages
May 19 21:01:01 node2 systemd: Started Session 5 of user root.
消息 | 说明 |
---|---|
May 19 21:01:01 | 时间:消息发出的时间和日期 |
node2 | 主机名:生成消息的计算机的名称 |
systemd | 子系统的名称:发出消息的应用程序的名称 |
Started Session 5 of user root. | 消息内容:消息的具体内容 |
2、用户日志:数据用于记录系统用户登录及其退出系统的相关信息,包括用户名、登录终端、登录时间、来源、使用的进程等等
查询当前登录的用户情况
[root@node1 ~]# users
root root
[root@node1 ~]# who
root tty1 2020-05-19 19:42
root pts/0 2020-05-19 19:51 (192.168.1.10)
[root@node1 ~]# w
21:38:40 up 1:48, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 19:42 1:54m 0.05s 0.05s -bash
root pts/0 192.168.1.10 19:51 0.00s 0.13s 0.00s w
查询用户登录的历史记录
[root@node1 ~]# last //查询成功登录到系统的用户记录,最近的登录情况将显示在最前面
root pts/0 192.168.1.10 Tue May 19 19:51 still logged in
root tty1 Tue May 19 19:42 still logged in
reboot system boot 3.10.0-957.el7.x Tue May 19 19:42 - 21:39 (01:56)
root tty1 Wed Apr 22 04:04 - 04:05 (00:00)
reboot system boot 3.10.0-957.el7.x Wed Apr 22 04:04 - 21:39 (27+17:34)
wtmp begins Tue Apr 14 23:57:26 2020
[root@node1 ~]# lastb //查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况
root tty1 Thu Apr 16 19:08 - 19:08 (00:00)
查看安全日志文件
[root@node1 ~]# tailf /var/log/secure //查看/var/log/secure安全日志文件
May 19 20:07:38 localhost polkitd[5973]: Registered Authentication Agent for unix-process:8012:105101 (system bus name :1.56 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
May 19 20:07:38 localhost polkitd[5973]: Unregistered Authentication Agent for unix-process:8012:105101 (system bus name :1.56, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
3、 程序日志:应用程序自己独立管理的一个日志,记录程序本身运行过程中的各种事件信息
httpd 服务的日志文件access_log和error_log分别记录客户访问事件和错误信息
[root@base httpd]# pwd
/var/log/httpd
[root@base httpd]# ls
access_log error_log
常见的一些日志文件
目录 | 说明 |
---|---|
/var/log/messages | 记录Linux操作系统常见的系统和服务错误信息 |
/var/log/cron | 记录crond计划任务产生的事件信息 |
/var/log/dmesg | 记录Linux操作系统在引导过程中的各种事件信息 |
/var/log/maillog | 记录进入或发出系统的电子邮件活动 |
/var/log/lastlog | 记录每个用户最近的登录事件 |
/var/log/secure | 记录用户认证相关的安全事件信息 |
/var/log/wtmp | 记录每个用户登录、注销及系统启动和停机事件,使用last命令查看 |
/var/log/btmp | 记录失败的、错误的登录尝试及验证事件,lastb命令查看 |
/var/log/boot.log | 记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息 |
/var/log/syslog | 只记录警告信息,常常是系统出问题的信息,使用lastlog查看 |
/var/run/utmp | 该日志文件记录有关当前登录的每个用户的信息 |
1、日志消息级别
数字 | 优先级别 | 说明 |
---|---|---|
0 | EMERG (紧急) | 会导致主机系统不可用的情况 |
1 | ALERT (警告) | 必须马上采取措施解决的问题 |
2 | CRIT (严重) | 比较严重的情况 |
3 | ERR (错误) | 运行出现错误 |
4 | WARNING (提醒) | 可能影响系统功能,需要提醒用户的重要事件 |
5 | NOTICE (注意) | 不会影响正常功能,但是需要注意的事件 |
6 | INFO (信息) | 一般信息 |
7 | DEBUG (调试) | 程序或系统调试信息等 |
2、rsyslog.conf文件分析
加载模块、转发端口等基本配置
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
查看系统默认的日志设置
[root@localhost ~]# grep -v "^$" /etc/rsyslog.conf | grep -v "^#"
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
服务名称
服务 | 说明 | 服务 | 说明 |
---|---|---|---|
auth | 认证相关的 | authpriv | 权限,授权相关的 |
cron | 任务计划相关的 | daemon | 守护进程相关的 |
kern | 内核相关的 | lpr | 打印相关的 |
邮件相关的 | mark | 标记相关的 | |
news | 新闻相关的 | security | 安全相关的 |
syslog | syslog本身的 | user | 用户相关的 |
uucp | unix to unix cp 相关的 | local0 到 local7 | 用户自定义使用 |
* | 表示所有的facility |
更改系统安全日志secure的记录位置
[root@localhost ~]# vim /etc/rsyslog.conf
authpriv.* /usr/local/secure //原位置为/var/log/secure
[root@localhost ~]# setenforce 0 //临时禁用selinux
[root@localhost ~]# systemctl restart rsyslog.service //重启服务
[root@localhost ~]# ls /usr/local/ //触发日志
bin etc games include lib lib64 libexec sbin secure share src
[root@localhost ~]# chattr +a /usr/local/secure //增加特殊权限,防止有其他人把记录给删除掉
[root@localhost ~]# lsattr /usr/local/secure
-----a---------- /usr/local/secure
[root@localhost ~]# cat /usr/local/secure //查看验证
May 19 23:33:20 localhost polkitd[5973]: Unregistered Authentication Agent for unix-process:17873:586822 (system bus name :1.55, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
发送方设置
[root@node1 ~]# vim /etc/rsyslog.conf
......
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
......
*.* @192.168.1.61 //所有级别的所有信息通过UDP端口发送到192.168.1.61(@:UDP端口;@@:TCP端口)
[root@node1 ~]# systemctl restart rsyslog.service
[root@node1 ~]# systemctl start firewalld.service
[root@node1 ~]# systemctl enable firewalld.service
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
[root@node1 ~]# firewall-cmd --add-port=514/tcp --add-port=514/udp --permanent
success
[root@node1 ~]# firewall-cmd --reload
success
[root@node1 ~]# firewall-cmd --list-ports
514/tcp 514/udp
接收方设置
[root@node2 ~]# vim /etc/rsyslog.conf
......
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
......
[root@node2 ~]# systemctl restart rsyslog.service
[root@node2 ~]# firewall-cmd --add-port=514/tcp --add-port=514/udp --permanent
success
[root@node2 ~]# firewall-cmd --reload
success
[root@node2 ~]# firewall-cmd --list-ports
514/tcp 514/udp
当node1产生变化时,node2自动采集
[root@node1 ~]# su - test1
[root@node1 ~]# yum -y install elinks
[root@node2 ~]# tailf /var/log/messages
May 19 23:52:02 node1 su: (to test1) root on pts/0
May 19 23:53:10 node1 yum[18401]: Installed: nss_compat_ossl-0.9.6-8.el7.x86_64
May 19 23:53:10 node1 yum[18401]: Installed: 1:js-1.8.5-20.el7.x86_64
May 19 23:53:10 node1 yum[18401]: Installed: elinks-0.12-0.37.pre6.el7.0.1.x86_64
nginx主机设置
[root@node1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@node1 ~]# yum makecache fast
[root@node1 ~]# yum -y install nginx
[root@node1 ~]# systemctl start nginx
[root@node1 ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@node1 ~]# systemctl status nginx
[root@node1 ~]# vim /etc/rsyslog.conf
......
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
......
*.* @192.168.1.61
$ModeLoad imfile
$InputFilePollInterval 1 //间隔多久采集1次。默认单位是秒
$InputFileName /var/log/nginx/access.log //
$InputFileTag nginx-info-access; //采集的日志的名称
$InputFilestateFile state-nginx-info-accesslog //给对应的日志打一个标签
$InputRunFileMonitor
$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-info-error;
$InputFilestateFile state-nginx-info-errorlog //给这个日志命名
$InputRunFileMonitor //启动监控
$InputFilePollInterval 10
if $programname == 'nginx-info-access' then @192.168.1.61:514
if $programname == 'nginx-info-access' then ~
if $programname == 'nginx-info-error' then @192.168.1.61:514
if $programname == 'nginx-info-error' then ~
[root@node1 ~]# systemctl restart rsyslog.service
接收方设置同上
[root@node2 ~]# tailf /var/log/messages
May 20 00:25:14 node1 rsyslogd: invalid or yet-unknown config file command 'InputFilePollInterval' - have you forgotten to load a module? [v8.24.0-34.el7 try http://www.rsyslog.com/e/3003 ]
[root@node1 ~]# grep -v '^$' /etc/logrotate.conf | grep -v '^#'
weekly //切割周期,默认每周
rotate 4 //保留多少个日志文件,那么一周一个,也就是能看到一个月的日志。如果是0就表示不作备份,仅做了一个切割,表示每周清空一下日志。
create //旧日志切割后,源文件是否生成新的日志
dateext //切割后,日志的文件类型是什么样(log日期的格式:xxx.log-20190705)
include /etc/logrotate.d //还需要读取这个地方的内容 ,目录里都是其他地方的日志
/var/log/wtmp { //特指某个文件的切割方式
monthly //每月切割
create 0664 root utmp //切割完成之后,这个文件的权限,以及属主和属组是谁
minsize 1M //文件超过1M之后才切割,这表示即便过了1个月,大小没到1M,也不切割
rotate 1 //保留1个
}
/var/log/btmp {
missingok //丢了也没关系,热日志会出现中断
monthly
create 0600 root utmp
rotate 1
}
参数 | 说明 | 参数 | 说明 |
---|---|---|---|
compress | 压缩,gzip | delaycompress | 延迟压缩 |
nocompress | 不压缩 | copytruncate | 先拷贝,再清空 |
ifemty | 即使日志文件为空,到日期也切割 | notifempty | 为空者不切割 |
mail Email | 切割后的日志文件,不在本地保存,发送邮件到其他地方 | nomail | 生成的日志不发送,在本地使用 |
olddir Directory | 另存为的地址,如果不写则默认是在同一个目录下边 | noolddir | 转存文件都保存在本地 |
sharedscripts | 运行脚本 | postrotate | 切割之后,执行脚本 |
prefotate | 切割之前,执行脚本 | daily | 每天 |
weekly | 每周 | mounthly | 每月 |
yearly | 每年 | rotate count | 保存几份 |
dateexxt | 使用当前日期 | size (minisize) | 达到多少才切割,默认单位是M,sizeksizem默认单位是kb |
切割安全日志
[root@node1 ~]# vim /etc/rsyslog.conf
authpriv.* /var/log/secure
[root@node1 ~]# cd /etc/logrotate.d/
[root@node1 logrotate.d]# vim secure
/var/log/secure {
missingok
notifemty
daily
create
rotate 4
compress
}
[root@node1 ~]# vim /etc/rsyslog.conf
[root@node1 ~]# cd /etc/logrotate.d/
[root@node1 logrotate.d]# vim secure
[root@node1 logrotate.d]# useradd zhangsan //添加用户,切换用户触发日志
[root@node1 logrotate.d]# echo 123.com | passwd --stdin zhangsan
Changing password for user zhangsan.
passwd: all authentication tokens updated successfully.
[root@node1 logrotate.d]# su - zhangsan
[zhangsan@node1 ~]$ echo hello logrotate > testfile
[zhangsan@node1 ~]$ cat testfile
hello logrotate
[zhangsan@node1 ~]$ exit
logout
[root@node1 logrotate.d]# tail /var/log/secure
May 19 19:43:06 localhost polkitd[5973]: Registered Authentication Agent for unix-process:7289:3323 (system bus name :1.21 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
May 19 19:43:06 localhost polkitd[5973]: Unregistered Authentication Agent for unix-process:7289:3323 (system bus name :1.21, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
May 19 19:43:16 localhost polkitd[5973]: Registered Authentication Agent for unix-process:7337:4364 (system bus name :1.22 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
May 19 19:43:16 localhost polkitd[5973]: Unregistered Authentication Agent for unix-process:7337:4364 (system bus name :1.22, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
May 19 21:57:02 localhost sshd[7796]: Accepted password for root from 192.168.1.10 port 60637 ssh2
May 19 21:57:02 localhost sshd[7796]: pam_unix(sshd:session): session opened for user root by (uid=0)
May 19 22:16:02 localhost sshd[7796]: pam_unix(sshd:session): session closed for user root
May 19 23:13:20 localhost sshd[17818]: Accepted password for root from 192.168.1.10 port 61197 ssh2
May 19 23:13:20 localhost sshd[17818]: pam_unix(sshd:session): session opened for user root by (uid=0)
May 19 23:33:20 localhost polkitd[5973]: Registered Authentication Agent for unix-process:17873:586822 (system bus name :1.55 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
[root@node1 logrotate.d]# logrotate -vf /etc/logrotate.d/secure //手动切割日志(-f :强制, -v: 显示过程)
[root@node1 logrotate.d]# tail /var/log/secure //源文件已被切割,为空
tail: cannot open ‘/var/log/secure’ for reading: No such file or directory
[root@node1 logrotate.d]# ls /var/log/
anaconda dmesg maillog tallylog vmware-network.4.log vmware-vmsvc.log
audit dmesg.old messages tuned vmware-network.5.log wtmp
boot.log firewalld nginx vmware-network.1.log vmware-network.6.log yum.log
btmp grubby_prune_debug rhsm vmware-network.2.log vmware-network.log
cron lastlog spooler vmware-network.3.log vmware-vgauthsvc.log.0
如果有特殊权限,而每次切割完成之后,都需要重新启动一下我们rsyslog服务,所以这个时候就需要我们自己来写脚本支持
[root@node1 logrotate.d]# vim secure
/var/log/secure {
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/secure
endscript
missingok
notifemty
daily
create
rotate 4
compress
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null
/usr/bin/chattr +a /var/log/secure
endscript
}
1、备份MBR扇区数据
将第一块硬盘(sda) 的MBR扇区备份到第二块硬盘的sdb1分区中(挂载到/backup目录)
2、模拟MBR扇区故障
当出现“Operating system not found”的提示信息,表示无法找到可用的操作系统,因此无法启动主机
3、从备份文件中恢复MBR扇区数据
选择"Rescue a CentOS Linux system"选项
在提示符后输入对应的引导命令,然后执行"boot”命令即可正常引导Linux操作系统
grub> insmod xfs
grub> linux16 /vmlinuz-3.10.0-514.el7.x86_64 root=/dev/mapper/cl-root ro crash kernel=autord.Ivm.lv=cl/root rd.lvm.1v=cl/swap rhgb quiet LANG=en_US.UTF-8
grub> initrd16 /initramfs-3.10.0-514.e17.x86_64.img
grub> boot
进入急救模式重设root用户密码
sh-4.2# chroot /mnt/sysimage
bash-4.1# passwd root
修复i结点耗尽故障:将该分区中占用大量i结点的细小文件,进行转移或者删除即可
现象
读取磁盘中的数据时,磁盘设备发出异常声响。
访问磁盘中的某个文件时,反复读取且出错,提示文件损坏。
对于新建立的分区无法完成格式化。
系统使用该磁盘时频繁死机。