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/    。
  1. 主配制: /etc/rsyslog.conf 主配置文件中以下配置作用是引入从配置目录中配置文件。

    # Include all config files in /etc/rsyslog.d/
    include(file="/etc/rsyslog.d/*.conf" mode="optional")
    
  2. 从配置:/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
915 17:10:35 service.dcr.cloud sshd[15137]: pam_unix(sshd:session): session closed for user root
915 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. --
915 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. --
912 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. --
914 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 914 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 
#保证用户是第一次登录实验

排故故障

  1. 错误现象:
[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 915 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 915 09:32 .ssh/config
  1. 错误现象:
[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
  1. 错误现象:
[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
  1. 错误现象:
[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
  1. 问题解决:
[dcr@client ~ 09:40:07]$ ssh server
laotian@server's password: 
Last login: Mon Sep 15 09:40:07 2025 from client.dcr.cloud
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