声明:本篇文章地址为 使用sar+ksar监控服务器日志 转载或复制请注明
sar是 sysstat 中的一个工具之一,sysstat 里面包含了很多工具,可以对系统进行详细的统计
sudo apt install sysstat
参考:GitHub - sysstat/sysstat:Linux 的性能监控工具https://github.com/sysstat/sysstat
使用apt安装虽然快捷,但是不能安装指定包的版本,比如22.04中sysstat的版本是12.05.2,但是12.05.2版本无法正常写入记录到sysstat日志文件(关于这个问题,还可以参考 启动Sysstat 这一小节的解决方案),这个时候就可以dpkg就派上用场了,使用dpgk在22.04版本上安装12.2.0版本的sysstat,就可以正常使用sar了。
查看服务器架构
dpkg --print-architecture
在Packages for Linux and Unix - pkgs.org 搜索sysstat,找到对应ubuntu版本的架构,比如我的是amd64,就找到Ubuntu Main amd64,点进去之后搜索Download,Binary Package是二进制包,可以直接下载使用。
我这里选择的是20.04的sysstat,版本12.2.0-2的sysstat。
wget --no-check-certificate http://archive.ubuntu.com/ubuntu/pool/main/s/sysstat/sysstat_12.2.0-2_amd64.deb
当然如果只有rpm的二进制包,也可以使用alien将其转换成deb包:
sudo apt install alien
sudo alien -k sysstat_12.2.0-2_amd64.rpm
安装deb包
sudo dpkg -i sysstat_12.2.0-2_amd64.deb
如果报错依赖问题,apt来管理依赖
sudo apt-get -f install
默认sar是不会自动执行的(如果上一步,你能看到结果,这一步可以跳过),这个时候需要我们手动开启,重启后才会生效(重启后面会讲)
sudo vi /etc/default/sysstat
把false修改为true
sar的默认定时任务cron
先查看cron默认配置
sudo vim /etc/cron.d/sysstat
接下来修改默认配置,将其修改为合适的时间跨度。
# Activity reports every 10 minutes everyday
#5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
* * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1# Additional run at 23:59 to rotate the statistics file
59 23 * * * root command -v debian-sa1 > /dev/null && debian-sa1 60 2
修改sar存储时间和压缩天数
sudo vi /etc/sysstat/sysstat
sar的默认保存时间
默认保存时间7天,可以修改 HISTORY=7 为你希望的数字。解释如下
#“If value is greater than 28, then log files are kept in multiple directories, one for each month.” //如果值大于28天,日志将会保存到多个目录,每个月一个目录
#HISTORY=7
HISTORY=180
sar压缩天数设置
默认设置时间为10天,超过十天的会压缩成压缩包,sar就无法立刻查看压缩后的数据
# Compress (using gzip or bzip2) sa and sar files older than (in days):
#COMPRESSAFTER=10COMPRESSAFTER=28
在.profile文件中新增一行,再次打开一个新的窗口,sar就是24小时制了
sed -i '$a export LC_TIME=\"POSIX\"' .profile
在sed命令中,$a是一个命令,其作用是向文本的最后一行追加内容。具体来说,$表示匹配最后一行,而a表示追加文本。
启动sysstat
如果显示Active: inactive (dead),那么就需要启动sysstat
sudo systemctl start sysstat
或者
sudo /etc/init.d/sysstat start
关于init.d和systemctl两种启动方式的由来,请查看Systemd 入门教程:命令篇 - 阮一峰的网络日志 (ruanyifeng.com)
执行一条写入命令,产看sar是否可用
有的版本(比如上面的22.04版本)安装sysstat后日志文件不能正常写入,其实可以使用下面的命令测试
sudo /usr/lib/sysstat/debian-sa1 1 1
再次执行sar,如果能看到记录的默认信息,就说明是正常的
如果此时没有看到输出,需要确保sysstat是否开启数据收集
执行以下命令
sudo systemctl enable sysstat
这个时候再次执行写入命令,应该就可以看到了。
如果执行debian-sa1后执行sar命令仍然看不到记录,可以将debian-sa1命令更换为以下命令
sudo /usr/lib/sysstat/sa1 1 1
除了上面的问题,可能另一个问题,就是定时任务每分钟写入似乎不生效,此时可以修改定时任务如下:
sudo vim /etc/cron.d/sysstat
将原来的内容替换成如下内容
* * * * * root /usr/lib/sysstat/sa1 1 1
再次重启sysstat
sudo systemctl start sysstat
或者
sudo /etc/init.d/sysstat start
再次执行 sar -u 就可以看到数据了
重启后,会根据保存到 /var/log/sysstat 目录下,以sa
$ tree /var/log/sysstat/
/var/log/sysstat/
├── 202110
│?? └── sa08
└── sa08 -> 202110/sa08
sar [options] [-A] [-o file] t [n]
参数说明
-A:所有报告的总和
-B:报告内存分页
-b:显示I/O和传送速率的统计信息
-d:输出每一个块设备的活动信息,和-p搭配,可以看到磁盘名称
-f filename,查看某天的数据
-o filename 表示将命令结果以二进制格式存放在文件中,file 是文件名
-P [num|ALL] 表示查看某个CPU核心或所有CPU核心运行情况
-q:输出cpu平均负载
-r:输出内存和交换空间的统计信息
-u:输出CPU使用情况的统计信息
-v:输出inode、文件和其他内核表的统计信息
-W:输出系统交换活动信息
-num 查看前num天的数据
怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看
怀疑内存存在瓶颈,可用 sar -B、sar -r 和 sar -W 等来查看
怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看
输出cpu、内存、I/O,可用 sar -urbq
sar -u 1 3 –human
Linux 4.15.0-122-generic (ubuntu) 07/04/2022 _x86_64_ (64 CPU)
05:27:49 PM CPU %user %nice %system %iowait %steal %idle
05:27:50 PM all 1.5% 0.0% 0.6% 2.7% 0.0% 95.2%
05:27:51 PM all 1.5% 0.0% 0.7% 2.5% 0.0% 95.3%
05:27:52 PM all 1.6% 0.0% 0.7% 2.4% 0.0%