Njmon 日誌收集說明

Njmon 是 Nmon 的改進版,適用於 Linux 系統,提供了更豐富的性能數據收集和分析功能。它能夠收集 CPU、記憶體、磁碟、網路等多方面的即時系統性能數據,並支持將數據發送到各種數據庫,如 InfluxDB。Njmon 特別適合現代化系統環境,提供了更多靈活性和擴展性。

大多數 IBM 機器內建了 Nmon,如果需要另外安裝,我們建議使用改進版的 njmon。請參考以下步驟來安裝和配置 njmon。

1. 安裝 Njmon

下載並安裝 Njmon:

wget http://sourceforge.net/projects/nmon/files/njmon_linux_binaries_v80.zip
mkdir njmon_files
unzip njmon_linux_binaries_v80.zip -d njmon_files

如果無法解壓,請安裝 zip 命令:

sudo apt install zip

解壓縮後目錄結構如下:

njmon_files/
├── ninstall
├── njmon.1.gz
├── njmon_RHEL8_ppc64le_v80
├── njmon_RHEL8_x86_64_v80
├── njmon_SLES12_ppc64le_v80
├── njmon_SLES15_ppc64le_v80
├── njmon_SLES15_x86_64_v80
├── njmon_Ubuntu20_ppc64le_v80
├── njmon_Ubuntu21_x86_64_v80
├── njmon_Ubuntu22_x86_64_v80
└── njmon_linux_binaries_v80.zip

執行安裝腳本:

cd njmon_files
chmod +x ninstall
./ninstall

如果沒有完全匹配的系統版本,可以選擇接近的版本,複製到 /usr/local/bin,重新命名為 njmon

sudo mv njmon_files/${your_version_filename} /usr/local/bin/njmon
sudo chmod +x /usr/local/bin/njmon

2. 建立 Njmon 日誌存放目錄

mkdir -p /home/bimap/njmondata

3. 建立自動化收集腳本

編輯腳本文件:

mkdir -p /home/bimap/bin
vim /home/bimap/bin/ipoc_njmon.sh

需要調整的參數

  • Seconds: 每次收集間隔的秒數。默認為60秒,可以根據需要進行修改。
  • Count: 每次收集數據的次數。默認為60次,可以根據需要進行修改。
  • RetentionDays: 日誌保留的天數。默認為30天,超過這個天數的檔案將被刪除。
  • LogDir: 日誌存放目錄。默認為 /home/bimap/njmondata
  • UploadDir: 日誌上傳目錄。默認為 /home/sftpuser/master
  • SCP_TARGET: SCP 上傳目標路徑。
  • FTPURL, FTPUSER, FTPPASS: FTP 伺服器地址、使用者名和密碼。
  • UPLOAD_METHOD: 上傳方法。可以選擇 ftpmvscp,默認為 scp

ipoc_njmon.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)')
LogDir="/home/bimap/njmondata"
SentDir="$LogDir/sent"
BackupDir="$LogDir/backup"
UploadDir="/home/sftpuser/master"  # 日誌上傳路徑

# SCP 目標路徑設定
SCP_TARGET="bimap@10.99.1.106:$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 次"

#################################################
########         執行收集命令              ########
#################################################
mkdir -p $SentDir
mkdir -p $BackupDir
mkdir -p $LogDir

cd $LogDir
# 獲取舊的nmon文件
Files=$(ls *.json 2> /dev/null)
if [ -z "$Files" ]; then
  echo "沒有舊的 njmon 文件需要移動"
else
  # 將舊文件移動到SentDir
  mv $Files $SentDir
fi

# 收集新的nmon文件
/usr/local/bin/njmon -M -P -b -t 1 -s $Seconds -c $Count -f -m $LogDir > /dev/null 2>&1
sleep 10
rm -rf *.err

#################################################
########      根據選擇的方式上傳文件         ########
#################################################
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
if ls *$Yesterday*.json 1> /dev/null 2>&1; then
    # 如果存在,將該檔案壓縮起來
    tar -czvf "${Host}-${Yesterday}.tar.gz" *$Yesterday*.json && rm -rf *$Yesterday*.json
fi

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

exit

授予腳本執行權限:

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

4. 測試腳本

第一次測試執行腳本會顯示沒有舊的 .njmon 文件需要移動,這是正常的,因為在第一次執行時還沒有舊的文件。

root@bimap-ipoc-2:/home/bimap/bin# ./ipoc_njmon.sh 5 2
上傳方式: mv
收集間隔: 5 秒, 收集次數: 2 次
沒有舊的 njmon 文件需要移動

第二次執行時應該會正常移動和上傳文件:

root@bimap-ipoc-2:/home/bimap/bin# ./ipoc_njmon.sh 5 2
上傳方式: mv
收集間隔: 5 秒, 收集次數: 2 次

成功後,再設定 crontab 定期執行自動化收集腳本。

5. 設定 crontab 定期執行

編輯 crontab:

crontab -e

添加以下行,設定每60分鐘執行一次自動化收集腳本:

0 * * * * /home/bimap/bin/ipoc_njmon.sh 60 60 > /dev/null 2>&1

日誌檔案範例

執行當下小時會產生 Njmon 日誌檔案,並且每天將日誌檔案壓縮儲存:

[root@bimap nmondata]$ ls /home/bimap/njmondata/backup
bimap-230301.tar.gz
bimap-230302.tar.gz
bimap-230303.tar.gz
bimap-230304.tar.gz

results matching ""

    No results matching ""