文章目录前言一、先搞懂Linux日志到底是什么1.1 日志的核心作用1.2 日志都存在哪二、核心日志服务rsyslogd2.1 工作原理2.2 两个核心概念日志类型 日志级别1日志类型Facility日志是哪来的2日志级别Priority日志有多重要2.3 配置文件格式三、实操自定义一个日志文件步骤1修改rsyslog主配置文件步骤2创建日志文件可选步骤3重启服务让配置生效步骤4验证效果四、日志轮替logrotate防止日志把磁盘撑爆4.1 主配置文件4.2 自定义轮替规则步骤1新建轮替配置文件步骤2手动测试轮替效果4.3 轮替是怎么自动执行的五、内存日志journalctl开机失败也能查常用命令六、排障常用技巧查看命令1. 实时监控日志2. 过滤关键字查日志3. 常见问题查哪个日志总结前言日志是Linux系统的「黑匣子」排障、审计、调优全靠它也是运维方向面试的高频考点。提示以下是本篇文章正文内容下面案例可供参考一、先搞懂Linux日志到底是什么1.1 日志的核心作用日志是系统用来记录所有重要事件的文件小到用户登录、命令执行大到服务崩溃、内核报错都会被日志记录下来。核心用处有三个排障定位服务启动失败、系统异常重启翻日志基本能找到根因安全审计谁尝试登录失败、有没有人修改关键文件都能查到痕迹性能分析通过系统日志分析资源占用、服务运行状态1.2 日志都存在哪Linux绝大多数日志默认存放在/var/log目录下不同类型的日志分门别类放在对应文件里。下面是最常用的核心日志文件必须记牢日志文件作用查看方式/var/log/secure安全认证日志用户登录、权限验证相关SSH登录成败全在这cat / tail / grep/var/log/messages系统通用日志绝大多数系统事件都存在这排障万金油cat / tail / grep/var/log/cron定时任务日志crontab任务的执行状态全看它cat / tail / grep/var/log/boot.log系统启动日志开机过程的服务加载、启动状态cat / tail / grep/var/log/dmesg内核自检日志硬件、内核相关信息开机自动生成dmesg命令/var/log/maillog邮件服务日志cat / tail / grep/var/log/lastlog所有用户最后一次登录记录二进制文件lastlog命令/var/log/wtmp永久记录用户登录注销、系统启停二进制文件last命令/var/log/btmp记录登录失败的记录二进制文件lastb命令踩坑提醒lastlog、wtmp、btmp都是二进制文件别用vim/cat硬打开会出现乱码必须用对应的专用命令查看。二、核心日志服务rsyslogdCentOS 7之后系统默认的日志服务从syslogd升级为rsyslogd功能更强、性能更高并且完全兼容旧版的配置规则。2.1 工作原理rsyslogd就像一个「日志分发员」它按照配置文件/etc/rsyslog.conf里的规则把不同来源、不同严重程度的日志分发到不同的日志文件中。比如SSH登录的认证信息rsyslogd收到后匹配到认证类规则就会自动写入/var/log/secure文件。2.2 两个核心概念日志类型 日志级别配置文件里最核心的格式是类型.级别这也是最容易记混的地方拆分开就很好理解。1日志类型Facility日志是哪来的标记日志由哪个模块产生常见类型如下类型说明auth/authpriv认证授权相关authpriv更偏向隐私认证如SSH登录cron定时任务相关kern内核产生的日志mail邮件服务lpr打印相关user用户程序产生的日志local0~local78个自定义日志类型留给用户自行使用2日志级别Priority日志有多重要按照严重程度从低到高排序级别越高记录的信息越少、事件越严重。级别说明debug调试信息记录最详细开发排错用info普通运行信息日常记录最常用notice提醒信息正常但需要关注warning/warn警告可能有异常但不影响服务运行err/error错误服务功能出现异常crit严重错误已经影响系统正常运行alert紧急需要立即处理emerg致命内核崩溃级别的错误none不记录任何日志记忆小技巧配置中写mail.info的意思是「mail类型中级别info的日志全部记录」不是只记录info级别2.3 配置文件格式/etc/rsyslog.conf中每一行规则的标准格式日志类型.日志级别 日志文件路径举几个系统原生的配置例子一看就懂# 所有info及以上级别日志存入messages邮件、认证、定时任务除外它们有单独文件*.info;mail.none;authpriv.none;cron.none /var/log/messages# 所有认证相关日志全部存入secureauthpriv.* /var/log/secure# 定时任务日志单独存放cron.* /var/log/cron每条日志的标准输出格式为事件时间 主机名 服务/程序名 事件详情例如Sep 9 17:25:33 xq100 sshd[1682]: Accepted password for root from 192.168.10.1 port 49929 ssh2三、实操自定义一个日志文件光看不练假把式我们动手实现把sshd服务的日志单独存到/var/log/my_ssh.log中。步骤1修改rsyslog主配置文件vim/etc/rsyslog.conf在文件末尾添加一行规则# 自定义SSH认证日志单独存放authpriv.* /var/log/my_ssh.log步骤2创建日志文件可选不手动创建的话rsyslogd写入时也会自动生成touch/var/log/my_ssh.log步骤3重启服务让配置生效systemctl restart rsyslog步骤4验证效果重新用终端登录一次服务器然后查看日志cat/var/log/my_ssh.log|grepsshd如果能看到登录记录就说明配置成功了。踩坑提醒配置语法错误会导致rsyslog服务启动失败可以用systemctl status rsyslog查看状态排查问题。四、日志轮替logrotate防止日志把磁盘撑爆日志会越写越大如果放任不管迟早占满磁盘。Linux用logrotate实现日志轮替定期切割旧日志、压缩归档、自动删除过期日志实现生命周期循环管理。4.1 主配置文件全局默认配置在/etc/logrotate.conf几个核心参数参数作用weekly默认每周轮替一次rotate 4保留4份旧日志超过数量自动删除create轮替后自动创建新的空日志文件dateext旧日志用日期作为后缀如secure-20220909compress轮替时压缩旧日志默认注释需要可手动开启include /etc/logrotate.d加载该目录下所有自定义轮替规则补充如果没有dateext参数旧日志会用数字递增命名secure.1、secure.2… 最新的日志永远叫原名。4.2 自定义轮替规则系统中各个服务的轮替规则都放在/etc/logrotate.d/目录下比如yum、bootlog都有独立的规则文件。我们也给刚才的my_ssh.log写一套轮替策略。需求每天轮替一次保留7天日志空日志不轮替自动压缩旧文件。步骤1新建轮替配置文件vim/etc/logrotate.d/my_ssh写入以下配置/var/log/my_ssh.log{missingok# 日志文件不存在也不报错daily# 每天轮替一次rotate7# 保留7份旧日志compress# 压缩旧日志notifempty# 空文件不执行轮替copytruncate# 先复制再清空原文件不影响服务持续写日志}步骤2手动测试轮替效果logrotate-f/etc/logrotate.d/my_ssh执行后查看/var/log目录会生成压缩后的旧日志文件。4.3 轮替是怎么自动执行的logrotate本身不会定时运行它依赖系统的crontab每日定时任务触发。在/etc/cron.daily/目录下有一个logrotate可执行文件系统每天会自动执行一次触发所有日志轮替规则。五、内存日志journalctl开机失败也能查除了写入磁盘的日志Linux还有一部分日志存在内存中由systemd的journald服务管理特点非常鲜明系统重启后自动清空因为存储在内存系统启动过程中、rsyslog还未启动时的日志也能记录专门用来排查系统启动失败、服务起不来的问题常用命令# 查看所有内存日志journalctl# 查看最新的3条日志journalctl-n3# 查看指定时间段的日志journalctl--since15:00--until15:30journalctl--since2022-09-09--until2022-09-10# 只查看错误级别的日志journalctl-perr# 详细格式输出展示更多字段journalctl-overbose实用场景系统开不了机进入单用户模式后先用journalctl查启动报错快速定位是哪个服务崩溃。六、排障常用技巧查看命令最后整理几个日常学习和排障最高频的日志使用姿势亲测好用。1. 实时监控日志# 实时刷新secure日志监控登录情况tail-f/var/log/secure2. 过滤关键字查日志# 查找所有登录失败的记录grepFailed password/var/log/secure# 查看指定日期的定时任务执行情况grepSep 9/var/log/cron3. 常见问题查哪个日志问题场景优先查看的日志SSH登录失败、权限异常/var/log/secure定时任务没执行、执行报错/var/log/cron系统启动失败、服务无法启动/var/log/boot.logjournalctl硬件异常、内核报错/var/log/dmesg不知道啥问题先看通用日志/var/log/messages总结一开始学日志管理总觉得又杂又乱又是类型又是级别还有一堆配置文件。真正动手配置一遍、用日志排一次错就会发现逻辑非常清晰rsyslog负责「收日志、分日志」按类型和级别分发到不同文件logrotate负责「管日志生命周期」定时切割删除防止占满磁盘journalctl负责「内存临时日志」解决系统启动阶段的排障问题Linux章节也进入到了尾声感谢各位的支持我们下期见~