news 2026/8/14 13:49:17

看不懂 Linux 日志?rsyslog+journalctl 从 0 到 1 精讲,排错效率直接翻倍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
看不懂 Linux 日志?rsyslog+journalctl 从 0 到 1 精讲,排错效率直接翻倍

前言

⚠️有没有很多 Linux 新手和我一样? 启动服务报错、SSH 登录失败、定时任务没执行,打开终端两眼一抹黑,完全不知道去哪里找报错信息! 服务器不会说谎,所有程序崩溃、登录异常、内核报错都会完整记录在系统日志里,学会看日志 = 掌握服务器排错万能钥匙。

CentOS7 及以上系统存在两套日志服务协同工作:systemd-journaldrsyslog,很多教程只单独讲其中一个,新手越学越混乱。 本文全程小白友好,拆解两套日志分工、完整可复现实验、每行命令带详细注释、参数全拆解、3 类高频服务故障完整复盘,跟着虚拟机敲一遍就能吃透日志体系!

📌前置环境说明 实验机器:CentOS7/8/9 服务器 server, 阅读建议:一边开虚拟机,一边跟着实操,所有案例均可手动复现加深记忆


一、Linux 日志整体架构

1.1 日志核心作用文本框

💡日志能干什么?

  1. 故障排查:服务启动失败、登录报错、程序崩溃,日志记录完整报错原因
  2. 安全审计:记录谁远程 SSH 登录、何时登录、是否暴力破解密码
  3. 运行监控:定时任务执行记录、内核硬件异常、系统资源报错
  4. 追溯责任:多人操作服务器,可通过日志查看每一条执行行为

1.2 两套日志服务分工对比表

服务名称存储格式日志存放路径核心职责优缺点
systemd-journald二进制文件临时:/run/log/journal持久化:/var/log/journal日志收集总入口,收集内核、开机、所有服务原始日志优点:过滤、按服务 / 时间查询方便;缺点:二进制文件不能直接 cat 读取
rsyslog纯文本文件/var/log/ 下各类日志接收 journald 日志,按分类存入不同文本日志,支持日志远程转发优点:文本文件易读取、长期归档;缺点:查询过滤功能弱于 journalctl

1.3 工作流程通俗讲解

  1. 系统内核、ssh、定时任务、httpd 等程序产生日志消息;
  2. 全部消息统一交给systemd-journald收集,格式化存储;
  3. rsyslog读取 journald 收集到的日志,按照预设规则拆分、存入不同文本日志;
  4. 运维人员可任选两套工具查看日志、定位故障。

⚠️补充知识点文本框 不是所有软件都会走 rsyslog 记录日志: sshd、crontab、内核、系统登录使用系统日志服务; httpd、nginx 等 web 服务拥有独立日志文件,不写入 /var/log 系统日志。


二、rsyslog 日志完整详解

2.1 rsyslog 配置文件路径

