Skip to main content

在 Ubuntu 18.04 上查看指定时间系统负载情况

在 Ubuntu 18.04 上查看昨晚 20 点左右的系统负载情况,通常我们需要依赖一些工具来分析和查看历史性能数据。以下是几种方法,可以帮助你获取所需的信息:

1. 使用 sar(System Activity Reporter)

sar 是一个非常强大的系统性能监控工具,可以查看历史负载情况。首先,你需要确保 sysstat 包已安装,因为 sar 工具包含在这个包里。

安装 sysstat

sudo apt update
sudo apt install sysstat

启用 sysstat 服务
默认情况下,sysstat 可能没有启用收集数据,你需要启用该服务:

sudo systemctl enable sysstat
sudo systemctl start sysstat

查看负载数据
sar 默认每 10 分钟收集一次数据,数据会存储在 /var/log/sysstat/ 目录下。你可以使用以下命令查看负载数据:

sar -u -f /var/log/sysstat/sa<day_of_month> -s <start_time> -e <end_time>

例如,如果你想查看昨天(假设是 7 月 22 日)晚上 20:00 到 20:30 的 CPU 使用情况:

sar -u -f /var/log/sysstat/sa22 -s 20:00:00 -e 20:30:00

其他常见的 sar 参数

  • -u:查看 CPU 使用情况。

  • -r:查看内存使用情况。

  • -q:查看队列长度(负载情况)。

2. 使用 uptimew

如果你只关心系统的负载而不关心其他细节,可以使用 uptimew 命令来查看系统的当前负载情况。虽然这些工具不提供历史数据,但可以用来查看当前的负载状态。

  • 查看当前系统负载:

    uptime
    
  • 查看当前登录用户和负载:

    w
    

这些工具展示的信息通常包括系统负载、用户数和最近活动。

3. 查看 /var/log/syslogdmesg

syslog 文件和 dmesg 输出中有一些系统负载的间接信息。如果有异常情况(比如系统负载过高时),这些日志可能会记录相关的错误或警告信息。

  • 查看 /var/log/syslog

    grep "load" /var/log/syslog
    
  • 使用 dmesg 查看内核日志:

    dmesg | grep "load"
    

4. 使用 htoptop(实时查看负载)

htoptop 工具可以让你实时查看系统负载情况,包括 CPU 使用率、内存、进程等信息。这些工具只会显示当前的负载,但对于实时监控有很大帮助。

  • 安装 htop(如果没有安装):

    sudo apt install htop
    
  • 启动 htop

    htop
    
  • 或者使用 top(默认工具):

    top
    

5. 使用 atop(适用于高级负载分析)

atop 是另一个非常强大的性能监控工具,可以提供更为详细的历史性能数据,类似于 sar,但提供了更多的性能指标。

安装 atop

sudo apt install atop

查看历史负载
atop 会将每分钟的系统性能数据保存在 /var/log/atop/ 目录中。你可以使用以下命令查看指定日期的数据:

atop -r /var/log/atop/atop_<date>.gz

例如,查看 7 月 22 日的负载数据:

atop -r /var/log/atop/atop_2025-07-22.gz

6. 使用 journalctl 查看系统日志

journalctlsystemd 的日志查看工具,它可以提供关于系统负载的详细日志信息,特别是在 systemd 日志中记录的服务崩溃、资源消耗等事件。

  • 查看指定时间段的系统日志:

    journalctl --since "2025-07-22 20:00:00" --until "2025-07-22 20:30:00"
    
  • 如果你想查看所有负载相关的日志:

    journalctl | grep "load"
    

从你的输出信息来看,sysstat 服务已经启用并正在运行,但 sar 无法找到历史数据文件。出现的错误 Cannot open /var/log/sysstat/sa23: No such file or directory 表示当前没有收集到 sa23 文件,这是因为 sysstat 收集的数据文件是按天生成的,而目前没有历史数据文件。

