sar命令

sar(System Activity Reporter)作为Linux综合性系统监控工具,其网络监控功能具备实时采集与历史回放双重能力,可精准监控网卡收发速率、数据包统计、协议层状态、网络错误等多维度指标,弥补单一网络工具(如ifstat)缺乏历史数据与协议层监控的短板。与sar的CPU、内存监控能力联动,能快速定位“网络瓶颈是否引发系统性能下降”,是运维人员排查网络故障、分析带宽占用、复盘历史网络异常的核心工具,隶属于sysstat工具集。

一、sar网络监控基础准备

1.1 安装与验证

sar属于sysstat工具集,最小化安装系统需手动部署,安装方式与其他sysstat工具一致:

# CentOS/RHEL系列
yum install -y sysstat

# Ubuntu/Debian系列
apt-get install -y sysstat

# 验证安装(同时确认网络监控模块可用)
sar -n DEV 1 1  # 执行1次网络监控测试,无报错即正常

1.2 核心语法(网络监控专属)

# 实时网络监控语法
sar -n <监控类型> [采集间隔秒数] [采集次数] [选项]

# 历史网络数据回放语法
sar -n <监控类型> -f <历史数据文件路径> [-s 起始时间] [-e 结束时间]

# 关键说明:
# 1. -n <监控类型>:网络监控核心选项,必须指定具体类型(如DEV、EDEV),不支持默认值;
# 2. 采集间隔+次数:无次数时无限采集(需Ctrl+C终止),次数为0时同理;
# 3. 历史文件:默认存储于/var/log/sa/(CentOS)或/var/log/sysstat/(Ubuntu),文件名为saXX(二进制)。

1.3 网络监控核心类型(-n选项取值)

sar网络监控通过不同类型覆盖“网卡硬件-协议层-套接字”全链路,日常高频类型如下,按使用场景分类说明:

# 一、网卡硬件层面(最常用,聚焦收发与错误)
DEV:监控所有网卡的基础收发指标(速率、包数),日常巡检首选;
EDEV:监控网卡的错误与丢弃统计(丢包、CRC错误等),排查网络故障核心。

# 二、网络协议层面(深入分析协议运行状态)
IP:监控IP协议统计(收发数据包数、错误数、分片数),排查IP层异常;
TCP:监控TCP协议核心指标(连接数、重传数、收发字节数),分析TCP连接瓶颈;
UDP:监控UDP协议统计(收发数据包数、错误数),适配UDP服务(如DNS、日志收集);
ICMP:监控ICMP协议统计(收发请求/响应数、错误数),排查ping不通等问题。

# 三、套接字层面(监控网络连接总数)
SOCK:监控系统套接字状态(已使用数、TCP/UDP套接字数),判断连接数是否超限。

# 四、组合监控(同时查看多类指标,用逗号分隔)
例:sar -n DEV,EDEV 2 3  # 同时监控网卡收发与错误指标,每2秒采集一次,共3次

二、核心网络监控场景输出解读

以下针对日常高频网络监控场景,结合输出结果拆解核心指标,明确判断标准,同时联动系统性能指标(如CPU、I/O),形成完整排查逻辑。

2.1 网卡基础收发监控(sar -n DEV 2 3)

执行sar -n DEV 2 3(每2秒采集一次网卡基础数据,共3次),聚焦网卡带宽占用与包收发频率,是日常巡检核心命令:

Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)  01/28/2026      _64_       )

04:30:00 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
04:30:02 PM      eth0      3.50      2.00      0.22      0.15      0.00      0.00      0.00
04:30:04 PM      eth0      2.00      1.50      0.13      0.11      0.00      0.00      0.00
04:30:06 PM      eth0      4.00      2.50      0.25      0.18      0.00      0.00      0.00
Average:         eth0      3.17      2.00      0.20      0.15      0.00      0.00      0.00 (4 CPU   _x86       

核心字段解读

  • IFACE:网卡名称(与ip addr、ifconfig显示一致,如eth0、ens33、bond0,lo为回环网卡,可忽略);
  • rxpck/s、txpck/s:每秒接收、发送的数据包数(核心包量指标),异常增高可能是网络攻击(如DDOS)或小数据包频繁传输;
  • rxkB/s、txkB/s:每秒接收、发送的数据量(单位KiB,核心带宽指标),换算为MiB需除以1024,换算为Mbps需乘以8/1024; 示例:rxkB/s=125000 → 125000KiB/s ≈ 122MiB/s ≈ 1000Mbps(千兆网卡满速);
  • rxcmp/s、txcmp/s:每秒接收、发送的压缩数据包数(通常为0,仅在开启网络压缩时生效);
  • rxmcst/s:每秒接收的组播数据包数(正常网络中占比极低,异常增高可能是组播风暴)。

指标判断标准

结合网卡带宽与业务场景:千兆网卡rxkB/s+txkB/s持续接近125000(≈1000Mbps),万兆网卡接近1250000(≈10Gbps),说明带宽接近满负荷;rxpck/s持续超过10000且rxkB/s偏低,说明存在大量小数据包传输,可能消耗CPU资源(需联动sar -u查看%system是否升高)。

2.2 网卡错误与丢弃监控(sar -n EDEV 2 3)

执行sar -n EDEV 2 3(每2秒采集一次网卡错误数据,共3次),排查丢包、CRC错误、帧错误等硬件或链路问题,是网络故障定位核心:

Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)         01/28/2026         _x86_64_        (4 CPU)

