SRE 故障排查
故障排查工具在系统故障发生时,帮助开发和运维人员快速定位问题的根源,并提供实时数据和日志信息以便分析。不同层次的故障排查需要不同的工具,涉及服务器性能监控、网络诊断、日志分析等多个方面。以下是常用的故障排查工具及其详细介绍。
1. 系统资源监控与排查工具
1.1 top
和 htop
- 用途:实时显示系统的资源使用情况,如 CPU、内存、进程等,便于快速排查系统性能瓶颈。
- 特点:
top
是 Linux/Unix 系统自带的命令行工具,显示 CPU、内存使用率,进程列表等信息。htop
是top
的增强版,具有更友好的界面和交互功能,支持上下左右滚动查看进程、按关键指标排序等。- 典型场景:当服务器 CPU 或内存使用率突然升高时,可以使用
top
或htop
来查看具体是哪一个进程占用资源,并根据 PID 进一步分析。
1.2 iostat
- 用途:监控磁盘 I/O 和 CPU 负载,用于排查磁盘性能问题。
- 特点:
- 监控各个磁盘设备的 I/O 读写情况、每秒 IOPS、队列长度等关键指标。
- 可以帮助识别磁盘瓶颈问题,如过多的 I/O 操作导致系统性能下降。
- 典型场景:当磁盘读取/写入速度较慢或数据库操作变慢时,可以使用
iostat
分析是否是磁盘 I/O 造成的性能问题。
1.3 vmstat
- 用途:监控系统虚拟内存的使用情况,还可以显示 CPU 使用率、I/O、上下文切换等指标。
- 特点:
vmstat
提供整体的系统性能视图,包含进程、内存、分页、块 I/O、陷阱和 CPU 活动等。- 有助于排查由于内存不足、分页导致的性能问题。
- 典型场景:如果系统性能降低且怀疑是内存问题,可以使用
vmstat
来确定是否存在内存分页或交换(swap)过多的情况。
1.4 free
- 用途:查看系统的物理内存、交换内存的使用情况。
- 特点:
- 显示系统中已经使用和未使用的内存,帮助排查内存耗尽或内存泄漏问题。
- 典型场景:当服务器频繁使用 swap 交换区或内存不足时,可以使用
free
查看内存的整体使用情况,并决定是否需要释放或扩展内存。
1.5 sar
- 用途:收集和报告系统的各种性能数据,如 CPU、内存、磁盘、网络等。
- 特点:
sar
提供历史数据,能够分析系统在特定时间段的资源使用情况,而不仅仅是当前数据。- 支持生成 CSV 格式的报告,便于进一步分析。
- 典型场景:用于回溯排查历史问题,特别是在故障发生后进行事后分析。
2. 网络故障排查工具
2.1 ping
- 用途:测试网络连通性和网络延迟。
- 特点:
- 通过发送 ICMP 包测试目标地址的连通性,并记录往返时间 (RTT) 。
- 可以帮助快速判断网络是否通畅,是否存在丢包、网络延迟过高等问题。
- 典型场景:当服务器无法访问特定服务或网站时,使用
ping
测试是否网络中断或延迟较高。
2.2 traceroute
- 用途:跟踪网络路径,显示从源地址到目标地址之间的所有跳跃节点。
- 特点:
- 通过显示每个中间节点的信息,可以帮助定位网络瓶颈或中断发生在哪个环节。
- Windows 系统上对应的命令是
tracert
。 - 典型场景:当访问远程服务器或网站速度缓慢时,通过
traceroute
查看是否是由于某个中间路由节点的问题导致的延迟。
2.3 netstat
- 用途:显示网络连接、路由表、接口统计、监听端口等信息。
- 特点:
- 可以查看当前系统的所有网络连接,帮助排查是否有异常的网络连接或端口占用。
- 能显示 TCP 连接的状态,分析网络通信问题。
- 典型场景:当发现某个服务无法连接时,可以使用
netstat
查看是否有过多的连接或端口被占用。
2.4 ss
- 用途:
ss
是netstat
的替代工具,用于显示更详细的网络连接信息。 - 特点:
- 更快,且支持显示更复杂的网络状态信息。
- 可以显示 socket 的统计信息,帮助排查 TCP 连接、端口使用等问题。
- 典型场景:网络性能故障分析,如查看大量的 TIME_WAIT 状态连接或追踪某些端口的连接情况。
2.5 tcpdump
- 用途:捕获网络流量,分析网络包内容。
- 特点:
tcpdump
是强大的网络包捕获工具,能够捕获和分析网络流量中的每个数据包。- 支持丰富的过滤选项,可以只捕获特定 IP、端口或协议的流量。
- 典型场景:排查复杂的网络通信问题,如排查特定服务的流量异常、协议不兼容等问题。
3. 日志分析工具
3.1 journalctl
- 用途:
journalctl
用于查看systemd
系统的日志。 - 特点:
- 可以按时间、服务、严重级别等进行过滤,支持实时流式查看日志。
- 支持结合系统的启动信息、内核日志、服务日志进行故障排查。
- 典型场景:当某个服务启动失败时,可以使用
journalctl
查看详细的启动日志,帮助排查问题根源。
3.2 dmesg
- 用途:显示内核环形缓冲区的消息。
- 特点:
- 包含系统启动过程、驱动加载、硬件错误等相关信息。
- 对于系统硬件故障、驱动问题等非常有帮助。
- 典型场景:当怀疑系统硬件问题或设备驱动加载失败时,可以使用
dmesg
查看内核日志。
3.3 ELK Stack(Elasticsearch、Logstash、Kibana)
- 用途:用于日志收集、存储、分析和可视化的工具套件。
- 特点:
- Elasticsearch:负责日志的存储和搜索。
- Logstash:收集和处理日志数据。
- Kibana:提供可视化界面,展示日志和各种数据指标。
- ELK Stack 是分布式系统日志分析的理想解决方案,支持大规模日志数据的处理和搜索。
- 典型场景:在复杂分布式系统中,当需要分析多个服务和节点的日志时,ELK 可以集中管理、搜索和可视化日志数据。
4. 进程和服务排查工具
4.1 ps
- 用途:显示系统上运行的进程信息。
- 特点:
- 提供进程的 PID、CPU 和内存使用情况,进程的启动时间等信息。
- 可以帮助排查系统资源被哪个进程占用过多。
- 典型场景:当系统性能下降时,可以使用
ps
查看哪个进程占用了过多的资源并进行进一步分析。
4.2 strace
- 用途:跟踪系统调用和信号,帮助分析进程的运行行为。
- 特点:
strace
可以显示一个进程的系统调用及其返回结果,帮助排查程序执行中的问题。- 特别适用于排查权限问题、文件读写错误、网络调用等底层问题。
- 典型场景:当某个进程行为异常或程序崩溃时,使用
strace
可以分析其在调用哪些系统接口,以及问题发生在哪一步。
4.3 lsof
- 用途:列出进程打开的文件和网络连接。
- 特点:
lsof
可以查看哪些进程打开了哪些文件、网络端口等,帮助排查文件锁定、端口占用等问题。- 支持按照文件、端口、进程等维度进行过滤。
- 典型场景:当某个文件被某个进程锁定或者某个端口被占用时,使用
lsof
可以快速找到相关的进程。
5. 综合诊断工具
5.1 Nagios
- 用途:网络和系统监控工具,用于实时监控服务和硬件的状态。
- 特点:
- Nagios 可以实时监控主机、网络设备、服务,并在异常时发送告警。
- 支持自定义插件,用于特定的服务监控。
- 典型场景:对大规模服务器集群进行持续监控,确保服务和设备处于健康状态。
5.2 Prometheus
- 用途:开源的时序数据库和监控告警工具。
- 特点:
- 通过
exporters
从系统和应用中收集指标数据,支持灵活的查询和告警规则。 - 常与 Grafana 集成,实现数据的可视化展示。
- 典型场景:监控分布式系统中的多个节点和服务,排查性能瓶颈并进行事后分析。
总结
不同的故障排查工具各有所长,覆盖了从系统资源到网络、日志、进程等多个维度。根据实际问题选择合适的工具,可以大大提高故障排查的效率和准确性。熟悉并掌握这些工具是系统管理员和 SRE 工程师的基本技能。