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