04:35:00 PM     IFACE     rxerr/s     txerr/s    rxdrop/s    txdrop/s  rxfifo/s  txfifo/s
04:35:02 PM      eth0         0.00         0.00         0.00         0.00         0.00         0.00
04:35:04 PM      eth0         0.00         0.00         0.00         0.00         0.00         0.00
04:35:06 PM      eth0         0.00         0.00         0.00         0.00         0.00         0.00
Avera    0.00         0.00         0.00         0.00         0.00         0.00ge:         eth0     

核心字段解读

  • rxerr/s、txerr/s:每秒接收、发送的错误数据包数(核心故障指标),大于0说明存在链路或网卡硬件问题;
  • rxdrop/s、txdrop/s:每秒接收、发送时丢弃的数据包数(核心丢包指标),大于0可能是带宽满负荷、网卡缓存不足或内核参数配置不当;
  • rxfifo/s、txfifo/s:每秒接收、发送队列溢出的数据包数(队列满导致丢包),大于0说明网卡缓存不足,需调整内核网络参数(如net.core.somaxconn)。

常见故障关联

  • rxerr/s>0:优先排查物理链路(网线、交换机端口)、网卡硬件故障;
  • rxdrop/s>0且rxkB/s接近带宽上限:带宽满负荷导致丢包,需扩容带宽或限制非核心业务;
  • rxfifo/s>0:网卡接收缓存不足,需调整内核参数(如net.core.netdev_max_backlog)。

2.3 TCP协议监控(sar -n TCP 2 3)

执行sar -n TCP 2 3(每2秒采集一次TCP协议数据,共3次),分析TCP连接状态与传输质量,适配Web、数据库等TCP服务:

Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain) 	01/28/2026 	_x86_64_	(4 CPU)

04:40:00 PM  active/s passive/s    iseg/s    oseg/s
04:40:02 PM      0.00      0.00     10.50      8.00
04:40:04 PM      0.00      0.00      9.00      7.50
04:40:06 PM      0.00      0.00     11.00      8.50
Average:         0.00      0.00     10.17      8.00

补充说明:部分Linux发行版(如CentOS 8+、Ubuntu 20.04+)支持更详细的TCP指标(需sysstat版本≥12.0),输出含重传数、连接数等:

04:45:00 PM  active/s passive/s    iseg/s    oseg/s  retrans/s   estab/s
04:45:02 PM      0.00      0.00     10.00      8.00      0.00      5.00

核心字段解读

  • active/s:每秒主动发起的TCP连接数(如客户端发起的连接,对应connect系统调用);
  • passive/s:每秒被动接受的TCP连接数(如服务端监听的连接,对应accept系统调用);
  • iseg/s、oseg/s:每秒接收、发送的TCP段数(TCP数据以段为单位传输,反映TCP传输频率);
  • retrans/s:每秒TCP重传段数(核心质量指标),大于0说明网络不稳定、丢包导致重传,需联动EDEV指标排查丢包;
  • estab/s:当前建立的TCP连接数(持续过高可能导致服务端连接数超限)。

2.4 历史网络数据回放(sar -n DEV -f /var/log/sa/sa27 -s 14:00:00 -e 14:30:00)

回放指定时间段的网卡收发历史数据,用于复盘网络异常(如业务高峰带宽突增、历史丢包),输出格式与实时监控一致,仅增加时间范围限制:

Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)     27/2026         _     PU)