配置文件作用修改后生效方式
/etc/rsyslog.conf主配置文件,定义全局日志规则systemctl restart rsyslog
/etc/rsyslog.d/*.conf自定义扩展配置目录,推荐新增规则放这里systemctl restart rsyslog

主配置内置导入扩展目录代码:

# 读取/etc/rsyslog.d/下所有.conf配置文件,mode=optional目录不存在不报错include(file="/etc/rsyslog.d/*.conf"mode="optional")

2.2 日志规则标准语法

facility+连接符号+priority 处理方式 示例:cron.info

表格 1:facility 设备类型(日志来源分类)

facility日志来源说明
authPAM 认证模块产生日志
authprivSSH、FTP 私密登录日志(排 SSH 登录报错必看)
croncrontab 定时任务执行日志
kern系统内核相关日志
lpr打印机服务日志
mail邮件服务日志
news新闻组服务日志
user用户自定义程序日志
local0~local78 组自定义日志类型,实验自定义日志专用

表格 2:priority 日志优先级(数字越小故障越严重)

数字级别名称场景说明
0emerg系统彻底崩溃,无法使用
1alert重大故障,必须立刻处理
2crit临界严重错误
3err程序运行报错
4warning警告,不影响运行但存在隐患
5notice正常重要事件
6info普通运行信息
7debug调试打印日志,生产环境关闭
none不记录任何日志

表格 3:连接符号匹配规则

符号匹配规则举例
.大于等于该级别全部记录cron.info 记录 info、notice、warning 及更严重日志
.=仅匹配当前级别cron.=err 只记录 err 级别日志
.!排除当前级别,其余全部记录cron.!debug 不记录 debug,其他全部保存

处理方式 3 种

  1. 写入本地文件(最常用)
  2. 输出到服务器终端控制台
  3. 转发日志到远程日志服务器

2.3 系统默认日志规则解析

### RULES ##### 内核日志输出到控制台(默认注释关闭)#kern.* /dev/console# 所有info级别日志,排除邮件、认证、定时任务,存入messages*.info;mail.none;authpriv.none;cron.none /var/log/messages# 所有登录认证日志存入secure(排查SSH登录首选)authpriv.* /var/log/secure# 邮件所有级别日志存入maillogmail.* -/var/log/maillog# 定时任务全部日志存入croncron.* /var/log/cron# 系统崩溃紧急消息广播给所有在线用户*.emerg :omusrmsg:*# news、uucp服务crit及以上严重日志单独存放uucp,news.crit /var/log/spooler# 系统开机日志存入boot.loglocal7.* /var/log/boot.log

2.4 /var/log 系统日志文件作用详解表

日志文件路径存储内容运维使用场景
/var/log/messages绝大多数系统通用日志,排除认证、邮件、定时任务服务启动失败、系统进程报错通用排查
/var/log/secureSSH、用户登录、权限认证日志SSH 免密失效、密码登录失败、暴力破解排查
/var/log/cron定时任务执行记录crontab 脚本不执行、定时任务报错
/var/log/maillog邮件收发日志邮件服务故障排查
/var/log/boot.log系统开机启动打印信息开机硬件、内核启动异常

2.5 日志内容字段拆解(小白逐段翻译)

执行命令实时查看日志:

[root@server ~]# tail -f /var/log/messagesNov1010:23:05 centos7 systemd-logind: New session15of user jhl.

逐字段拆分:

  1. Nov 10 10:23:05:日志生成时间
  2. centos7:产生日志的服务器主机名
  3. systemd-logind:输出这条日志的进程名称
  4. New session 15 of user jhl.:日志详细描述内容

SSH 登录日志示例:

[root@server ~]# tail -f /var/log/secureNov1010:27:26 centos7 sshd[2755]: Accepted passwordforjhl from10.1.8.1 port5530ssh2

解读:jhl 用户从 10.1.8.1 主机使用 5530 端口 SSH 密码登录成功


三、rsyslog 自定义日志完整实验

3.1 实验目的

  1. 掌握自定义日志规则编写,业务程序可单独输出专属日志,不混杂系统日志;
  2. 理解 facility 自定义设备 local0~7 的使用方法;
  3. 学会 logger 命令手动模拟生成日志,验证配置是否生效;
  4. 掌握修改 rsyslog 配置后重载服务的标准流程。

3.2 整体实验思路

  1. 在扩展配置目录新建专属日志配置文件,定义 local5 所有级别日志写入自定义文件;
  2. 重启 rsyslog 服务加载新规则;
  3. 使用 logger 命令生成local5.info测试日志;
  4. 查看自定义日志文件,验证日志是否正常写入。

3.3 逐行命令 + 完整注释

# 1. 在rsyslog扩展目录新建自定义日志配置文件jhl.conf# vim:文本编辑工具;/etc/rsyslog.d/ 官方推荐自定义配置存放目录[root@server ~]# vim /etc/rsyslog.d/jhl.conf# 文件内写入规则# local5.* 代表local5设备所有优先级日志;/var/log/jhl.log 日志存储路径local5.* /var/log/jhl.log# 2. 重启rsyslog服务,加载新增日志规则# systemctl restart:重启系统服务;rsyslog.service 日志服务名称[root@server ~]# systemctl restart rsyslog.service# 3. 此时查看日志文件会提示不存在,日志文件不会自动创建,需要写入第一条日志才生成[root@server ~]# ls /var/log/jhl.logls: 无法访问/var/log/jhl.log: 没有那个文件或目录# 4. logger命令手动模拟业务输出日志# logger:手动生成syslog日志工具# -p local5.info:指定日志设备local5,优先级info# "test my custom log by jhl" 自定义日志内容[jhl@server ~]$ logger-plocal5.info"test my custom log by jhl"# 5. 读取自定义日志文件,验证配置生效[root@server ~]# cat /var/log/jhl.logNov1010:32:26 centos7 jhl:testmy custom log by jhl

3.4 实验现象解读

执行 logger 后自动生成/var/log/jhl.log,日志格式和系统内置日志完全统一,后续业务程序指定 local5 即可独立输出日志,方便单独排查。


四、rsyslog 三大 SSH 故障模拟 + 完整排错思路

故障 1:sshd_config 配置文件丢失,sshd 服务启动失败

故障复现代码

# 移动sshd主配置文件到当前目录,模拟文件丢失[root@server ~]# mv /etc/ssh/sshd_config .# 重启sshd服务直接启动失败[root@server ~]# systemctl restart sshd# 根据上面的提示查看sshd的详细信息[root@server ~]# systemctl status sshd.service# 通过读取日志内容,仅仅提示服务启动失败,看不到其他信息了,所以要查看系统通用日志/var/log/messages

排错完整思路

  1. 故障现象:执行重启命令无报错提示,但服务启动失败,无法远程 SSH;
  2. 排查手段:实时监控系统通用日志/var/log/messages
# -f 实时滚动输出日志,持续监控服务启动日志[root@server ~]# tail -f /var/log/messages

按G,跳到日志的最后,有详细的报错信息。

  1. 关键报错关键字:/etc/ssh/sshd_config: No such file or directory
  2. 故障根因:sshd 启动时读取指定路径配置文件,文件被移动找不到,进程直接退出;

实用技巧:

为了防止终端被占用,将tail -f /var/log/messages放到后台。

继续重启sshd服务,可以看到详细的报错信息

修复方案:将配置文件移回原目录,重启服务验证ssh 远程连接恢复正常。

[root@server ~]# mv sshd_config /etc/ssh/[root@server ~]# systemctl restart sshd

注意:不要忘记将后台的进程终止

故障 2:sshd_config 写入无效参数hello world,配置语法错误

故障复现代码

# 向sshd配置文件末尾写入无效内容hello world,制造语法错误[root@server ~]# echo hello world >> /etc/ssh/sshd_config# 重启sshd服务失败[root@server ~]# systemctl restart sshdJobforsshd.service failed because the control process exited with error code. See"systemctl status sshd.service"and"journalctl -xe"fordetails.# 没有详细的错误提示

排错完整思路

  1. 故障现象:sshd 启动失败,无直观提示;
  2. 监控 messages 日志抓取报错;
  3. 关键报错:Bad configuration option: hello,提示存在不认识的配置参数;
  4. 根因:sshd 读取配置时识别到非法参数,终止启动流程;

将后台进程终止

修复方法1:

提示141行有语法错误,使用:141快速定位到141行,将hello world删除,并重启服务。


修复方法2:sed 删除包含 hello 的错误行

# -i 直接修改文件;/hello/d 删除匹配hello的行[root@server ~]# sed -i '/hello/d' /etc/ssh/sshd_config[root@server ~]# systemctl restart sshd

🚨通用排错模板文本框 以后任何 systemd 服务启动失败,统一流程:

  1. tail -f /var/log/messages 实时监控日志
  2. 重启异常服务,捕获报错关键字
  3. 根据报错修复文件 / 配置
  4. 重启服务验证恢复

故障 3:在root@server下执行 sudo vim /etc/ssh/sshd_config,ctrl+Z 暂停后 放到后台运行,又切换到普通用户jhl@server中执行sudo vim /etc/ssh/sshd_config,错误提示为:有个进程正在运行。报错的信息如下图:

故障复现代码

排错完整思路

1.既然有个进程正在运行,就用ps 进程ID 命令进行查看

2.查看到进程的状态为T,暂停的意思.

3.使用tty查看终端,并使用jobs 查看后台的进程,发现在普通用户下用jobs查看没有,再切换到root下用jobs查看.

4.将后台进程用fg命令放入前台,CTRL+c 终止前台进程,再用ps 命令查看

5.验证,普通用户jhl@server中执行sudo vim /etc/ssh/sshd_config,没有报错信息,可以正常进入编辑模式。

错误做法:将别人正在编辑的文件进行kill -9 强制杀死进程。
[jianghuilin@server ~]sudovim/etc/ssh/sshd_config[jianghuilin@server ~]sudokill-911138# 用ps 查看,没有进程[jianghuilin@server ~]ps-CvimPID TTY TIME CMD# 再次vim 还是出现报错信息[jianghuilin@server ~]sudovim/etc/ssh/sshd_config
如何解决?将缓存文件删掉。用rm命令

补充:是否能kill,取决于什么?

应用管理员,这个程序是由谁负责的?

补充:并不是所有的日志都被存放在/var/log/messages中,/var/log/messages存放的是操作系统的日志。

  • 虽然系统提供了日志服务,但并不会记录所有内容。
  • 系统中的应用程序是否使用 rsyslog 服务记录日志,取决于应用程序设计。

例如:

  • httpd 服务使用自己的日志记录。

  • sshd 服务使用 rsyslog 服务记录登录和退出日志。

五、systemd-journald 二进制日志体系

systemd-journald 配置文件/etc/systemd/journald.conf

举一反三:找到其他服务的相关配置文件

5.1 journald 核心特点

  1. 二进制存储,不能 cat/less 直接读取,专用工具journalctl解析;
  2. 收集全系统日志,支持按服务、时间、日志级别精准过滤;
  3. 默认内存存储,服务器重启日志清空,需手动配置持久化到磁盘。

5.2 日志持久化存储配置实验

实验目的

解决默认日志重启丢失问题,配置永久保存日志到磁盘,长期追溯历史故障。

实验思路

  1. 修改 journald 主配置文件 Storage 参数为 persistent;
  2. 重启 journald 服务加载配置;
  3. 重启服务器验证日志是否保留。

逐行命令注释

# 编辑journald配置文件[root@server ~]# vim /etc/systemd/journald.conf[Journal]# Storage=auto 注释默认配置Storage=persistent# 重启日志服务生效[root@server ~]# systemctl restart systemd-journald# 查看持久化日志存储目录,自动生成机器唯一ID文件夹[root@server ~]# ls /var/log/journal/b8b0960cabe3452ca432f45acb1df028

Storage 参数对照表

[root@sever ~18:23:18]# man journald.conf# 进入文件输入关键字,进行搜索/Storage
参数值存储路径重启日志保留适用场景
volatile/run/log/journal(内存)不保留,重启清空临时测试机器
persistent/var/log/journal(磁盘)永久保存生产服务器推荐
auto自动判断目录有目录则持久,否则内存系统默认配置

六、journalctl 高频查询命令大全(每条参数详细解释)

# 1. 查看全部系统日志,分页展示[root@server ~]# journalctl# journalctl:二进制日志专用查看工具# G 跳到最后 ,g 跳到最前# 2. -f 实时动态刷新日志,等同于tail -f[root@server ~]# journalctl -f# 3. -b 0 查看本次开机所有日志;-b 1上一次开机日志[root@server ~]# journalctl -b 0# 4. -n 5 只输出最后5条日志[root@server ~]# journalctl -n 5# 5. -p err 只过滤错误级别及以上严重日志,快速定位故障[root@server ~]# journalctl -p err# 6. --since today 筛选今日全部日志;--since "-1 hour" 一小时内日志[root@server ~]# journalctl --since today[root@server ~]# journalctl --since "-1 hour"# 7. -o verbose 输出日志完整底层字段,深度排查使用[root@server ~]# journalctl -o verbose# 最常用# 8. -u sshd.service 只查看sshd服务专属日志,排查SSH故障首选[root@server ~]# journalctl -u sshd.service# 实时更新[root@server ~]# journalctl -u sshd.service -f

拓展:journalctl -f 后台长期监控日志(解决占用终端痛点)

实验需求

前台执行 journalctl -f 会霸占终端,无法同时操作服务器,放到后台持续采集日志,关闭 SSH 不中断。

推荐长期后台命令(带完整注释)

# nohup忽略挂断信号,关闭ssh进程不退出;--no-pager关闭分页器(后台必加)# > /tmp/journal_monitor.log 2>&1 标准输出+错误输出全部写入日志文件;&丢后台[root@server ~]# nohup journalctl -f --no-pager > /tmp/journal_monitor.log 2>&1 &# 实时查看后台采集到的日志[root@server ~]# tail -f /tmp/journal_monitor.log# 停止后台监控[root@server ~]# ps aux | grep journalctl[root@server ~]# kill 查到的进程PID

⚠️避坑提示:不加--no-pager后台无日志输出,分页工具会卡住采集进程。


七、journalctl 三大真实故障完整排错实战

故障 1:sshd_config 文件丢失,服务启动失败

复现操作

[root@server ~]# mv /etc/ssh/sshd_config .[root@server ~]# systemctl restart sshd# 监控日志进程放后台去刷新日志[root@server ~]# journalctl -f &# 再次restart[root@server ~]# systemctl restart sshd

排错思路

  1. 实时监控 journal 日志:journalctl -f
  2. 捕获报错:/etc/ssh/sshd_config: No such file or directory
  3. 根因:配置文件缺失;
  4. 修复:移回文件,重启 sshd。

修复代码

故障 2:sshd 配置写入非法参数

[root@server ~]# echo 'PermitRootLogin hahaha' >> /etc/ssh/sshd_config[root@server ~]# systemctl restart sshd

排错思路

  1. journalctl -f 抓取报错:不支持的配置项 hahaha;
  2. 使用 sed 删除错误行;
  3. 重启服务恢复。
# 重启服务时,动态监控日志[root@server ~]# journalctl -f72414:30:03 server.laoma.cloud systemd[1]: Stopped OpenSSH server daemon.72414:30:03 server.laoma.cloud systemd[1]: Starting OpenSSH server daemon...72414:30:03 server.laoma.cloud sshd[2806]: /etc/ssh/sshd_config line141: unsupported option"hahaha".72414:30:03 server.laoma.cloud systemd[1]: sshd.service: main process exited,code=exited,status=2572414:30:03 server.laoma.cloud systemd[1]: Failed to start OpenSSH server daemon.72414:30:03 server.laoma.cloud systemd[1]: Unit sshd.service entered failed state.# 清理对应无效记录,并重启服务[root@server ~14:33:32]# sed -i '/hahaha/d' /etc/ssh/sshd_config[root@server ~]# systemctl restart sshd

故障 3:httpd 监听端口非法(80000 超出端口范围)

[root@server ~]# yum install -y httpd[root@server ~]# sed -i 's/Listen 80/Listen 80000/g' /etc/httpd/conf/httpd.conf[root@server ~]# systemctl restart httpd

排错思路

  1. 监控 journal 日志,报错Invalid address or port非法端口;
  2. 还原 Listen 80 标准端口;
  3. 重启 httpd 服务正常启动。

处理过程:通过日志发现AH00526: Syntax error on line 42 of /etc/httpd/conf/httpd.conf

# 重启服务时,动态监控日志[root@server ~]# journalctl -f72414:34:49 server.laoma.cloud systemd[1]: Starting The Apache HTTP Server...72414:34:49 server.laoma.cloud httpd[2877]: AH00526: Syntax error on line42of /etc/httpd/conf/httpd.conf:72414:34:49 server.laoma.cloud httpd[2877]: Invalid address or port72414:34:49 server.laoma.cloud systemd[1]: httpd.service: main process exited,code=exited,status=1/FAILURE72414:34:49 server.laoma.cloud systemd[1]: Failed to start The Apache HTTP Server.72414:34:49 server.laoma.cloud systemd[1]: Unit httpd.service entered failed state.# 修改回来,并重启服务[root@server ~]# sed -i 's/Listen 80000/Listen 80/g' /etc/httpd/conf/httpd.conf[root@server ~]# systemctl restart httpd

统一排错流程总结文本框

  1. 服务启动失败 →journalctl -f实时监控日志
  2. 重启异常服务,捕获红色报错关键字
  3. 根据报错修改配置 / 恢复缺失文件
  4. 重启服务验证运行状态

八、小白终极总结

1. 两套日志工具使用场景区分

  • rsyslog:文本日志,适合长期归档、简单查看,固定日志路径/var/log/
  • journalctl:二进制日志,过滤、按服务 / 时间筛选更强,故障排查首选。

2. 核心实验收获

  1. 掌握日志 facility、优先级、匹配符号规则,可自定义业务专属日志;
  2. 学会两种日志体系排查服务启动故障的标准流程;
  3. 实现 journalctl 后台长期监控,解放终端;
  4. 理解 SSH 登录、服务崩溃日志存放位置,以后遇到同类问题不用到处查资料。

3. 运维面试高频考点

  1. rsyslog 和 systemd-journald 的区别与分工?
  2. /var/log/secure、/var/log/messages 分别存放什么日志?
  3. journalctl 日志如何永久保存,配置参数是什么?
  4. 服务启动失败,怎么通过日志快速定位报错?
  5. 自定义 rsyslog 日志如何编写规则,logger 命令作用?
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/14 13:47:16

同时用 Claude Code、Codex 和 Gemini CLI?一个本地网关就能统一管理

2026年了,AI 让普通人也能实现自己的需求。Claude Code 年化收入超过 25 亿美元,Codex 周活用户突破 300 万,Gemini CLI、Qwen Code、Kimi CLI 等工具密集涌现。越来越多的工程师不再只用一个 AI 编程助手,而是同时运行两到四个 c…

作者头像 李华
网站建设 2026/8/14 13:44:24

基于FPGA的图像电子透雾(ISP Dehaze)

文章目录文章概要算法原理大气散射模型暗通道先验FPGA 定点化程序架构模块层次数据流图流水线说明代码实现顶层模块端口IP例化端口算法优势天空或云层伪彩或问题景物轮廓有位移或较粗重影问题全屏闪烁或随机噪点横纹问题注意事项文章概要 电子透雾(Electronic Imag…

作者头像 李华
网站建设 2026/8/14 13:33:59

PWR电源控制(STM32笔记)

目录 简介: 电源框图: 低功耗模式: 模式选择: 睡眠模式: 停止模式: 待机模式: 简介: PWR(Power Control)电源控制PWR负责管理STM32内部的电源供电部分…

作者头像 李华