Linux|How to collect Linux Performance Log with Njmon
njmon 為新一代的 nmon 版本,比起 nmon 可以收集更多的性能和配置數據,並以 json 格式輸出,另外也可以輸出 .influxlp 格式保存到 InfluxDB,再經由 BiMAP 大數據分析平台 BigData 的運算處理、視覺化展示,配合專業團隊進行 Linux 系統全面分析與判讀,提出系統調優和維運的依據,以保證核心業務系統高效穩定的運行。
第一步:安裝 njmon
1. 下載 njmon 安裝檔
$ wget http://sourceforge.net/projects/nmon/files/njmon_linux_binaries_v80.zip
2. 解壓縮 njmon
• 依據用戶實際的 linux 實際的環境和版本,下載到 linux 上
• 解壓縮需要有安裝 zip 命令,sudo apt install zip
$ unzip njmon_linux_binaries_v80.zip
$ ls
ninstall njmon_SLES15_ppc64le_v80
njmon.1.gz njmon_SLES15_x86_64_v80
njmon_RHEL8_ppc64le_v80 njmon_Ubuntu20_ppc64le_v80
njmon_RHEL8_x86_64_v80 njmon_Ubuntu21_x86_64_v80
njmon_SLES12_ppc64le_v80 njmon_Ubuntu22_x86_64_v80
3. 安裝 njmon 在 server 上
• 執行 ninstall
匹配版本
$ chmod +x ninstall
$ ./ninstall
• 有匹配到就會將 njmon 執行檔自動移至 /usr/local/bin
, 出現畫面如下圖所示
HW=x86_64
osname=Ubuntu
osversion=22
Files being installed njmon_Ubuntu22_x86_64_v80
Installing to /usr/local/bin
Set up njmon and nimon commands
No documentation for beta 1
• 沒有完全匹配的系統版本,也可以選擇接近的版號,複製到 /usr/local/bin
底下,重新命名為 njmon
• 本文以 OS 版本 Ubuntu22
為例,安裝 njmon_Ubuntu22_x86_64_v80
版本
• 如果是 Centos 7
版本,可以安裝 njmon_RHEL8_x86_64_v80
版本
$ sudo mv njmon_Ubuntu22_x86_64_v80 /usr/local/bin/njmon
$ sudo chmod +x /usr/local/bin/njmon
4. 建立 njmon 要存放的目錄
$ mkdir /home/bimap/njmondata
5. 測試 njmon 的文件輸出
• 驗證 njmon 功能,先設定參數集1筆
• 產生兩個文件分別如下:
(1) bimap_20221228_2200.json
- 實際收集的日誌
(2) bimap_20221228_2200.err
- 錯誤紀錄
• 上面測試是收集2次,所以 json檔會產生2筆資料
• 其中 bimap_20221228_2200.err 資料筆數顯示應為 0 ,代表運行正常無錯誤
$ ll /home/bimap/njmondata
-rw-rw-r-- 1 bimap bimap 23348 Dec 28 22:00 bimap_20221228_2200.json
-rw-rw-r-- 1 bimap bimap 0 Dec 28 22:00 bimap_20221228_2200.err
第二步:建立自動化收集腳本
1. 編輯 ipoc_njmon.sh
• ipoc_njmon.sh
內容如下,請依據實際的環境做修改:
#!/bin/bash export LC_ALL=C ###################################### ### set env ### ###################################### Host=`hostname` # ScpPath="[email protected]:~/ipoc/uploadDir" #需要上傳到遠端server的設定 Seconds=60 Count=60 RetentionDays=30 # 超過30天的檔案不做保留 Yesterday=`date -d "yesterday" +%Y%m%d` HourAgo=`date -d "1 hour ago" +%Y%m%d_%H` LogDir="/home/bimap/njmondata" # 日誌存放路徑資料夾 ################################################# ######## collect command ######## ################################################# /usr/local/bin/njmon -M -P -b -t 1 -s $Seconds -c $Count -f -m $LogDir > /dev/null 2>&1 ################################################# ######## sent HourAgoLog to uploadDir ######## ################################################# sleep 60s cd $LogDir # 需要上傳到遠端server的話要建立一個sent資料夾 # if [ ! -d $LogDir/sent ] ; then # mkdir $LogDir/sent #fi if [ ! -d $LogDir/backup ] ; then mkdir $LogDir/backup fi # 本機收集不需上傳的話,檔案直接移到backup資料夾存放 mv $LogDir/*$HourAgo* $LogDir/backup # 需要上傳到遠端主機的話,先移到sent資料夾,傳送成功後再移到backup資料夾存放 # mv $LogDir/*$HourAgo* $LogDir/sent # scp -i ~/.ssh/server.key $LogDir/sent/*$HourAgo*.json $ScpPath && mv $LogDir/sent/* $LogDir/backup ################################################# ######## zip and backup ######## ################################################# # 1. 檢查將昨天的檔案,保存成一份壓縮檔 cd $LogDir/backup ls | grep -q $Yesterday_[0-9] if [ $? -eq 0 ]; then rm *.err zip -r $Host"-"$Yesterday.zip *$Yesterday* && rm *$Yesterday*.json fi # 2. 定期將檔案清除,需要的話請開啟註解並檢查RetentionDays參數設定 #find $LogDir/backup/*.tar.gz -maxdepth 1 -mtime +$RetentionDays -type f -delete exit
2. 授予腳本執行權限
chmod +x ipoc_njmon.sh
3. 在crontab設定自動化排程
• 每個小時整點啟動 njmon 的收集程序, 設定採樣間隔為 60 秒, 每小時收集 60 次
$ crontab -e
0 * * * * /home/bimap/bin/ipoc_njmon.sh
4. 驗證設定成功結果
• 一天共產生24個日誌文件、24個錯誤紀錄(壓縮會不做保存)
$ ls -al
bimap_20221229_0000.json bimap_20221229_0000.err
bimap_20221229_0100.json bimap_20221229_0100.err
bimap_20221229_0200.json bimap_20221229_0200.err
bimap_20221229_0300.json bimap_20221229_0300.err
bimap_20221229_0400.json bimap_20221229_0400.err
bimap_20221229_0500.json bimap_20221229_0500.err
bimap_20221229_0600.json bimap_20221229_0600.err
bimap_20221229_0700.json bimap_20221229_0700.err
bimap_20221229_0800.json bimap_20221229_0800.err
bimap_20221229_0900.json bimap_20221229_0900.err
bimap_20221229_1000.json bimap_20221229_1000.err
bimap_20221229_1100.json bimap_20221229_1100.err
bimap_20221229_1200.json bimap_20221229_1200.err
bimap_20221229_1300.json bimap_20221229_1300.err
bimap_20221229_1400.json bimap_20221229_1400.err
bimap_20221229_1500.json bimap_20221229_1500.err
bimap_20221229_1600.json bimap_20221229_1600.err
bimap_20221229_1700.json bimap_20221229_1700.err
bimap_20221229_1800.json bimap_20221229_1800.err
bimap_20221229_1900.json bimap_20221229_1900.err
bimap_20221229_2000.json bimap_20221229_2000.err
bimap_20221229_2100.json bimap_20221229_2100.err
bimap_20221229_2200.json bimap_20221229_2200.err
bimap_20221229_2300.json bimap_20221229_2300.err
• backup
備份資料夾中,當凌晨整點啟動時會將昨日收集的 24 個 .json
檔壓縮成一個 tar.gz 檔保存
$ ls /home/bimap/njmondata/backup
bimap-221228.tar.gz
如何停止或修改 njmon 收集指令
• 正常應該只有一個 pid 正在執行收集,如果有重複請 kill
• 有時候重複執行會報錯,請 kill 乾淨再重新下指令
• 指令如果設定錯誤需要修改,請先 kill 舊的 pid
$ ps -ef | grep njmon
$ sudo kill -9 ${njmon pid}
njmon 參數說明
-
-A
: 自定義 hostname (不給代表默認採用os.hostname()
)
-
-s
: 採集間隔時間,單位秒,不給代表默認60秒
-
-c
: 採集次數,不給代表默認永久
-
-f
: 輸出為檔案,數據內容:hostname__.json,錯誤內容:hostname__.err
-
-m
: 文件存儲目錄
-
-I
: 切換nimon
模式,輸出格式會改為.influxlp
檔案
-
-M
: 按掛載點 mount 列出的文件系統(如 AIX njmon)而不是文件系統名稱
-
-P
: 添加 processes 統計信息(佔用 CPU 週期和大量統計信息)
-t
: 設置忽略 process CPU 使用百分比閾值(默認 0.01%)
-b
process_name 不要併 pid(如果需要寫進 influxDB 保存的話,務必添加此參數避免high cardinality)