Linux | How to collect Linux Performance Log with Sysstat OS command

瀏覽人次: 1039
2024-08-26 更新

Sysstat 日誌收集說明

利用 Linux 系統自帶的系統命令,啓動 Linux 系統效能日誌的持續收集,無需額外安裝軟體,不會影響應用系統的正常運行和安全性。後續經由運算處理、圖形化展示、和專業團隊的判讀,提出系統調優和維運的依據,以保證核心業務系統高效穩定的運行,BiMAP 擁有許多大企業建置大數據的經驗,打造 iPOC 關聯式效能分析平台,能幫助更多企業維運分析系統收集核心應用運行過程中更有效率的解決問題。

OS 效能日誌收集項目

Linux的效能日誌有以下幾種自帶的系統命令可以進行收集,例如 top 可以顯示即時的系統負載狀態、vmstat 命令提供有關整體系統性能的詳細信息,包括內存使用情況、I/O 速率和 CPU 負載,iostat 指令可用來監視監視系統輸入/輸出、裝置負載。

  • 使用 sar 命令收集 CPU 所有核數的負載和 Filesystem (Mount point) 容量的使用情形
  • 使用 vmstat 命令收集 Memory 和 Paging 資訊
  • 使用 iostat 命令收集 LUN (邏輯分區) 的 I/O 負載
  • 使用 top 命令收集 process 的負載

安裝 sysstat 命令

執行以下命令以安裝 sysstat

sudo apt update sudo apt-get install sysstat

啟用 sysstat

編輯配置文件:

sudo vi /etc/default/sysstat

ENABLED=false 改為 ENABLED=true

ENABLED="true"

重啟服務:

sudo systemctl restart sysstat

建立自動化收集腳本

建立日誌存放資料夾:

mkdir /home/bimap/sardata

編輯腳本文件:

vim /home/bimap/bin/ipoc_sar.sh

ipoc_sar.sh 內容如下:

#!/bin/bash export LC_ALL=C  ################################################# ########        設定環境變數               ######## ################################################# Host=$(hostname) Seconds=${1:-60}   # 默認每次間隔60秒,可以通過參數傳遞修改 Count=${2:-60}     # 默認每60次收集數據,可以通過參數傳遞修改 RetentionDays=30   # 超過30天的檔案不做保留,需要的話請開啟尾段的註解 Yesterday=$(perl -MPOSIX -le 'print strftime "%y%m%d", localtime(time()-86400)') DateTime=$(perl -MPOSIX -le 'print strftime "%Y%m%d%H%M", localtime') LogDir="/home/bimap/sardata" SentDir="$LogDir/sent" BackupDir="$LogDir/backup" UploadDir="/home/sftpuser/master"  # 日誌上傳路徑  # SCP 目標路徑設定 SCP_TARGET="[email protected]:$UploadDir"  # FTP 設定參數 FTPURL="10.99.1.106" FTPUSER="sftpuser" FTPPASS="1qaz2wsx"  # 上傳方法選擇:可選 "ftp"、"mv" 或 "scp" UPLOAD_METHOD="scp"  if [[ ! " ftp mv scp " =~ " ${UPLOAD_METHOD} " ]]; then   echo "未知的上傳方式: $UPLOAD_METHOD. 請選擇 'ftp', 'mv' 或 'scp'."   exit 1 fi  echo "上傳方式: $UPLOAD_METHOD" echo "收集間隔: $Seconds 秒, 收集次數: $Count 次"  ################################################# ########         執行收集命令              ######## ################################################# Header="===== CollectLinuxServer: $Host-sar $DateTime ====="  Cpu="$Host-$DateTime.cpu" Net="$Host-$DateTime.network" Mem="$Host-$DateTime.mem" Diskio="$Host-$DateTime.diskio" Process="$Host-$DateTime.process" Disk="$Host-$DateTime.disk"  mkdir -p $SentDir mkdir -p $BackupDir mkdir -p $LogDir  cd $LogDir # 獲取舊的sar文件 Files=$(ls $Host* 2> /dev/null) if [ -z "$Files" ]; then   echo "沒有舊的文件需要移動" else   # 將舊文件移動到SentDir   mv $Files $SentDir fi  # 收集新的sar文件 for i in $Cpu $Net $Mem $Diskio $Process $Disk do     touch $i && echo $Header > $i done  sar -P ALL $Seconds $Count >> $Cpu & sar -n DEV $Seconds $Count >> $Net & vmstat -n $Seconds $Count >> $Mem & iostat -tkdx $Seconds $Count >> $Diskio & top -d $Seconds -n $Count -b -i >> $Process & df -k | head -n 1 >> $Disk for i in `seq 1 $Count`; do     echo "disk: $i `date +"%D %T"`" >> $Disk     df -k | awk '{if ($3 ~/[0-9]/) print $0}' >> $Disk     sleep $Seconds done  sleep 10  ################################################# ########      根據選擇的方式上傳文件         ######## ################################################# cd $SentDir  case $UPLOAD_METHOD in   "ftp")     if [ "$(ls -A $SentDir)" ]; then       ftp -inv $FTPURL << EOF > $LogDir/ftplog.txt user $FTPUSER $FTPPASS binary mput * bye EOF       msg=$(grep "complete" $LogDir/ftplog.txt)       if [ -n "$msg" ]; then           mv $SentDir/*.* $BackupDir       fi       rm -rf $LogDir/ftplog.txt     fi     ;;    "mv")     if [ "$(ls -A $SentDir)" ]; then       mv $SentDir/* $UploadDir     fi     ;;    "scp")     if [ "$(ls -A $SentDir)" ]; then       scp * $SCP_TARGET       if [ $? -eq 0 ]; then           mv $SentDir/*.* $BackupDir       fi     fi     ;;    *)     echo "未知的上傳方式: $UPLOAD_METHOD"     exit 1     ;; esac  ################################################# ########          壓縮並備份             ######## ################################################# # 1. 檢查並將昨天的檔案,保存成一份壓縮檔 cd $BackupDir tar_filename="${Yesterday}-${Host}.tar.gz" if ls $Host-$Yesterday*.* 1> /dev/null 2>&1; then     tar -czvf "$tar_filename" $Host-$Yesterday*.* && rm -rf $Host-$Yesterday*.* else     echo "No files found for $Yesterday, skipping compression." fi  # 2. 定期將檔案清除,需要的話請開啟註解並檢查RetentionDays參數設定 # files=$(find $BackupDir/*.tar.gz -maxdepth 1 -mtime +$RetentionDays -type f 2>/dev/null) # if [ -z "$files" ]; then #   echo "沒有找到過期檔案,無需清除" # else #   find $BackupDir/*.tar.gz -maxdepth 1 -mtime +$RetentionDays -type f -delete 2>/dev/null # fi  exit

