Linux 要監控系統的 CPU / Memory / IO 等等,sar 是很穩定的小工具。
Debian Linux sar 的安裝與設定
sar 安裝
Debian / Ubuntu Linux 將 sar 包在 sysstat 套件裡面。
- apt-get install sysstat
- vim /etc/default/sysstat # 啟用
ENABLED="false"
改成
ENABLED="true" - vim /etc/cron.daily/sysstat # 啟用
ENABLED=false
改成
ENABLED=true - vim /etc/cron.d/sysstat # 預設 10分鐘記錄一次
5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
改成 (5分鐘記錄一次)
*/5 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1 - service sysstat restart
- 到此即可
Debian 11 (bullseye) 之後的安裝設定方式
- apt install sysstat
- /etc/systemd/system/sysstat.service.wants/sysstat-collect.timer → /lib/systemd/system/sysstat-collect.timer.
- /etc/systemd/system/sysstat.service.wants/sysstat-summary.timer → /lib/systemd/system/sysstat-summary.timer.
- /etc/systemd/system/multi-user.target.wants/sysstat.service → /lib/systemd/system/sysstat.service.
- 由此支 sysstat.service 可以知道是用 root 執行 /usr/lib/sysstat/sa1 --boot 來寫入 Log
- sudo systemctl enable --now sysstat
- vim /etc/systemd/system/sysstat.service.wants/sysstat-collect.timer # 將 每 10分鐘改成 每5分鐘紀錄一次
OnCalendar=*:00/10
改成
OnCalendar=*:00/5 - sudo systemctl daemon-reload
- systemctl list-timers # 可以看到有沒有在執行
- sudo systemctl enable --now sysstat # 新版可能會沒有成功寫入,再次 enable 以防萬一
問題排解
- 若還是沒有寫入 log,可以在嘗試 systemctl enable,如下語法:
- sudo systemctl enable --now sysstat
- systemctl status sysstat # 查看執行狀態
- 若還是沒有寫入,Debian 可以看執行的程式:/usr/lib/sysstat/debian-sa1
Debug:- 切換成 root 身份,執行
- command -v debian-sa1 > /dev/null && debian-sa1 1 1 # 可一步一步在這邊 Debug
- /usr/lib/sysstat/sa1 1 1 # 上述會呼叫 sa1 來執行,由此就會寫入紀錄
- sysstat 的主要執行程式是 /usr/lib/sysstat/sadc,靠這隻來蒐集資料
- 切換成 root 身份,執行
- Debian Bullseye 之後的版本,在 /usr/lib/sysstat/debian-sa1 裡面有增加一行
- [ ! -d /run/systemd/system ] || exit 0
- 此行是系統有 systemd 的話,就由 systemd 管理,於是程式在此行就結束,若想要強制讓程式執行,將此行註解程式就可以正常繼續往下跑,原本的 cron.d 設定還是可以使用
查看今天到目前為止的 sar 記錄
- sar -A
- sudo sar -A > $(date +
hostname
-%Y-%d-%m-%H-%M.log) # 每小時寫個檔案記錄
sar 常用參數
- sar -A
- sar -b # Report I/O and transfer rate statistics.
- sar -B # Report paging statistics.
- sar -d # Report activity for each block device.
- sar -u ALL # Report CPU utilization. The ALL keyword indicates that all the CPU fields should be displayed.
- sar -q # Report queue length and load averages.
- sar -e hh:mm:ss # 結束時間
- sar -s hh:mm:ss # 開始時間
- ex: sar -A -s 09:50:00 -e 10:10:00 # 指定時間範圍
sar 的資料匯出
- sdaf -d # CSV
- sadf -x # XML
- sadf -j # JSON
sar 繪圖
繪圖可以使用下述套件