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分間隔くらいでいい?

 

くらいかな。