Linux操作文档——分析和排查系统故障(日志)


一、日志系统

1、概念

日志文件:系统中各个运行消息的文件,不同的日志文件记录了不同类型的信息,如内核消息、错误消息等
syslog服务:syslogd: 系统,非内核产生的信息
klogd:内核,专门负责记录内核产生的日志信息

2、分类

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

二、分析日志文件

1、主要日志文件

常见的一些日志文件

目录说明
/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该日志文件记录有关当前登录的每个用户的信息

2、日志文件分析

1、日志消息级别

数字优先级别说明
0EMERG (紧急)会导致主机系统不可用的情况
1ALERT (警告)必须马上采取措施解决的问题
2CRIT (严重)比较严重的情况
3ERR (错误)运行出现错误
4WARNING (提醒)可能影响系统功能,需要提醒用户的重要事件
5NOTICE (注意)不会影响正常功能,但是需要注意的事件
6INFO (信息)一般信息
7DEBUG (调试)程序或系统调试信息等

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打印相关的
mail邮件相关的mark标记相关的
news新闻相关的security安全相关的
syslogsyslog本身的user用户相关的
uucpunix to unix cp 相关的local0 到 local7用户自定义使用
*表示所有的facility

3、action(动作)日志记录的位置

更改系统安全日志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)

三、日志的采集

1、一般日志采集

发送方设置

[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

2、Nginx日志采集

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 ]

3、日志切割

[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压缩,gzipdelaycompress延迟压缩
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扇区故障

1、备份MBR扇区数据
将第一块硬盘(sda) 的MBR扇区备份到第二块硬盘的sdb1分区中(挂载到/backup目录)
在这里插入图片描述
在这里插入图片描述
2、模拟MBR扇区故障
当出现“Operating system not found”的提示信息,表示无法找到可用的操作系统,因此无法启动主机
3、从备份文件中恢复MBR扇区数据
在这里插入图片描述
选择"Rescue a CentOS Linux system"选项
在这里插入图片描述

2、GRUB引导故障

在提示符后输入对应的引导命令,然后执行"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

3、遗忘root用户的密码

进入急救模式重设root用户密码
sh-4.2# chroot /mnt/sysimage
bash-4.1# passwd root

三、排除文件系统类故障

1、修复文件系统

修复一般的文件系统错误
在这里插入图片描述

2、磁盘资源耗尽故障

修复i结点耗尽故障:将该分区中占用大量i结点的细小文件,进行转移或者删除即可

3、检测硬盘坏道

现象

读取磁盘中的数据时,磁盘设备发出异常声响。
访问磁盘中的某个文件时,反复读取且出错,提示文件损坏。
对于新建立的分区无法完成格式化。
系统使用该磁盘时频繁死机。

查看硬盘设备/dev/sdb中的坏道情况
在这里插入图片描述

### 关于Linux日志分析系统的解决方案或工具 在Linux环境中,日志文件对于系统管理故障排查至关重要。为了更高效地处理分析这些日志文件,可以选择多种专门设计的工具技术实现方案。 #### 工具推荐及其功能特点 1. **ManageEngine EventLog Analyzer** ManageEngine EventLog Analyzer 提供了一种简化的方式用于从不同安全解决方案中收集日志数据[^3]。此工具不仅限于Windows平台,在Linux环境下同样适用。其核心优势在于强大的警报机制以及灵活的日志导航能力。此外,该工具有两种版本可选——免费版支持多达五个日志源的基础需求;高级版则扩展至千级规模的日志源支持。 2. **LOGalyze** LOGalyze 是一款由匈牙利团队开发的开源工具,专为系统管理员与网络安全专家打造[^4]。通过 SOAP 方法集成多个服务器、应用及网络设备的信息流,LOGalyze 构建起庞大的数据分析管道。用户可通过直观的Web界面实时监控各类指标,并生成动态报表导出至Excel或PDF等多种格式。特别值得一提的是,这款软件能够在短时间内快速部署完毕(通常不超过一个小时),并且内置符合HIPAA等行业法规标准的数据审计模块。 #### 技术实现方案概述 除了上述提到的具体工具外,还可以考虑采用ELK Stack (Elasticsearch, Logstash, Kibana) 这样一套完整的开源技术栈来进行深入定制化开发: - **Elasticsearch**: 高效存储海量结构化/半结构化的日志记录。 - **Logstash**: 收集来自各处异构来源的日志消息并执行初步过滤加工操作- **Kibana**: 呈现最终可视化效果以便进一步探索洞察潜在模式规律。 下面是一个简单的Python脚本示例展示如何利用命令行读取指定路径下的HTML文档内容作为模拟输入给后续流程做准备: ```python import os def read_html_file(file_path): if not os.path.exists(file_path): raise FileNotFoundError(f"The file {file_path} does not exist.") with open(file_path, 'r') as f: content = f.read() return content if __name__ == "__main__": html_content = read_html_file("/path/to/linux_web.html") print(html_content[:50]) # 输出前50字符确认加载成功 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值