解决方案:

  1. 等待数据收集
    sysstat 会每隔一段时间(默认每 10 分钟)收集一次数据并保存到 /var/log/sysstat/ 目录下的 sa<day_of_month> 文件中。因为你的 sysstat 服务刚刚启动,所以在这个月(23号)之前没有历史数据。如果你需要查看今天的历史数据,你必须等一段时间,直到它开始收集数据。

    你可以使用以下命令查看 /var/log/sysstat/ 目录:

    ls /var/log/sysstat/
    

    如果数据收集顺利,它将在该目录下生成名为 sa23(23号)的文件。你可以稍后使用 sar 查看数据:

    sar -u -f /var/log/sysstat/sa23
    
  2. 手动触发数据收集
    你也可以手动触发 sysstat 数据收集,但通常它是自动运行的。如果你急需当前负载数据并希望它立刻记录,可以使用以下命令手动触发 sadc(系统活动数据收集器):

    sudo sadc -S DISK 1 /var/log/sysstat/sa$(date +\%d)
    

    这条命令会立即收集当前的数据,并将其存储为当天的 sa<day> 文件。随后,你就可以使用 sar 来查看该数据。

  3. 实时监控(sar
    目前,你可以使用 sar 的实时监控模式查看当前的 CPU 使用情况。你已经尝试了 sar -u 1 5 来查看实时的 CPU 使用情况。此命令每秒钟输出一次系统负载数据。

    你也可以用以下命令来监控其它资源:

    sar -r 1 5  # 查看内存使用情况
    sar -q 1 5  # 查看负载队列和上下文切换情况
    
  4. 查看 sysstat 配置
    你可以查看 /etc/default/sysstat 文件,确保它设置为正确的启用模式:

    sudo nano /etc/default/sysstat
    

    确保以下内容:

    ENABLED="true"
    
  5. 重新启动 sysstat 服务
    如果你在配置中做了任何更改,或者数据收集似乎没有正常工作,你可以尝试重新启动 sysstat 服务:

    sudo systemctl restart sysstat
    

结论

  • 当前 sysstat 数据收集还没有历史数据,因为数据收集刚启用。你可以等一段时间,等待 sar 收集到新的数据文件。

  • 如果急需查看负载情况,使用 sar -u 1 5 来查看实时数据。

  • 确保 sysstat 服务正确配置并已启动。

等待一段时间后,你应该能够查看到数据文件并使用 sar 查看历史性能数据。

是的,sar 可以只查看指定网卡(如 eth0)的记录,你只需加上 grep 或使用 awk 过滤,或用 sadf 工具格式化提取。


✅ 方法一:使用 sar -n DEV + grep eth0

如果你在查看实时或历史文件时:

sar -n DEV -f /var/log/sysstat/sa24 | grep 'eth0'

示例输出:

10:05:01 AM      eth0      1.06      0.82      0.11      0.06      0.00      0.00      0.53      0.00
10:15:01 AM      eth0    106.82     25.62    127.40     30.38      0.00      0.00      0.45      0.10
Average:         eth0     21.39      5.11     25.31      5.99      0.00      0.00      0.44      0.02

✅ 方法二:用 awk 精确输出时间和带宽(比如 rxkB/stxkB/s

sar -n DEV -f /var/log/sysstat/sa24 | awk '$3=="eth0" {print $1, $2, $6, $7}'

示例输出:

10:05:01 AM 0.11 0.06
10:15:01 AM 127.40 30.38
Average:    25.31 5.99

其中 $6$7 分别是 rxkB/stxkB/s(接收/发送速度)


✅ 方法三:用 sadf 以 CSV / JSON / JSON-pretty 格式提取 eth0

sadf -d /var/log/sysstat/sa24 -- -n DEV | grep '"eth0"'

或者格式化为 JSON:

sadf -j /var/log/sysstat/sa24 -- -n DEV | jq '.sysstat.hosts[0].statistics[] | select(.network_iface.iface=="eth0")'

这样方便你用脚本分析。


✅ 小技巧:仅显示某时间段的 eth0 流量

比如查看 09:0011:00

sar -n DEV -s 09:00:00 -e 11:00:00 -f /var/log/sysstat/sa24 | grep eth0

总结

目标 命令
查看 eth0 所有记录 `sar -n DEV -f /var/log/sysstat/saXX
提取 rx/tx 速率 awk '$3=="eth0" {print $1, $2, $6, $7}'
精确时间段 sar -s HH:MM:SS -e HH:MM:SS
JSON / CSV 格式分析 sadf -j / sadf -d

如果你想生成图表(比如 CSV 出图)或自动脚本日报,我可以继续帮你写。是否需要?

我们可以用 sar + awk + gnuplot 来每日生成 eth0 的 rx/tx 带宽折线图,并自动生成日报(HTML 或 PDF 都可以)。

以下是完整方案(适用于 Ubuntu 18.04):


✅ 一、准备环境

sudo apt update
sudo apt install sysstat gnuplot

✅ 二、脚本:生成带宽折线图 + 简要日报(HTML)

假设我们统计 eth0 网卡数据:

脚本 /usr/local/bin/gen_net_report.sh

#!/bin/bash

# 日期变量
DATE=$(date +%d)
FILE="/var/log/sysstat/sa$DATE"
TMPDIR="/tmp/net_report"
mkdir -p "$TMPDIR"

# 数据文件
DATFILE="$TMPDIR/net_data.dat"
PNGFILE="$TMPDIR/net_usage_$DATE.png"
HTMLFILE="$TMPDIR/net_usage_$DATE.html"

# 生成 rx/tx 数据文件
sar -n DEV -f "$FILE" | awk '$3=="eth0" && $1 ~ /[0-9]/ {print $1, $2, $6, $7}' > "$DATFILE"

# 生成 gnuplot 脚本
GNUPLOT_SCRIPT="$TMPDIR/plot_script.gp"
cat > "$GNUPLOT_SCRIPT" <<EOF
set terminal png size 1000,600
set output "$PNGFILE"
set title "Network Usage (eth0) - $DATE"
set xdata time
set timefmt "%I:%M:%S %p"
set format x "%H:%M"
set xlabel "Time"
set ylabel "kB/s"
set grid
plot "$DATFILE" using 1:3 title "rxkB/s" with lines lw 2 lt rgb "blue", \
     "$DATFILE" using 1:4 title "txkB/s" with lines lw 2 lt rgb "red"
EOF

# 执行 gnuplot
gnuplot "$GNUPLOT_SCRIPT"

# 生成 HTML 简报
cat > "$HTMLFILE" <<EOF
<html>
<head><title>Network Daily Report - eth0</title></head>
<body>
<h2>Network Usage Report - $(date '+%Y-%m-%d')</h2>
<p>Interface: <strong>eth0</strong></p>
<img src="net_usage_$DATE.png" alt="Network Usage">
</body>
</html>
EOF

# 输出结果提示
echo "📊 图表保存路径: $PNGFILE"
echo "📄 HTML报表路径: $HTMLFILE"

✅ 三、添加计划任务(每天自动运行)

编辑 crontab:

sudo crontab -e

加入每天早上 7 点运行:

0 7 * * * /usr/local/bin/gen_net_report.sh

✅ 四、结果展示(示意)

运行后将在 /tmp/net_report/ 下生成:

  • 折线图 net_usage_25.png

  • 简易日报 HTML net_usage_25.html

你可将 HTML 报表放到内网服务器上,用浏览器查看。


✅ 五、可选拓展

  • 改为输出 PDF(配合 wkhtmltopdf

  • 自动发日报邮件(mailx

  • 报表集成多个网卡、CPU、内存

  • 每小时生成图而非每日


是否需要我帮你扩展为自动发邮件或支持多日历史图?