PowerShellでパフォーマンスカウンターのバイナリファイル(.blg)の記録を読み込んで計算結果をまとめる
2022-01-04 22:29:15
モニタリングやレポーティングのために、データベースサーバーの稼働状況を確認するために、パフォーマンスカウンターの値を毎日カウントする必要があります。カウンターを開いて記入するのは面倒なので、今はpowershellを使ってカウンターから統計情報を読み取っています。
フェーズ1:Powershellがカウンタファイルを読み込み、カウンタの1つの値をカウントする
$startDate = (Get-Date).AddDays(-1).Date
$endDate = (Get-Date).Date
$perfPath = "D:\DataFiles\PERFMON\MSSQL_PERFMON_08240904.blg"
# Read the names of the counters in the file
$counterList = Import-Counter -Path $perfPath
$countersNameList = $counterList[0].countersamples | % {$_.path}
# Filter to specify counters and time to re-import into PS
$counter = $countersNameList -like '*Processor Time*'
$counterData = Import-Counter -Path $perfPath -Counter $counter | Where-Object -FilterScript {($_.Timestamp -ge $startDate) -and ($_.Timestamp - lt $endDate)}
#Count the statistics of the values in the date range
$counterInfo = $counterData | Foreach-Object {$_.CounterSamples} | Measure-Object -property CookedValue -Average -Maximum
#Hash table to store result data
$resultTable=@{}
$resultTable."CPU Utilization -Average" = $counterInfo.Average
$resultTable."CPU utilization - maximum" = $counterInfo.Maximum
$resultTable
フェーズ2:ファイル内の全カウンターを一括してカウントし、ファイルに書き出す
$startDate = (Get-Date).AddDays(-1).Date
$endDate = (Get-Date).Date
$perfPath = "D:\360Downloads\*.blg"
#Hash table to store result data
$resultTable = @{}
#Import all counter information for the specified time
$counterData = Import-Counter -Path $perfPath | Where-Object -FilterScript {($_.Timestamp -ge $startDate) -and ($_.Timestamp -lt $endDate)}
# All counter names
$countersNameList = $counterData[0].countersamples | % {$_.Path}
# Iterate over each counter and store the computed results in a hash table
foreach($counterName in $countersNameList)
{
#$counterName = "\\hzc\system\threads"
$counterDataOne = $counterData | Foreach-Object {$_.CounterSamples} | Where {$_.Path -like $counterName}
$counterInfo = $counterDataOne | Measure-Object CookedValue -Average -Minimum -Maximum
$resultTable.$($counterName+" : Average") = $counterInfo.Average
$resultTable.$($counterName+" : Minimum") = $counterInfo.Minimum
$resultTable.$($counterName+" : Maximum") = $counterInfo.Maximum
}
#$resultTable.GetEnumerator() | sort Name | Format-Table -Auto
# Several ways to export to file
$resultTable.GetEnumerator() | sort Name | Format-Table -Auto | Out-File "D:\360Downloads\PerfmonCounter.txt"
$resultTable.GetEnumerator() | sort Name | Export-Csv -Path "D:\360Downloads\PerfmonCounter.txt" -Encoding "unicode" - Force
$resultTable.GetEnumerator() | sort Name | Format-List | Export-Csv -Path "D:\360Downloads\PerfmonCounter.xlsx" -Encoding " unicode" -Force
関連
-
PowerShellでは配列のフィルタリングにmatch演算子を使用する
-
PowerShell 4.0によるサーバセットアップの自動化
-
PowerShellのヒントとコツ
-
Powershellディレクトリフォルダ管理権限継承・割り当て方法
-
Powershellスクリプトの4種類の実行権限についてご紹介します。
-
PowerShell の実装は、ファイルを開くデフォルトのアプリケーションを照会する
-
PowerShellでファイル名の一括変更
-
コマンドライン履歴のコマンドをコピーするPowerShellメソッド
-
PowerShell ローカルアカウントスクリプト共有の追加
-
Powershellでカスタムオブジェクトを作成する例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン