当前位置: 首页 > news >正文

【Linux运维极简教程】10-日志管理与故障排查

10 - 日志管理与故障排查

一、Linux 日志体系

1.1 日志服务

现代 Linux 使用systemd-journaldrsyslog两套日志系统:

服务特点日志位置
journald二进制格式,结构化,易查询/run/log/journal/
rsyslog文本格式,可定制,传统方案/var/log/

1.2 常见日志文件

日志文件内容
/var/log/messages系统通用日志(CentOS)
/var/log/syslog系统通用日志(Ubuntu)
/var/log/secure安全日志:登录、sudo(CentOS)
/var/log/auth.log安全日志(Ubuntu)
/var/log/croncron 定时任务日志
/var/log/maillog邮件服务日志
/var/log/dmesg内核启动日志
/var/log/boot.log系统启动日志
/var/log/yum.logyum 安装日志(CentOS)
/var/log/dpkg.logdpkg 安装日志(Ubuntu)

1.3 应用日志常见位置

/var/log/nginx/ # Nginx 日志 /var/log/mysql/ # MySQL 日志 /var/log/httpd/ # Apache 日志 /var/lib/docker/ # Docker 日志 /opt/app/logs/ # 自定义应用日志

二、journalctl - 日志查询利器

2.1 基本查询

# 查看所有日志journalctl# 查看最新日志并持续追踪(类似 tail -f)journalctl-f# 查看最后 N 条journalctl-n50# 查看今天的日志journalctl--sincetoday# 指定时间范围journalctl--since"2024-01-15 09:00:00"--until"2024-01-15 12:00:00"journalctl--since"1 hour ago"journalctl--since"30 min ago"

2.2 按服务/单元查询

# 查看指定服务的日志journalctl-unginx journalctl-usshd-f# 实时追踪journalctl-unginx--sincetoday# 查看多个服务journalctl-unginx-uphp-fpm

2.3 按优先级查询

# 日志优先级(0-7)# 0 emerg 紧急# 1 alert 警报# 2 crit 严重# 3 err 错误# 4 warning 警告# 5 notice 通知# 6 info 信息# 7 debug 调试# 只看错误及以上journalctl-perr# 查看指定级别journalctl-pwarning# 查看某级别及以上journalctl-pwarning..err

2.4 按其他条件查询

# 按进程 PIDjournalctl_PID=1234# 按用户journalctl_UID=1000# 按可执行文件journalctl /usr/bin/nginx# 按设备journalctl /dev/sda# 只显示内核日志journalctl-k# 只显示本次启动的日志journalctl-b# 查看上一次启动的日志journalctl-b-1# 以 JSON 格式输出journalctl-ojson journalctl-ojson-pretty

2.5 journal 持久化

默认 journal 日志存储在/run/log/journal/,重启后会丢失。配置持久化:

# 创建持久化目录mkdir-p/var/log/journal systemd-tmpfiles--create--prefix/var/log/journal# 重启 journaldsystemctl restart systemd-journald# 配置日志大小限制# 编辑 /etc/systemd/journald.conf[Journal]Storage=persistent# 持久化存储SystemMaxUse=500M# 最大使用 500MBSystemKeepFree=1G# 至少保留 1GB 空闲MaxRetentionSec=30day# 保留 30 天# 查看磁盘使用journalctl --disk-usage# 清理日志journalctl --vacuum-time=7d# 清理 7 天前的journalctl --vacuum-size=200M# 只保留 200MB

三、rsyslog 配置

3.1 配置文件

# 主配置文件/etc/rsyslog.conf# 子配置目录/etc/rsyslog.d/*.conf

3.2 配置语法

# 格式:设施.级别 动作 # 设施:auth, authpriv, cron, daemon, kern, mail, user, local0-7, * # 级别:debug, info, notice, warning, err, crit, alert, emerg, * # 动作:文件路径,@主机(IP),|程序 # 示例 *.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* /var/log/maillog cron.* /var/log/cron *.emerg :omusrmsg:* local7.* /var/log/boot.log

3.3 自定义应用日志

# 让应用日志通过 rsyslog 管理cat>/etc/rsyslog.d/myapp.conf<<'EOF' if $programname == 'myapp' then /var/log/myapp/app.log & stop EOFsystemctl restart rsyslog# 应用中使用 logger 命令写入日志logger-tmyapp"Application started"logger-tmyapp-plocal0.info"Info message"logger-tmyapp-plocal0.err"Error message"

四、日志分析技巧

4.1 grep 搜索

# 搜索关键词grep"error"/var/log/messages# 忽略大小写grep-i"error"/var/log/messages# 显示行号grep-n"error"/var/log/messages# 显示上下文grep-C3"error"/var/log/messages# 前后各 3 行grep-B2"error"/var/log/messages# 前 2 行grep-A5"error"/var/log/messages# 后 5 行# 统计错误数量grep-c"error"/var/log/messages# 多关键词grep-E"error|warning|fail"/var/log/messages

4.2 统计与分析

# 统计 IP 访问次数(Nginx 日志)awk'{print $1}'/var/log/nginx/access.log|sort|uniq-c|sort-rn|head-20# 统计 HTTP 状态码分布awk'{print $9}'/var/log/nginx/access.log|sort|uniq-c|sort-rn# 统计访问最多的 URLawk'{print $7}'/var/log/nginx/access.log|sort|uniq-c|sort-rn|head-20# 统计每小时的访问量awk'{print $4}'/var/log/nginx/access.log|cut-c14-15|sort|uniq-c# 找出 404 错误grep' 404 '/var/log/nginx/access.log|awk'{print $7}'|sort|uniq-c|sort-rn# 找出响应慢的请求awk'($NF > 3){print $7, $NF}'/var/log/nginx/access.log|sort-k2-rn|head-10

4.3 多文件搜索

# 在多个日志文件中搜索grep"error"/var/log/nginx/*.log# 递归搜索grep-rn"config"/etc/# 只在特定时间范围搜索awk'/2024-01-15 10:/{p=1} /2024-01-15 11:/{p=0} p'/var/log/messages

五、logrotate 日志轮转

logrotate 自动切割、压缩和清理日志文件。

5.1 配置文件

# 主配置/etc/logrotate.conf# 子配置目录/etc/logrotate.d/

5.2 配置示例

# /etc/logrotate.d/nginx/var/log/nginx/*.log{daily# 每天轮转rotate30# 保留 30 份missingok# 日志不存在不报错compress# 压缩旧日志delaycompress# 延迟压缩(最近一份不压缩)notifempty# 空文件不轮转create 0640 nginx adm# 创建新日志文件的权限sharedscripts# 多个日志匹配时脚本只执行一次postrotate# 轮转后执行的脚本if[-f/var/run/nginx.pid];thenkill-USR1$(cat/var/run/nginx.pid)fiendscript}

5.3 常用参数

参数说明
daily/weekly/monthly轮转周期
rotate N保留 N 份旧日志
size 100M超过 100MB 时轮转
compress压缩旧日志
delaycompress延迟一轮再压缩
missingok日志不存在不报错
notifempty空日志不轮转
copytruncate复制后截断原文件(不重启服务)
create创建新的日志文件
postrotate/endscript轮转后执行脚本

5.4 手动执行与调试

# 手动执行所有轮转logrotate/etc/logrotate.conf# 调试模式(只显示会做什么,不实际执行)logrotate-d/etc/logrotate.d/nginx# 强制执行logrotate-f/etc/logrotate.d/nginx# 查看轮转状态cat/var/lib/logrotate/logrotate.status

六、故障排查方法论

6.1 排查思路

发现问题 → 定位范围 → 查看日志 → 分析原因 → 解决问题 → 记录归档

6.2 常见故障排查

服务无法启动
# 1. 查看服务状态(会显示错误信息)systemctl status nginx# 2. 查看详细日志journalctl-unginx--since"10 min ago"# 3. 检查配置文件语法nginx-thttpd-tsshd-t# 4. 查看应用自身日志tail-50/var/log/nginx/error.log# 5. 检查端口冲突ss-tlnp|grep:80
系统变慢
# 1. 查看系统负载uptimetop# 2. 查看高 CPU 进程ps-eopid,user,%cpu,%mem,command--sort=-%cpu|head-10# 3. 查看高内存进程ps-eopid,user,%cpu,%mem,command--sort=-%mem|head-10# 4. 查看 IO 等待iostat-x13iotop# 查看哪个进程在做 IO# 5. 检查磁盘空间df-h
SSH 无法登录
# 在服务器上排查(需要通过其他方式登录,如控制台)# 1. 检查 sshd 服务systemctl status sshd# 2. 查看安全日志# CentOStail-50/var/log/secure# Ubuntutail-50/var/log/auth.log# 3. 检查 sshd 配置sshd-t# 语法检查grep-E"^(PermitRootLogin|PasswordAuthentication|AllowUsers)"/etc/ssh/sshd_config# 4. 检查防火墙firewall-cmd --list-all iptables-L-n|grep22# 5. 检查 PAM 限制cat/etc/security/limits.conf|grep-v"^#"
网络不通
# 1. 检查网卡状态iplinkshowipaddr show# 2. 检查路由iproute showping<gateway>ping8.8.8.8# 3. 检查 DNSdigexample.comcat/etc/resolv.conf# 4. 抓包分析tcpdump-ieth0-nnhost<target_ip>
磁盘空间满
# 1. 查看分区使用df-h# 2. 找大文件du-sh/*2>/dev/null|sort-rh|head-10find/-typef-size+1G2>/dev/null# 3. 检查 inode 是否耗尽df-ifind/-typef|wc-l# 4. 检查已删除但未释放的文件lsof+L1|grepdeleted# 或lsof|grepdeleted# 5. 清理常见日志journalctl --vacuum-size=100Mfind/var/log-name"*.gz"-mtime+30-delete

七、实战场景

场景一:分析 SSH 暴力破解

#!/bin/bash# 分析 SSH 登录失败记录,统计攻击 IPecho"===== SSH 登录失败统计 ====="echo""# CentOSgrep"Failed password"/var/log/secure|awk'{print $(NF-3)}'|sort|uniq-c|sort-rn|head-20# Ubuntu# grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -20echo""echo"===== 成功登录记录 ====="grep"Accepted password"/var/log/secure|tail-10echo""echo"===== 最近登录用户 ====="last-20

场景二:一键系统诊断脚本

#!/bin/bash# system_diagnose.sh - 快速诊断系统状态echo"=============================="echo" 系统诊断报告 -$(date)"echo"=============================="echo""echo"--- 系统信息 ---"echo"主机名:$(hostname)"echo"系统:$(cat/etc/os-release|grepPRETTY_NAME|cut-d'"'-f2)"echo"内核:$(uname-r)"echo"运行时间:$(uptime-p)"echo""echo"--- 负载情况 ---"uptimeecho""echo"--- CPU 使用 TOP5 ---"ps-eopid,user,%cpu,%mem,comm--sort=-%cpu|head-6echo""echo"--- 内存使用 ---"free-hecho""echo"内存使用 TOP5:"ps-eopid,user,%cpu,%mem,comm--sort=-%mem|head-6echo""echo"--- 磁盘空间 ---"df-h|grep-vtmpfsecho""echo"--- 磁盘 IO ---"iostat-x112>/dev/null|tail-n+4||echo"iostat 未安装"echo""echo"--- 网络连接数 ---"echo"TCP 连接总数:$(ss-tn|tail-n+2|wc-l)"echo"TIME_WAIT:$(ss-tnstate TIME-WAIT|wc-l)"echo"ESTABLISHED:$(ss-tnstate ESTABLISHED|wc-l)"echo""echo"--- 监听端口 ---"ss-tlnp|head-20echo""echo"--- 最近错误日志 ---"journalctl-perr--since"1 hour ago"--no-pager|tail-20echo""echo"=============================="echo" 诊断完成"echo"=============================="

八、小结

本篇介绍了 Linux 日志体系(journald + rsyslog)、journalctl 查询技巧、日志分析命令、logrotate 日志轮转以及系统故障排查方法论。日志是排查问题的金矿,熟练使用日志查询和分析工具是运维工程师的核心能力。


上一篇:09 - 定时任务与自动化运维
下一篇:11 - 防火墙与安全加固

http://www.cnnetsun.cn/news/3441291.html

相关文章:

  • 2026年天津市专业数控加工厂家大揭秘,谁能跻身行业TOP行列?
  • Arduino用MS5837压力传感器驱动包:支持300米水深检测与气压高度换算
  • 14 · 集群实战:Metrics Server 部署与 HPA / Ingress 实测
  • ima.copilot:面向工业工作流的垂直领域AI协作者
  • 苹果M7 Ultra芯片:1.5TB统一内存如何重塑本地AI开发与高性能计算
  • 量化交易在熊市折磨阶段的策略实现与TACOing模式识别
  • Vue+Spring Boot实现的智能办公毕设项目(含AI表单识别与会议摘要)
  • Windows系统PIN不可用问题排查与修复指南
  • 5分钟快速上手:GBFR Logs - 碧蓝幻想Relink免费战斗数据分析神器
  • VC6.0编译的纯C++2048游戏,双击test.exe即玩,WASD操作+图形界面
  • Java毕设实战包:SSM+Redis高并发秒杀系统(含环境配置与全流程演示)
  • iKuai软路由IPv6配置指南:实现内网设备直连公网
  • Windows 11下VirtualBox安装与优化全指南
  • Tina Linux下glibc交叉编译与优化指南
  • 汉服租赁微信小程序全套开发资源:SSM后端+小程序前端+操作视频+设计文档
  • Claude for Teachers:教育AI的数据安全承诺与技术实现
  • C/C++不定参技术详解:从宏函数到可变参数模板的实战指南
  • 2026 年 7 月解读:北京金三科技 合资 ICP 代办综合实力与合作参考
  • C++高并发服务器Connection模块设计:基于muduo的事件驱动与线程安全实现
  • 手写C++ SMO算法实现SVM:从数学推导到工程实践详解
  • 广州程序员注意:键盘全部失灵?5 步自查不用花钱换新
  • 抖音批量下载工具实战手册:三步搞定无水印视频批量采集
  • AI模型安全:对抗攻击与防御技术全景
  • 3分钟上手:用开源AI视频分析工具让视频内容自动生成文字描述
  • Unity 3D 基础笔记(六)UGUI 基础画布与自适应
  • Vibe Coding:AI辅助编程的新范式与实践指南
  • WSL2环境搭建与生产力工具链配置指南
  • 二手iMac 5K内存升级与性能优化指南
  • C语言跨平台路径处理实战:统一抽象层与核心函数实现
  • Linux内核随机数池初始化与日志级别配置详解