授予腳本執行權限:

chmod +x /home/bimap/bin/ipoc_sar.sh

設定 crontab 每小時執行一次自動化收集腳本

編輯 crontab:

crontab -e

添加以下行:

0 * * * * /home/bimap/bin/ipoc_sar.sh

日誌檔案範例

執行當下小時會產生6種日誌檔案 (.cpu、.disk、.diskio、.mem、.network、.process):

[root@bimap sardata]$ ll /home/bimap/sardata total 376 drwxr-xr-x. 2 root root      6 Mar 29 12:00 sent drwxr-xr-x. 2 root root  24576 Mar 29 12:00 backup -rw-r--r--. 1 root root  26514 Mar 29 12:33 bimap-202303291200.cpu -rw-r--r--. 1 root root  29388 Mar 29 12:33 bimap-202303291200.disk -rw-r--r--. 1 root root  19360 Mar 29 12:33 bimap-202303291200.diskio -rw-r--r--. 1 root root   3085 Mar 29 12:33 bimap-202303291200.mem -rw-r--r--. 1 root root  10212 Mar 29 12:33 bimap-202303291200.network -rw-r--r--. 1 root root 222572 Mar 29 12:33 bimap-202303291200.process

整點會自動將上個小時檔案傳送後移動到 backup 資料夾,昨天的檔案會自動壓縮為 tar.gz 檔:

[root@bimap sardata]$ ll /home/bimap/sardata/backup  -rw-r--r--. 1 root root 1064377 Mar 24 01:00 bimap-20230323.tar.gz -rw-r--r--. 1 root root 1064810 Mar 25 01:00 bimap-20230324.tar.gz -rw-r--r--. 1 root root 1076652 Mar 26 01:00 bimap-20230325.tar.gz -rw-r--r--. 1 root root 1083895 Mar 27 01:00 bimap-20230326.tar.gz -rw-r--r--. 1 root root 1317158 Mar 28 01:00 bimap-20230327.tar.gz -rw-r--r--. 1 root root 1443695 Mar 29 01:00 bimap-20230328.tar.gz
快速跳轉目錄

✦ 集先鋒 Bimap – 企業建置高速穩定的海量日誌分析平台✦

集中不同的結構化資料和非結構化日誌,並進行關聯性的大數據整合,客製化儀表版、自訂事件告警、機器學習等等,以滿足各種大數據的應用場景和解決方案。