B i M A P

Linux | How to collect Linux Performance Log with OS command

利用 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 的負載


第一步:建立自動化收集腳本

1. 建立日誌要存放的資料夾

$ vim /home/bimap/sardata

2.在 bin 資料夾底下新增 ipoc_sar.sh

vim /home/bimap/bin/ipoc_sar.sh

3.程式內容如下,請依據實際的環境修改後貼上存檔,為了等一下方便測試,我們先將收集頻率的參數設定5秒,收集次數設2次

#!/bin/bash
export LC_ALL=C

#################################################
########             set env             ########
#################################################
Host=`hostname`
Seconds=5
Count=2
RetentionDays=30 # 超過30天的檔案不做保留
LogDir="/home/bimap/sardata"
Yesterday=`date -d "yesterday" +%Y%m%d`
fileName=$Host-`date +%Y%m%d%H%M`
#ScpPath="[email protected]:~/ipoc/uploadDir" #需要上傳到遠端server的設定

#################################################
########        sent to uploadDir        ########
#################################################

if [ ! -d $logDir/backup ] ; then
    mkdir $logDir/backup
fi
# 需要上傳到遠端server的話要建立一個sent資料夾
#if [ ! -d $LogDir/sent ] ; then
#    mkdir $LogDir/sent
#fi
# 本機收集不需上傳的話,檔案直接移到backup資料夾存放
if [[ "${logDir}" =~ .*\.* ]]; then
mv $LogDir/*.* $LogDir/backup

# 需要上傳到遠端主機的話,先移到sent資料夾,傳送成功後再移到backup資料夾存放
# mv $LogDir/*$HourAgo* $LogDir/sent
# scp -i ~/.ssh/server.key $LogDir/sent/* $ScpHost && mv $LogDir/sent/* $LogDir/backup
fi

#################################################
########         collect command         ########
#################################################

cd $LogDir
sar -P ALL $Seconds $Count >> $fileName.cpu &
sar -n DEV,EDEV $Seconds $Count >> $fileName.network &
sar -F MOUNT $Seconds $Count >> $fileName.filesystem &
vmstat -nt -S m $Seconds $Count >> $fileName.mem &
iostat -tkdx $Seconds $Count >> $fileName.diskio &
top -d $Seconds -n $Count -b -i >> $fileName.process &

#################################################
########          zip and backup         ########
#################################################

# 1. 檢查將昨天的檔案,保存成一份壓縮檔
cd $LogDir/backup
ls | grep -q $Yesterday[0-9]
if [ $? -eq 0 ]; then
    tar zcvf $Host"-"$Yesterday.tar.gz *$Yesterday* && rm *$Yesterday[0-9]*
fi

# 2. 定期將檔案清除,需要的話請開啟註解並檢查RetentionDays參數設定
#find $LogDir/backup/*.tar.gz -maxdepth 1 -mtime +$RetentionDays -type f -delete
exit

4. 啟動測試程式

$ chmod +x ipoc_sar.sh
$ ./ipoc_sar.sh

5. 約過10秒程式執行完畢後,收集Log的資料夾底下會產生6種日誌檔案(.cpu、.filesystem、.diskio、.mem、.network、.process)

[root@bimap sardata]$ ll /home/bimap/sardata
total 376
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.filesystem
-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
drwxr-xr-x. 2 root root      6 Mar 29 12:00 sent

6. 確認無誤後,將ipoc_sar.sh程式修改為正式收集的參數,收集頻率設定 60 秒,收集次數設定 60 次,代表執行後會收集一個小時的 Log

#!/bin/bash
export LC_ALL=C

#################################################
########             set env             ########
#################################################
Host=`hostname`
Seconds=60
Count=60
RetentionDays=30 # 超過30天的檔案不做保留
LogDir="/home/bimap/sardata"
Yesterday=`date -d "yesterday" +%Y%m%d`
fileName=$Host-`date +%Y%m%d%H%M`
#ScpPath="[email protected]:~/ipoc/uploadDir" #需要上傳到遠端server的設定

#################################################
########        sent to uploadDir        ########
#################################################

if [ ! -d $logDir/backup ] ; then
    mkdir $logDir/backup
fi
# 需要上傳到遠端server的話要建立一個sent資料夾
#if [ ! -d $LogDir/sent ] ; then
#    mkdir $LogDir/sent
#fi
# 本機收集不需上傳的話,檔案直接移到backup資料夾存放
if [[ "${logDir}" =~ .*\.* ]]; then
mv $LogDir/*.* $LogDir/backup
# 需要上傳到遠端主機的話,先移到sent資料夾,傳送成功後再移到backup資料夾存放
# mv $LogDir/*$HourAgo* $LogDir/sent
# scp -i ~/.ssh/server.key $LogDir/sent/* $ScpHost && mv $LogDir/sent/* $LogDir/backup
fi

#################################################
########         collect command         ########
#################################################

cd $LogDir
sar -P ALL $Seconds $Count >> $fileName.cpu &
sar -n DEV,EDEV $Seconds $Count >> $fileName.network &
sar -F MOUNT $Seconds $Count >> $fileName.filesystem &
vmstat -nt -S m $Seconds $Count >> $fileName.mem &
iostat -tkdx $Seconds $Count >> $fileName.diskio &
top -d $Seconds -n $Count -b -i >> $fileName.process &

#################################################
########          zip and backup         ########
#################################################

# 1. 檢查將昨天的檔案,保存成一份壓縮檔
cd $LogDir/backup
ls | grep -q $Yesterday[0-9]
if [ $? -eq 0 ]; then
    tar zcvf $Host"-"$Yesterday.tar.gz *$Yesterday* && rm *$Yesterday[0-9]*
fi

# 2. 定期將檔案清除,需要的話請開啟註解並檢查RetentionDays參數設定
#find $LogDir/backup/*.tar.gz -maxdepth 1 -mtime +$RetentionDays -type f -delete
exit


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

1. 在 Linux 上設定定時任務

$ crontab -e
0 * * * * /home/bimap/bin/ipoc_sar.sh

• 整點會自動將上個小時檔案傳送後移動到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
-rw-r--r--. 1 root root   48998 Mar 29 01:00 bimap-202303290000.cpu
-rw-r--r--. 1 root root   50010 Mar 29 01:00 bimap-202303290000.filesystem
-rw-r--r--. 1 root root   34158 Mar 29 01:00 bimap-202303290000.diskio
-rw-r--r--. 1 root root    5378 Mar 29 01:00 bimap-202303290000.mem
-rw-r--r--. 1 root root   18864 Mar 29 01:00 bimap-202303290000.network
-rw-r--r--. 1 root root  397305 Mar 29 01:00 bimap-202303290000.process
延伸閱讀
zoe的大頭照
Bimap 助教

在大數據時代的到來,協助企業擁抱數位轉型,提供易於使用和快速的監控解決方案,並結合教育培訓人才願景,為企業知識創新的貢獻,建立良好的企業夥伴關係。