14:00:01 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
14:10:01 PM      eth0      5.00      3.00      0.32      0.21      0.00      0.00      0.00
14:20:01 PM      eth0     80.00     60.00      5.12      3.84      0.00      0.00      0.00
14:30:01 PM      eth0      6.00      4.00      0.38      0.25      0.00      0.00      0.00
Average:         eth0     30.33     22.33      1.94      1.43      0.00      0.00      0.00   (4 C_x86_64    01/

解读:从历史数据可见14:20左右eth0的rxpck/s、txpck/s突增,对应业务高峰时段的网络请求增长,可联动CPU监控(sar -u -f sa27)判断是否因网络请求导致CPU负载升高。

三、sar网络监控实战场景示例

3.1 日常网络带宽巡检(推荐)

sar -n DEV,EDEV 2 5 -h  # 每2秒采集一次,共5次,同时监控收发与错误,可读格式
# 重点观察rxkB/s、txkB/s(带宽占用)和rxerr/s、rxdrop/s(错误与丢包),快速排查基础网络问题

3.2 排查TCP重传与丢包问题

sar -n DEV,EDEV,TCP 1 10  # 同时监控网卡收发、错误、TCP重传,每1秒采集一次,共10次
# 若retrans/s>0且rxdrop/s>0,说明丢包导致TCP重传,优先排查带宽或链路问题

3.3 复盘历史网络异常(故障溯源)

# 回放27日15:00-15:10期间的网卡错误数据,排查当时是否存在丢包
sar -n EDEV -f /var/log/sa/sa27 -s 15:00:00 -e 15:10:00

# 导出历史数据为文本,便于后续分析
sar -n DEV -f /var/log/sa/sa27 -s 15:00:00 -e 15:10:00 > sar_network_log_27.txt

3.4 监控指定网卡(排除无关网卡干扰)

# 仅监控eth0网卡的收发情况,每3秒采集一次,无限采集
sar -n DEV 3 | grep eth0
# 适合服务器有多块网卡(如业务网卡eth0、管理网卡eth1)的场景,聚焦核心网卡

3.5 长期采集网络数据(自定义存储)

# 每5秒采集一次网卡收发与TCP数据,无限采集并保存到指定文件
sar -n DEV,TCP 5 0 -o /data/sar_network_data.sar
# 后续可通过sar -n DEV -f /data/sar_network_data.sar 回放数据,适合长期跟踪网络趋势

四、关键误区与注意事项

  1. 误区:忽略回环网卡(lo)数据 sar默认显示所有网卡,lo(回环网卡)的rxkB/s、txkB/s仅反映系统内部进程通信(如本地服务调用),与外部网络无关,排查外部网络问题时需过滤lo(如grep -v lo),避免误判带宽占用。
  2. 历史数据与系统时间同步 回放历史数据时,需确保系统时间准确(与采集时一致),否则-s、-e参数指定的时间范围可能无数据;若历史文件缺失,需检查sysstat服务是否正常运行(systemctl status sysstat)。
  3. 指标单位换算误区 sar网络速率单位默认是KiB/s(1KiB=1024字节),而非KB/s(1KB=1000字节),换算为Mbps需乘以8/1024(如125000KiB/s ×8/1024≈1000Mbps),避免因单位换算错误导致带宽评估偏差。
  4. 协议层指标与硬件指标联动 仅TCP重传(retrans/s>0)无法定位根因,需联动EDEV(是否丢包)、DEV(带宽是否满)、CPU(%system是否升高)综合判断:是链路丢包、带宽满负荷,还是CPU处理能力不足导致TCP连接异常。
  5. 权限与文件访问限制历史数据文件(saXX)默认仅root用户可读取,普通用户需通过sudo权限访问;自定义存储数据文件时,需确保存储目录有足够空间(长期采集可能生成大容量文件)。
  6. 不同系统的sar版本差异 低版本sysstat(如CentOS 7默认版本)的TCP监控指标较简略,无retrans/s、estab/s等字段,需升级sysstat版本(yum update sysstat)才能获取完整协议层指标。

五、补充说明

sar网络监控的核心优势在于“多维度联动+历史回放”,可与sar的CPU、内存、磁盘I/O监控能力结合,快速定位“网络-系统”联动故障(如网络丢包导致CPU等待、带宽满负荷导致业务响应变慢)。若需更精细化的网络监控(如按端口统计带宽、抓包分析),可配合iftop(端口级带宽监控)、tcpdump(抓包)、nload(实时带宽可视化)等工具,形成“宏观统计-微观分析”的完整网络排查体系。此外,sar网络数据可通过脚本解析,提取核心指标(如rxkB/s、retrans/s),实现自动化告警与趋势分析。

posted @ 2026-01-26 17:19  向闲而过  阅读(2)  评论(0)    收藏  举报