PowerShellで自動情報収集
Tiger Bridge, Surveillance Bridgeで使用できるtiercli1はWindows PowerShellと連動して動作させることが可能です。
本記事ではWindows PowerShellのスクリプトを使ってSurveillance Bridgeの動作状況を定期的に収集する例を説明します。
スクリプトの実施環境
本記事で紹介するスクリプトは以下の環境で動作しています。
- Surveillance Bridge Version 2.0.0.138
- Milestone Systems社 XProtect Corporate 2023 R3
- AWS S3 Standard-IA
- PowerShell PSVersion 5.1.17763.4974
- Windows Server 2019 Standard
下図は本スクリプトを動作させているXProtectのManagement Client画面です。「Site Navigation」>「Surveillance Bridge」>「Extension」を選択したときの表示です。
本設定について下記に簡単に説明します。
- 「E:¥MediaDatabase」に「Local Default」としてXProtectのRecoding Serverのストレージを設定しています。
- 録画期間は3時間です。
- AWS S3 Standard-IAをターゲットストレージに指定しており、1時間以上アクセスがない録画データをターゲットストレージにコピーし、コピー後にソースストレージ上の該当ファイルスタブ化します。(Surveillance BridgeのExtension機能2)
- 全体の録画容量は約0.488GB(3時間分)そのうち約2時間分にあたる0.315GB分の録画データがAWS S3 Standard-IAにコピーされています。
スクリプトとその説明
下記が本記事で説明するスクリプトです。
本記事中で紹介するスクリプトは試験用に作成したものです、実際にご使用される場合は手元の環境で十分に検証してから使われることをお勧めします。特に下記のソースコード内の赤下線部は実施する環境に合わせて変更して下さい。このスクリプトにより発生した障害については一切の責任を弊社は負いません。
$headline ="Date`tTime`tNot_processed`tPending`tReplicated`tOffline`tTotal"
$srcfolder = "E:\MediaDatabase\6748eeb8-d3ce-4d57-9cfd-104cdbb84965" #測定対象のソースフォルダー
$measureperiod = 300 #測定周期(秒)
$outpath ="E:\work\tiercli_info_" #結果出力パス
while($true){
$exportfile = $outpath+"$(Get-Date -Format yyyyMMdd).csv" #出力用CSVファイル
$ErrorActionPreference = "silentlycontinue" #エラーメッセージ抑圧
if(!(Get-ChildItem $exportfile))
{
Write-Output $headline > $exportfile #ファイルがない場合は作成
}
$ErrorActionPreference = "continue" #エラーメッセージ抑圧解除
$Result = tiercli op info $srcfolder #tiercliコマンドを実行
$Dated = $(Get-Date -Format "yyyy/MM/dd") +"`t" + $(Get-Date -Format "HH:mm:ss")
for($i=0; $i -lt $Result.length; $i++)
{
$str = -split ($Result[$i])
if($str.length -ne 1) #データのある行のみを抽出
{
switch ($str[0])
{ #1文字目が"("なのでsubstringメソッドで1文字目を削除した形でバイト数部分を切出す
"Not"{ $outstr = ($Dated +"`t"+$str[4].substring(1,$str[4].length-1)); break}
"Pending"{ $outstr = ( $outstr+"`t"+$str[3].substring(1,$str[3].length-1)); break}
"Replicated"{ $outstr = ($outstr+"`t"+$str[3].substring(1,$str[3].length-1)); break}
"Offline" { $outstr = ($outstr + "`t" + $str[3].substring(1,$str[3].length-1));break}
"Total" #最終行Totalでファイル書込み
{
$outstr = ($outstr + "`t" + $str[3].substring(1,$str[3].length-1))
Write-Output $outstr >> $exportfile
break
}
}
}
}
sleep $measureperiod
}
このスクリプトでは3行目に設定している「$measureperiod」周期(このソースでは300秒、すなわち5分に設定しています)でSurveillance Bridgeの動作状況を取得するためのコマンド「tiercli op info」を実行し以下の形式のデータを取得します。
1行1ステータスのデータ容量(bytes単位)を分解し、1行のデータとしてタブ区切りで「$exportfile」で指定されたCSVファイルに書き込みます。
このスクリプトを手元の環境で使用する際には2,3,4,7行目の以下に示す変数の指定については実行する環境に合わせた編集を行ってからご使用ください。
- $srcfolder(測定対象のソースフォルダー)
- $measureperiod(測定周期(秒))
- $outpath(結果出力パス)
- $exportfile(出力用CSVファイル)
スクリプトの実行結果
本スクリプトを実行すると「E:¥work」フォルダーに「tiercli_info_yyyymmdd.csv」(yyyymmddはスクリプトの実行日)ファイルが生成されます。下図はその出力例です。各欄の間にはタブが1つあります。
このCSV出力をスプレッドシート等で読込、グラフ化すると以下のようなグラフを得ることができます。
上記のグラフより以下のようなことがわかります。
- Replicated(コピー済みファイル:黄色の太線)とOffline(スタブ化済みファイル:黒の細線)は完全に重なっています、このことよりはコピー後に直ちにスタブ化されていることがわかります。
- TotalとReplicatedの差分とPendingの容量は(紺色の矢印)同じです。これは1時間経過していないファイルが処理されずにPending状態になっていることを示しています。
- Total, Replicated, Offlineで前測定値と同じ値になっている部分(グラフが平らになっている)がいくつかあります。XProtectの場合、録画データは16Mbyteずつファイルが生成されるのでサンプル周期の5分間の間に録画ファイルが新たに生成されなかったことを示しています。実際に1時間分のファイルサイズは約185Mbyteであり、1時間に約11.29(185/16)個のファイルが新しく生成されています。5分周期だと1時間に12回測定することになるので、連続するデータが変わらない場合があり、それがグラフにも現れています。
- Total, Replicated, Offlineのデータは1時間の間増え続け、1時間立つと1時間前の容量とほぼ同じになっています。これはXProtectが1時間に一度、録画期間を超えたファイルをストレージから削除するためです。Surveillance BridgeもXProtectの処理に同期し、グラフのような波形を示しています。
- tiercliについては本ブログの「tiercliを使ってみる」をご覧ください。 ↩︎
- Surveillance BridgeのExtension機能については本ブログの「Surveillance BridgeのExtensionって何?」をご覧ください。 ↩︎