CPU、メモリ、ディスク容量のログ取得ツール作成
仕事でサーバのCPU、メモリ、ディスク容量の状態を保持しておく必要が出てきた。
Zabbixとかツールを使えればいいのだが、諸事情で使えない。
そこでPowerShellをゴリゴリ使って、自作ツールを作成することとした。
■CPU使用率取得ツール編
現時点のCPU使用率を取得するコマンドを調べると、typeperfコマンドが出てくる。
CSVファイルに吐き出すように書くとこんな感じ。
ーーーーーーーーーーーーーーーーーーーーーーー
#一時的な出力結果ファイル
$tempOutputFile = "C:\log.csv"
#最終的な出力結果ファイル
$outputFile = "C:\log_total.csv"
#取得期間(秒)
$term = 10
#間隔(秒)
$interval = 1
# CPU取得
typeperf -sc $term -si $interval -o $tempOutputFile -y "\processor(_Total)\% Processor Time"
# 先頭2行を削除
$list = Get-Content $tempOutputFile
$list[0] = $null
$list[1] = $null
$list | Out-File $tempOutputFile -Encoding utf8
# ログファイルに追記
Get-Content $tempOutputFile | Add-Content $outputFile
ーーーーーーーーーーーーーーーーーーーーーーー
typeperfコマンド使って出力される最初の2行は、意味なさそうだったので無理やり削る処理をいれました。
我ながら適当だな。
出力すると、↓こんな感じの内容がズラーっと書き出される。
"07/03/2021 17:13:18.540","6.8166908852359764381"
"07/03/2021 17:13:19.585","10.7243141331937899"
"07/03/2021 17:13:20.628","22.039227366044677581"
"07/03/2021 17:13:21.659","6.8096693050652472579"
またテストのために、CPUを無駄に使用するPSも作成。
中身は以下の1行のみ
while ($i -ne 0) { echo $i; $i++ }
これを二つ流せば、あっという間にCPUが枯渇です。
■メモリ使用率取得ツール編
メモリの使用率は、以下のコマンドで使用率が取れると記載があった。
Get-WmiObject Win32_OperatingSystem | %{(($_.TotalVisibleMemorySize - $_.FreePhysicalMemory)/$_.TotalVisibleMemorySize) * 100}
約100秒間のメモリ使用率を取得するサンプルを作成
--------------------------------------------------------
$i = 1
while ($i -le 100) {
Start-Sleep -s 1
$datetime = Get-Date -UFormat "%Y/%m/%d %H:%M:%S "
$memoryUsePer = Get-WmiObject Win32_OperatingSystem | %{(($_.TotalVisibleMemorySize - $_.FreePhysicalMemory)/$_.TotalVisibleMemorySize) * 100}
$str = $datetime + "," + $memoryUsePer
$str | Out-File .\memory.txt -Encoding utf8 -Append
Write-Output "$i";
$i++
}
--------------------------------------------------------
出力結果は、↓こんな感じ
2021/07/03 21:13:13 ,19.5801326075529
2021/07/03 21:13:14 ,19.1586179163124
2021/07/03 21:13:15 ,17.6218819419715
2021/07/03 21:13:16 ,17.5376759036524
2021/07/03 21:13:17 ,17.5319103578757
2021/07/03 21:13:18 ,17.475078549505
テストツールとしては、「Testlimit」というフリーツールを利用
コマンドプロンプトで↓みたいな感じで流せば、無駄にメモリ使ってくれます。
testlimit64.exe -d -c 1024
(1024)の部分が、利用するメモリのMBです。
※ -cを外すと、パソコン固まるので注意。僕はそれで一度強制終了しました('ω')
■ディスク使用率取得ツール編
そのうち着手
■その他のタスク
①日またぎした時のファイル名の変更
ログファイルはCPU、メモリ、ディスクでそれぞれ一日一ファイルにしたい。
日付またいだ場合のファイル名の付け直し。
②定期的なファイルの削除
③それぞれの取得間隔を決める。
CPUだと1秒間隔?
メモリだったら10秒間隔くらい?
ディスクなら10分間隔くらいでいい?
くらいかな。