08.Linux日志管理 故障模拟和排故
Linux系统采用Syslog协议进行日志管理,主要由systemd-journald和rsyslog服务处理日志。systemd-journald收集系统事件并整理为结构化日志,rsyslog则根据配置将日志分类存储。日志文件默认保存在/var/log目录,可通过tail等工具查看。rsyslog通过facility和priority定义日志规则,支持自定义日志存储路径。系统还支持集中日志管理,
文章目录
Linux 日志管理
操作系统内和程序记录发生的事件日志,这些日志用于审核系统并解决问题。日志以文本方式保存在/var/log目录中。可以使用普通文本实用程序(如less和tail)检查这些日志。
Linux 内置了基于Syslog协议的标准日志记录系统。许多程序使用此系统记录事件并将其组织到日志文件中。CentOS 7 中systemd-journald和rsyslog服务负责处理syslog消息。
- systemd-journald 服务,是操作系统事件记录体系结构的核心,收集系统各方面事件消息,包括内核、引导过程早期阶段的输出、守护程序启动和运行时的输出、syslog事件,然后将它们重组为标准格式,并写入结构化的索引系统日志中。
- rsyslog 服务,读取systemd-journald日志,然后记录到日志文件,或根据自己的配置将日志保存到不同的文件中,以及转发给其他程序。
rsyslog日志配置
rsyslog服务配置
配置文件位置
[root@service ~ 11:37:44]# ls /etc/rsyslog.
rsyslog.conf rsyslog.d/ 。
-
主配制: /etc/rsyslog.conf 主配置文件中以下配置作用是引入从配置目录中配置文件。
# Include all config files in /etc/rsyslog.d/ include(file="/etc/rsyslog.d/*.conf" mode="optional")
-
从配置:/etc/rsyslog.d/*
日志记录规则
日志记录规则格式: facility+连接符号+priority 处理方式
facility(设备类型)
priority(优先级)
连接符
处理方式
- 记录到文件
- 发送到终端
- 转发给其他服务器
配置文件内容
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
查看日志内容
[root@service ~ 11:38:19]# tail -f /var/log/messages
Sep 15 11:37:44 service systemd: Stopped OpenSSH server daemon.
Sep 15 11:37:44 service systemd: Starting OpenSSH server daemon...
Sep 15 11:38:19 service systemd-logind: New session 80 of user root.
......
#动态查看,日志内容
日志内容说明:
- Sep 15 11:37:44 日志产生时间
- service 产生日志的主机名
- systemd-logind 产生日志的进程
- 最后一个区域是日志内容
[root@service ~ 12:54:27]# tail -f /var/log/secure
Sep 15 11:37:44 service sshd[13911]: Server listening on :: port 22.
Sep 15 11:37:44 service polkitd[758]: Unregistered Authentication Agent for unix-process:13905:5663752 (system bus name :1.210, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8) (disconnected from bus)
Sep 15 11:38:19 service sshd[13914]: Accepted password for root from 10.1.8.1 port 54506 ssh2
.....
自定义日志规则
[root@centos7 ~]# vim /etc/rsyslog.d/ldcr.conf
local5.* /var/log/laoma.log
[root@centos7 ~]# systemctl restart rsyslog.service
[root@centos7 ~]# ls /var/log/laoma.log
ls: 无法访问/var/log/laoma.log: 没有那个文件或目录
# 手动生成一个消息
[dcr@centos7 ~]$ logger -p local5.info "test my log"
[root@centos7 ~]# cat /var/log/dcr.log
Nov 10 10:32:26 centos7 dcr: test my log
补充
-
虽然系统提供了日志服务,但并不会记录所有内容。
-
系统中的应用程序是否使用 rsyslog 服务记录日志,取决于应用程序设计。
例如:
-
httpd 服务使用自己的日志记录。
-
sshd 服务使用 rsyslog 服务记录登录和退出日志。
-
[root@service ~ 16:30:42]# grep AUTHPRIV /etc/ssh/sshd_config
SyslogFacility AUTHPRIV
[root@service ~ 16:53:39]# grep ^authpri /etc/rsyslog.conf
authpriv.* /var/log/secure
[root@service ~ 16:54:12]# tail -1 /var/log/secure
Sep 15 16:03:02 service polkitd[758]: Unregistered Authentication Agent for unix-process:14654:7209839 (system bus name :1.244, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale zh_CN.UTF-8) (disconnected from bus)
rsyslog 日志集中管理
多个客户端将日志发给服务端,由服务端统计记录
服务端配置
# 启用 tcp 监听
[root@server ~]# vim /etc/rsyslog.conf
# 取消如下两行记录注释
#$ModLoad imtcp
#$InputTCPServerRun 514
# 重启服务
[root@server ~]# systemctl restart rsyslog.service
# 关闭防火墙:停止并禁止开机自动启动
[root@server ~]# systemctl disable firewalld.service --now
客户端配置
# 将本机所有日志通过tcp协议发送给远端服务器10.1.8.10
[root@client ~]# echo '*.* @@10.1.8.10' > /etc/rsyslog.d/remote.conf
[root@client ~]# systemctl restart rsyslog.service
测试
# 服务端监控日志,客户端注销用户或者ssh登录
[root@server ~]# tail -f /var/log/secure
......
Jul 25 14:43:03 server sshd[20527]: pam_unix(sshd:session): session closed for user root
Jul 25 14:46:52 client su[4509]: pam_unix(su-l:session): session closed for user root
Jul 25 14:47:28 client su[3975]: pam_unix(su-l:session): session closed for user laoma
Jul 25 14:47:43 client sshd[3901]: error: Received disconnect from 10.1.8.1 port 51521:0:
Jul 25 14:47:43 client sshd[3901]: Disconnected from user root 10.1.8.1 port 51521
Jul 25 14:47:43 client sshd[3897]: pam_unix(sshd:session): session closed for user root
systemd-journald 日志
systemd-journald 日志分析
# systemd-journald日志是以二进制方式存储,不能使用常规文本工具查看
# 查看所有日志条目,默认使用less查看文档
[root@service ~ 17:08:09]# journalctl
-- Logs begin at 五 2025-09-12 11:28:11 CST, end at 一 2025-09-15 17:08:39 CST. --
-- Logs begin at 五 2025-09-12 11:28:11 CST, end at 一 2025-09-15 17:08:39 CST. --
....
#动态查看日志 -f
[root@service ~ 17:09:33]# journalctl -f
9月 15 17:10:35 service.dcr.cloud sshd[15137]: pam_unix(sshd:session): session closed for user root
9月 15 17:10:35 service.dcr.cloud systemd-logind[775]: Removed session 90.
#查看本系统启动到现在所有的日志
[root@service ~ 17:12:25]# journalctl -b 0
-- Logs begin at 五 2025-09-12 11:28:11 CST, end at 一 2025-09-15 17:12:25 CST. --
# 1 第1次启动的日志
# 2 第2次启动的日志
# N 第n次启动的日志
#查看最近1条
[root@service ~ 17:14:18]# journalctl -n 1
-- Logs begin at 五 2025-09-12 11:28:11 CST, end at 一 2025-09-15 17:13:06 CST. --
9月 15 17:13:06 service.dcr.cloud sshd[15184]: pam_unix(sshd:session): session opened for u
#查看err级别日志
[root@service ~ 17:15:55]# journalctl -p err
-- Logs begin at 五 2025-09-12 11:28:11 CST, end at 一 2025-09-15 17:13:06 CST. --
9月 12 11:28:11 centos7.dcr.cloud kernel: Detected CPU family 19h model 80
.....
#根据时间查看日志
[root@service ~ 17:16:56]# journalctl --since today
-- Logs begin at 五 2025-09-12 11:28:11 CST, end at 一 2025-09-15 17:13:06 CST. --
#今天
[root@service ~ 17:21:16]# journalctl --since "2025-09-14 01:01:00" --until "2025-09-14 23:23:13"
-- Logs begin at 五 2025-09-12 11:28:11 CST, end at 一 2025-09-15 17:21:16 CST. --
9月 14 09:37:55 service.dcr.cloud systemd[1]: Time has been changed
#从某个时间到某个时间之间
[root@service ~ 17:22:41]# journalctl --since "-1 hour"
#一个小时之前
# 详细查看所有日志
[root@service ~ 17:24:33]# journalctl -o verbose
# 查看特定unit日志
[root@service ~ 17:25:25]# journalctl -u sshd.service
-- Logs begin at 五 2025-09-12 11:28:11 CST, end at 一 2025-09-15 17:21:16 CST. --
journalctl -f (动态) -p level(不同level,通常查看err) -u 特定单元,例如sshd
-e 最后日志 -x 详细信息
ssh 故障
你是某金融科技公司的 Linux 运维工程师,负责维护核心生产服务器集群。
发现某台服务器无法通过ssh远程登录。
请排查故障,并修复问题。
故障模拟
server设置
[root@service ~ 09:33:05]# useradd laotian -s /sbin/nologin
[root@service ~ 09:34:37]# cat /etc/passwd | grep laotian
laotian:x:1001:1001::/home/laotian:/sbin/nologin
[root@service ~ 09:39:19]# echo 123 | passwd --stdin laotian
更改用户 laotian 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@service ~ 08:55:53]# systemctl stop sshd
[root@service ~ 09:30:24]# systemctl is-active sshd
inactive
client 设置
[dcr@client ~ 09:28:49]$ chmod 666 .ssh/config
[dcr@client ~ 09:29:24]$ ll .ssh/config
-rw-rw-rw- 1 dcr dcr 74 9月 14 14:59 .ssh/config
[dcr@client ~ 09:25:40]$ cat > .ssh/config <<EOF
Host *
User loatian
StrictHostKeyChecking yes
EOF
[dcr@client ~ 09:31:56]$ > .ssh/known_hosts
#保证用户是第一次登录实验
排故故障
- 错误现象:
[dcr@client ~ 09:32:39]$ ssh server
Bad owner or permissions on /home/dcr/.ssh/config
处理方法:
[dcr@client ~ 09:35:34]$ ll .ssh/config
-rw-rw-rw- 1 dcr dcr 79 9月 15 09:32 .ssh/config
[dcr@client ~ 09:35:55]$ chmod 600 .ssh/config
[dcr@client ~ 09:36:17]$ ll .ssh/config
-rw------- 1 dcr dcr 79 9月 15 09:32 .ssh/config
- 错误现象:
[dcr@client ~ 09:36:23]$ ssh server
ssh: connect to host server port 22: Connection refused
处理方法:
[dcr@client ~ 09:36:27]$ ping -c 1 server
PING server.dcr.cloud (10.1.8.10) 56(84) bytes of data.
64 bytes from server.dcr.cloud (10.1.8.10): icmp_seq=1 ttl=64 time=0.420 ms
--- server.dcr.cloud ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.420/0.420/0.420/0.000 ms
[root@service ~ 09:37:19]# systemctl is-active sshd
inactive
[root@service ~ 09:37:41]# systemctl restart sshd
- 错误现象:
[dcr@client ~ 09:10:50]$ ssh server
No ECDSA host key is known for server and you have requested strict checking.
Host key verification failed.
处理方法:
[laoma@client ~ 09:19:33]$ vim ~/.ssh/config
Host *
User zhangsan
#StrictHostKeyChecking yes 第一次登陆不需要密钥
#改成:
StrictHostKeyChecking no
- 错误现象:
[dcr@client ~ 09:38:57]$ ssh server
laotian@server's password:
Last failed login: Mon Sep 15 09:38:52 CST 2025 from client.dcr.cloud on ssh:notty
There were 2 failed login attempts since the last successful login.
This account is currently not available.
Connection to server closed.
处理方法:
[root@service ~ 09:39:54]# cat /etc/passwd | grep laotian
laotian:x:1001:1001::/home/laotian:/sbin/nologin
[root@service ~ 09:40:37]# chmod laotian -s /bin/bash
- 问题解决:
[dcr@client ~ 09:40:07]$ ssh server
laotian@server's password:
Last login: Mon Sep 15 09:40:07 2025 from client.dcr.cloud
更多推荐
所有评论(0)