ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Linux日志体系与故障排查:从syslog到journalctl实战指南

Linux日志体系与故障排查:从syslog到journalctl实战指南 1. 先认清家底Linux 日志不是一个文件而是三套体系并行很多刚入行的人以为 Linux 日志就是/var/log/messages或/var/log/syslog出问题就tail -f盯这一个文件结果排查半天没有头绪。等你真正经历过几轮故障和几次安全事件就会明白 Linux 的日志体系其实是三套东西并行运作的传统的 syslog/rsyslog 文本日志、systemd-journald 的二进制日志还有应用自己写到独立目录的日志。三者的分工不同覆盖场景有重叠但都不是完全等价的替代关系。1.1 syslog/rsyslog 传统文本日志运维老本行syslog 协议本来是 Unix 系操作系统的标准日志协议后来 rsyslog 成了大多数发行版的默认实现。它的核心思路是设施facility 等级severity的分类方式比如内核消息走kern认证信息走auth或authpriv计划任务走cron邮件走mail通用系统消息走daemon或user。等级从低到高依次是debug、info、notice、warning、err、crit、alert、emerg。rsyslog 的配置文件在/etc/rsyslog.conf和/etc/rsyslog.d/目录下核心就一行行的路由规则比如authpriv.* /var/log/secure *.info;mail.none;authpriv.none;cron.none /var/log/messages第一行意思是把 auth 相关的所有等级日志写到/var/log/secure第二行把除了邮件、认证、计划任务之外的所有 info 以上日志写到/var/log/messages。Debian/Ubuntu 系则通常把认证日志写到/var/log/auth.log规则路径略有差异但机制完全一样。所以你看想快速确认一台机器有没有人登录过看/var/log/secure或auth.log才是对的messages里基本不会记录认证成功与失败的具体细节。这是新手第一个容易踩的坑。1.2 systemd-journald 二进制日志新时代的入口自从 systemd 大规模普及后journald成了更靠近系统底层的日志收口服务。它把内核、systemd 服务单元、程序通过 stdout/stderr 打出来的日志统统收成二进制格式放在内存的/run/log/journal或者持久化目录/var/log/journal下面。读它必须用journalctl命令。journald 的优势是结构化字段多每条日志不只是几行文本还带着_PID、_SYSTEMD_UNIT、_HOSTNAME、_UID等元数据筛选起来非常方便。比如要查看 nginx 这个 systemd 单元最近的日志journalctl -u nginx.service -n 50 --no-pager把时间窗口拉出来journalctl -u nginx.service --since 2025-06-10 08:00:00 --until 2025-06-10 10:30:00再比如只看错误级别以上的启动日志journalctl -p err -b-b表示本次启动-b -1表示上一次启动。这对排查重启之后系统起不来的场景特别有用。但要留个心眼journald 默认在部分发行版上并不开启持久化也就是日志只存在 tmpfs 上重启即丢。如果你不想丢编辑/etc/systemd/journald.conf把Storageauto改为Storagepersistent再重启systemd-journald服务。这件事应该在服务器上线第一天就做而不是等出事故后追悔莫及。1.3 应用自己的日志目录别只盯着系统日志系统日志解决的是系统级的问题但真正的业务故障比如某个接口返回 500、数据库慢查询、类似 API 网关转发的异常多数时候要看应用自己的日志。这些日志通常在/var/log/下按应用目录分好/var/log/nginx/access.log、error.log/var/log/mysql/或/var/log/mysqld.log/var/log/redis/redis.logJava 应用常见的/var/log/app/或交给 logback/log4j 自行控制容器场景则是docker logs或 k8s 的/var/log/containers/为什么强调这一点因为故障排查时你如果只盯 systemd journal会发现很多业务层面的异常根本没有进入 journal比如 Nginx 的 access log 就不走 journald而是自己写文件。排查前先想清楚这个故障属于哪个层级再去对应的日志源找证据效率会高很多。1.4 常用日志文件速查表日志文件示例路径主要记录内容通用系统日志/var/log/messagesRHEL系、/var/log/syslogDebian系内核、服务、网络等综合消息认证安全日志/var/log/secureRHEL系、/var/log/auth.logDebian系登录、sudo、PAM认证、用户切换内核日志/var/log/dmesg、/var/log/kern.log硬件识别、驱动、内核错误启动日志/var/log/boot.log系统启动过程、服务启停计划任务日志/var/log/croncron 任务执行细节登录历史/var/log/wtmp、/var/log/btmp、/var/log/lastlog成功登录历史、失败登录历史、最近登录均为二进制软件包管理/var/log/dnf.log、/var/log/yum.log、/var/log/apt/安装卸载记录Web服务日志/var/log/nginx/、/var/log/httpd/访问与错误日志数据库服务日志/var/log/mysql/、/var/log/mysqld.log错误、慢查询、binlog相关systemd日志/var/log/journal/journald 持久化存储审计日志/var/log/audit/audit.logauditd 行为审计记录这张表值得存一份贴在工位上或者记在笔记里。遇到新环境时先用ls /var/log扫一眼很多服务器管理员会自定义日志路径不能只靠默认位置去猜。2. 故障排查时怎么翻日志最省时间故障排查最怕的不是没有日志而是日志太多、太杂一上来就grep error /var/log/messages从头翻到尾最后眼睛花了还没定位到问题。我这些年踩下来的经验是先判断故障发生在哪个阶段再决定从哪个日志入口入手缩小范围之后再做内容匹配。2.1 启动失败journalctl 按启动轮次精准定位服务器开机后卡在登录界面、某个服务没起来、或者直接进入 emergency 模式这种场景用journalctl -b是最直接的。-b不带参数表示本次启动加数字表示往前推第几次。操作系统起不来时你通常无法进入正常系统但可以在 grub 菜单里选择救援模式或直接进 single 模式然后执行journalctl -b -1 -p 3 --no-pager这条命令是在看上一次启动中等级等于或高于 err 的所有日志。-p后面跟数字或名字3 对应 err4 对应 warning0 对应 emerg。实际排障时我一般从 err 级别起步如果信息不够就降到 warning这样不会一上来就被一堆内核驱动的小警告刷屏。有一次我帮人排查一台虚拟机升级内核后无法启动journalctl -b -1里看到很明确的记录systemd-modules-load[396]: Failed to find module ext4注意这个 Failed to find module原因是新内核把 ext4 编译成了模块但 initramfs 里没有打进去。处理方向就变成了重建 initramfs而不是去折腾分区表。日志的价值就是把可能性很多的问题收敛成这个方向的问题。2.2 磁盘爆满与日志刷屏磁盘告警是运维最常见的事故之一而日志最大的隐形杀手。先df -h看根分区的使用率再用du -sh /var/log/*或du -xh --max-depth1 /var/log 2/dev/null | sort -rh | head找出大文件。常见结果是某个日志文件被程序疯狂写入。比如一个 Java 应用在 catch 块里无脑e.printStackTrace()或者一个 PHP 脚本每次请求都写error_log文件能在一两个小时内涨到几 GB。处理完把磁盘腾出来之后真正值钱的动作是找出为什么程序在刷屏。还有一个容易被忽视的点某些文件被删除后进程还持有文件描述符磁盘空间不会释放。这时候df -h看满着但你du又找不到大文件。用lsof | grep deleted就能看到那些已删除但仍被占用的文件。日志在被打到一定大小后触发 logrotate但进程没有重开文件描述符就会让旧文件处于这种状态。这种情况通常要重启服务或者至少向进程发信号让它重新打开日志文件。2.3 服务起不来、连不上、突然挂掉服务类故障的排查路径我基本固定为三步systemctl status 服务名看状态码和描述。journalctl -u 服务名 -n 50 --no-pager看最近的日志。按时间往前翻找第一个异常而不是看最后一行错误。服务起不来的常见日志特征端口被占用Address already in use。这时候ss -lntp看哪个进程占着端口。配置文件语法错误Nginx 会显示nginx: [emerg] unknown directiveMySQL 会显示unknown variable。解法是先用自带检查工具比如nginx -t、mysqld --validate-config。权限不对日志写入失败Permission denied。通常是日志目录属主和进程用户不一致比如把日志目录chown错了服务启动时既读不了配置也写不了日志。依赖服务没就绪业务服务连不上数据库或缓存报Connection refused。这种问题在日志里最迷惑人因为它报的是 TCP 层面的错误真正的根因可能是数据库根本没起也可能是连接数满了。判断服务突然挂掉时除了看服务自己的日志还要看两条时间线是否吻合一条是服务的 unit 日志另一条是journalctl --since里同时间段有没有 OOM kill 记录或者内核里有没有Killed process的字样。如果内存不足触发 cgroup 或 OOM服务表现为瞬间消失这类信息一般在内核或 systemd 日志里而不是应用日志里。2.4 网络与硬件问题dmesg 是个好帮手内核日志在各种故障排查里被严重低估。dmesg打开的是内核环形缓冲会记录硬件识别、驱动加载、PCI 设备、网卡链路状态等信息。排查网络丢包、网卡频繁 up/down、磁盘 I/O 错误时先跑dmesg -T | grep -Ei error|fail|link down|register-T会把时间戳转成可读时间。比如网线松动或交换机端口有问题时内核日志会出现网卡 link up/link down 反复刷屏磁盘出现问题时会有I/O error dev sda这类记录。这些信息往往比应用层的超时更接近根因。不过要注意dmesg 默认可能被限制为仅 root 可读kernel.dmesg_restrict1普通用户看不了这属于安全策略。另外 dmesg 的环形缓冲容量有限跑久了旧记录会被覆盖。要保留更完整的内核日志需要依赖 persistent journald 或 rsyslog 写/var/log/kern.log。3. 安全审计从认证日志到行为审计如果说故障排查看的是一场急救那安全审计做的就是体检。Linux 的认证和安全日志记录得其实相当详细关键是有没有看、会不会看。3.1 登录日志里藏着多少信息RHEL/CentOS 系的认证日志在/var/log/secureDebian/Ubuntu 系的在/var/log/auth.log。先看最常见的两个成功与失败特征# 成功登录 grep Accepted /var/log/secure # 失败登录 grep Failed password /var/log/secure只输出有哪些 IP 在试密码以及尝试次数可以这么组合grep Failed password /var/log/secure | awk {print $(NF-3)} | sort | uniq -c | sort -nr | head -20awk {print $(NF-3)}是为截取 IP 字段因为 sshd 的日志大概长这样Jun 10 03:21:47 host sshd[12345]: Failed password for invalid user admin from 203.0.113.7 port 54782 ssh2结构里 IP 是倒数第四列所以$(NF-3)能拿到。不同发行版字段位置可能略有偏移先grep Failed password /var/log/secure | tail -5看一眼格式再写 awk 更稳妥。此外/var/log/btmp记录失败的登录尝试但它是二进制不能直接 cat用lastb -n 30查看。与之对应的/var/log/wtmp记录成功登录用last查看。lastlog查看每个用户最近一次登录时间。有一次我审计一台被怀疑存在弱口令告警的机器lastb输出几千条同一个时间段的失败记录再配合last里出现的一条来自同一 IP 的成功登录基本就能确认这台机器已经被爆破成功过。这种失败与成功对照的视角是认证日志分析的关键。还要注意用户变更的痕迹grep -i useradd\|usermod\|userdel /var/log/secure检查有没有凭空多出来的用户有没有非管理员在改用户组和 UID。3.2 sudo 与提权痕迹sudo 的使用记录通常会进认证日志日志里会写清楚哪个用户、在哪台终端、执行了什么命令。RHEL 系里搜sudoDebian 系里搜sudo或直接看 journaljournalctl _COMMsudo --since 2025-06-01 --no-pager文本日志里能看到类似Jun 10 10:30:01 host sudo[22334]: user1 : TTYpts/0 ; PWD/home/user1 ; USERroot ; COMMAND/bin/bash -c cat /etc/shadow这类记录的价值在于建立行为基线。比如一台 web 服务器的运维日常只有systemctl reload nginx、tail -f /var/log/nginx/error.log突然某天出现sudo /bin/bash或sudo chmod 777 /etc/passwd这就是高可疑信号。审计 sudo 的另一个重点是核对/etc/sudoers配置。这里的原则是最小化授权不要给运维统一发 root 密码也不要给一个普通账号配ALL(ALL) ALL。日志分析只能告诉发生了什么配置收敛才能控制什么不会发生。3.3 auditd 做敏感操作留痕如果 secure/auth 日志是安全门户的访客登记那 auditd 就是机房里的监控摄像头。auditd 可以对文件访问、系统调用、网络连接等做细粒度的记录日志在/var/log/audit/audit.log。使用前先启动systemctl enable --now auditd然后加规则。比如监控/etc/passwd和/etc/shadow被写入或属性变更auditctl -w /etc/passwd -p wa -k passwd_watch auditctl -w /etc/shadow -p wa -k shadow_watch-w指定路径-p指权限r 读、w 写、x 执行、a 属性变更-k是自定义键名方便检索。查看日志ausearch -k passwd_watch -ts today汇总报告aureport --summaryaureport --auth还能单独看认证相关的审计摘要。auditd 最大的优点是链条完整比系统日志更能还原谁在什么时间改了哪个文件。我在复盘一次配置漂移问题时发现/etc/hosts在深夜被改动不是运维干的也不是定时任务最后靠 auditd 的记录定位到某个初始化脚本的执行路径这才找到源头。3.4 实操审计检查清单每次做例行安全审计我建议至少检查以下项目审计项目常用命令/方法重点看什么登录失败聚合grep Failed /var/log/secure或lastb高频来源 IP、时间集中度成功登录异常last、grep Accepted /var/log/secure登录时间异常、来源 IP 异常、非工作时间账号变动grep -i useradd /var/log/securegrep -i userdel新账号、已离职账号仍在root 直接登录grep Accepted /var/log/securegrep rootsudo 命令审计journalctl _COMMsudo高权限命令、非预期命令计划任务变动cat /var/spool/cron/、/etc/cron*可疑脚本、定时下载执行SSH 公钥异常检查/root/.ssh/authorized_keys、家目录 mtime陌生公钥、文件时间异常监听端口ss -lntp异常端口、后门监听这套清单不需要每次全做但至少一个月应该跑一轮。平时把这些命令的脚本固定下来出安全事件时能节省大量时间。4. 渗透复盘用日志还原攻击路径而不是凭感觉渗透复盘这个词在不同语境下意思不一样。我这里说的是安全工作中最实用的那部分当一台机器被攻击之后或者你收到了外部告警如何通过日志把攻击者的行为路径还原出来从而真正把门补上。这既适用于企业的安全事件响应也适用于你作为一个运维或安全人员做红蓝对抗后的复盘。4.1 为什么复盘比杀进程更重要很多人的第一反应是把可疑进程 kill 掉、把文件删掉、改一下密码。但每次这样处理完之后过两周同样的问题又会出现因为你只处理了症状没有处理入口。日志复盘的作用就是找到这个入口攻击者是从 SSH 弱口令进来的还是从某个 Web 漏洞上传的恶意文件是通过哪个高权限账号执行了命令我自己处理过的一台被爆破的服务器当时干净利落地把可疑进程全部 kill、SSH 密码全部改掉、防火墙也加了 IP 白名单以为收了工。后来回溯才发现攻击者不只爆破了一个账号还在另一个普通用户家目录里放了计划任务脚本从日志看那台机器被当成了跳板。如果我当时只看一层日志后面这个计划任务根本不会暴露。复盘的意义不是给过去一个交代而是给未来的攻击制造成本。4.2 攻击时间线怎么拉还原攻击路径的第一步是把时间轴拉出来。先确定事故窗口期比如从告警起往前推 7 天然后按时间把所有日志对齐。基本动作# 查看所有用户最近的登录 last -a -n 100 # 查看失败登录的时间分布 grep Failed password /var/log/secure | awk {print $1, $2, $3} | sort | uniq -c # 查看成功登录 grep Accepted /var/log/secure | awk {print $1, $2, $3, $9, $11, $(NF-1)} # 查看当前可疑进程的启动时间 ps -eo pid,lstart,cmd | grep -E bash|curl|wget|nc|python | grep -v grepps -eo pid,lstart,cmd里的lstart表示进程启动时间这个字段对安全排查非常有用。攻击者留下的后门进程如果还活着它的启动时间往往能跟登录日志里的某个时间点对上。再把 Web 应用日志里的时间点对齐。比如/var/log/nginx/access.log和error.log看攻击者访问了哪些路径、提交了什么数据、有没有向 web 目录写入文件。时间线拉好后几个关键节点自然就浮现了第一次扫描、第一次漏洞利用、第一次成功登录、第一次执行系统命令。4.3 Web 日志里的异常信号Web 服务是攻击面最大的一层access.log里的流量特征值得专门练。几个常见的高可疑信号大量 404 后出现 200攻击者在扫描目录、探测路径。404 是他们在敲门如果某个时刻突然变 200说明门被撞开了。动态脚本文件出现在不该出现的位置比如上传目录upload/下出现.php、.jsp文件这些位置本来只该有图片或压缩包。URL 参数里带eval、base64、cmd、exec等特征这是脚本层注入或命令执行的典型特征。请求 User-Agent 异常绕开默认 UA、带上特殊标记的请求要重点看。POST 请求占比异常正常业务 POST 是有限的突然某个路径全是 POST且响应码怪。一个很实用的命令是把访问量前几十的路径拉出来awk {print $7} /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -30如果某个.php文件的请求量高得离谱多半是业务流量被恶意请求覆盖或者直接就是 webshell 被反复访问。注意先确认它是不是业务文件不要一上来就删。另外日志里来源 IP 分布也说明问题。一个正常的业务网站访问 IP 应该比较分散如果某个固定 IP 在短时间高频循环请求不同路径大概率是脚本在跑。把异常 IP 聚合出来awk {print $1} /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -204.4 提权、横向移动与反清理痕迹到了系统内层面攻击者通常会想方设法提权和扩大战果。而这些动作同样会留下日志痕迹sudo 记录里出现非运维行为比如普通用户尝试执行sudo su、sudo visudo、sudo cat /etc/shadow。定时任务异常检查/etc/crontab、/etc/cron.d/、各用户 crontab、/etc/systemd/system/下有没有新生成的 timer 或 service。攻击者经常用这招保持持久化。临时目录出现可执行文件/tmp、/dev/shm、/var/tmp是最常见的暂存区。检查这些目录里有没有近期生成的脚本和二进制对比一下创建时间。SSH 公钥被植入检查每个用户家目录的.ssh/authorized_keys突然多出来的公钥是标准后门手段。不光看内容还要看文件的修改时间。横向移动线索如果一台机器异常登录另一个内网主机的 IP或者 sshd 日志出现来自非预期的内网 IP 的连接就要把整个内网排查的优先级提上来。时间线越完整提权过程的先后次序就越清楚。比如攻击者先在 web 目录上传脚本获得低权限然后从历史命令里看到数据库密码再用这个密码登录服务器最后通过 sudo 提权到 root。每步之间会有时间差日志里的进程启动时间、文件修改时间、命令执行时间可以互相印证。还有一个重要话题是反清理。攻击者有可能清空或修改日志文件、删除 shell history、故意篡改文件时间戳。作为防御方你要有这个意识本地日志可以被清理所以日志一定要远程实时同步一份。这不仅是合规要求也是复盘的保底方案。如果发现某台机器的 auth.log 或 shell history 被清空那本身就说明这台机器很可能已经被深度控制处理优先级要立即拉满。4.5 复盘项目的输出与加固闭环一次完整的渗透复盘不应该是口头聊两句就结束。我通常会把结果整理成三样东西事件时间线从最初的异常扫描到最终的影响范围每个关键节点配日志原文。受影响资产清单哪些主机、哪些账号、哪些文件被涉及明确恢复和清理范围。加固改进清单按照优先做/尽快做/定期做分类比如 SSH 禁 root 远程登录、禁用不用的账号、限制内网访问、启用 auditd 监控关键文件、接入远程日志收集。加固做得再好看如果没法持续验证最终还是会回到原点。一个简单的收尾验证动作是连续一周检查 auth.log 里有没有新的失败登录、有没有新的成功登录以及关键文件哈希有没有变化。5. 日志工程化轮转、统一收集和别把日志弄丢前面聊的都是怎么看日志、怎么从日志里找问题。但如果日志文件无限增长、没有轮转、没有集中收集前面做的所有分析都会变得很痛苦。最后一个模块聊工程化这部分的坑我建议在业务稳定期就踩完不要等事故高峰期再去试。5.1 logrotate不轮转的日志迟早吃掉磁盘Linux 默认用 logrotate 对日志做按周期轮转和压缩。全局配置在/etc/logrotate.conf具体应用的配置放在/etc/logrotate.d/下。以 Nginx 为例典型的配置块长这样/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 nginx adm sharedscripts postrotate if [ -f /var/run/nginx.pid ]; then kill -USR1 $(cat /var/run/nginx.pid) fi endscript }逐行解释daily每天切一次。rotate 14保留最近 14 份超过即删。compress切完 gzip 压缩。delaycompress延迟一次压缩下次轮转时再压上一次的文件避免 Nginx 还在写文件时被 gzip 抢走。notifempty空文件不切。create 0640 nginx adm轮转后用指定权限和属主新建日志文件。postrotate轮转后给 Nginx 发USR1信号让它重新打开日志文件句柄。如果应用不支持这种信号重开就需要改用copytruncate先复制后清空但copytruncate有一个小问题复制和清空之间存在极短的时间窗可能丢极少量的日志。大多数情况下日志允许丢一行半行完全看业务容忍度。手动测试 logrotate 配置是否正确用logrotate -d /etc/logrotate.conf-d是 debug 模式只输出会执行什么但不实际执行。确认没问题后可以强制跑一次logrotate -f /etc/logrotate.conf不少磁盘突然满了的事故根因就是日志轮转没配好或者新上线的应用日志根本没纳入 logrotate 管理。每接入一个新服务上线检查项里就该有一项日志轮转是否已配置。5.2 远程日志收集给自己留一条保命手段本地日志再全机器被重装、被清空之后一切归零。远程日志收集是安全审计和渗透复盘的兜底方案。最轻量级的方案是 rsyslog 的远程转发。日志服务器端在/etc/rsyslog.conf里启用 TCP/UDP 模块并监听端口module(loadimudp) input(typeimudp port514) module(loadimtcp) input(typeimtcp port514)客户端把日志转发过去*.* 192.168.1.100:514表示 UDP表示 TCP。改完配置后systemctl restart rsyslog。生产上我建议用 TCP虽然内核协议栈和防火墙对 UDP 的压力小但 TCP 有重传和确认日志传输的可靠性更高。如果公司有 ELK 或 Loki 这类日志平台可以再上 Filebeat 或 Fluent Bit 做采集与清洗。半年前用户提到loki 日志系统和filebeat 日志收集配置文件说明现在很多团队确实在往轻量日志平台迁移。但我要说的是再好的日志平台也替代不了最基础的 rsyslog 转发搭建平台是一件锦上添花的事先把日志持久化和集中化做扎实再谈可视化和告警。5.3 时间同步、容器日志与几个容易踩的坑日志价值建立在时间轴上如果系统时间混乱日志分析基本白做。这里最常见的坑有三个第一个坑是时区混用。rsyslog 文本日志里的时间默认是系统本地时间journald 显示的是本地时间但底层存的是 UTC 时间戳。如果你用journalctl --since传的时间跟系统时区不一致查询结果可能是错的。运维多名同事管理同一批服务器时最好约定所有服务器统一用 UTC 或统一用某个固定时区日志平台里也统一换算不要一半是本地时间一半是 UTC。第二个坑是NTP 没有配置。机器重启后 CMOS 时间不准或者虚拟化平台时钟漂移日志的时间线就乱了。务必配置 chrony 或 ntpd并定期用chronyc tracking检查同步状态。这个动作看似不起眼却在安全溯源时起到决定性作用。第三个坑是容器和云环境日志的 假持久化。容器里日志如果只写到容器本地文件容器一删日志就没了。生产环境容器日志建议输出到 stdout由 Docker 或 k8s 的日志驱动统一收集也可以直接挂载宿主机的日志目录但那样对日志轮转和管理的要求更高。在云环境里同理实例本地日志通常不持久需要接云上的日志服务或自建远程 rsyslog。额外提醒一个很细节但容易坑人的问题** grep 中文环境下的字符匹配和字段偏移**。服务器的 locale 如果设置成中文或非 C 环境某些工具比如sort、awk、sed在单字节与多字节字符混排时可能出现异常。分析日志前先export LC_ALLC能少掉很多莫名其妙的坑。另外日志里嵌套了复杂转义字符时我的习惯是先用sed -n 开始,结束p把片段切出来再慢慢看而不是一把梭式的管道串。最后聊聊个人习惯。我现在排查任何一台新接手的服务器都会先做三件事看/var/log/下有哪些文件、确认 journald 是否持久化、确认有没有远程日志转发。这三件事两分钟就能确认但能避免后面排查问题时走一大段弯路。日志这东西平时不觉得有多大价值真到故障重建和事件定级的时候它是唯一能还原事实的东西。希望这篇梳理能让你下次再面对一堆日志文件时至少知道该从哪里翻起。
返回列表