トップ回答者
ネットワークアダプタの受信バイト数の平均値を測定

質問
-
一定時間、ネットワークアダプタの受信バイト数を監視し、しきい値を超えた場合に通知する方法を考えています。
Get-WmiObject -class Win32_PerfRawData_Tcpip_NetworkInterface
Get-Counter -Counter "\Network Interface(*)\Bytes Received/sec"
関連しそうなキーワードにはいきつきますが、PowerShellの組み立て方が分かりません。
Get-WMIObject -ComputerName samplepc win32_processor ` | select __Server, @{name="CPUUtilization" ;expression ={“{0:N2}” -f (get-counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 1 -MaxSamples 5 | select -ExpandProperty countersamples | select -ExpandProperty cookedvalue | Measure-Object -Average).average}}` | Where-Object {[decimal]$_.CPUUtilization -gt [decimal]$cputhreshold}
参考にしたサイトの上記の記述をどのように変更すれば、受信バイト数の平均を求めることができますでしょうか。
ご教示ください。よろしくお願いします。
- 編集済み TwSoft 2016年6月2日 6:33
回答
-
> $threshold = 1048576 # 通知する閾値
> とするべきでしょうか。
PowerShellで「1MB」と記述すると「1048576」という数値に展開されます。
つまり両者は同じ値なので記述を変える必要はありません。
ちなみに、KB、GB、TB表記も可能です。
>あるサーバーでパフォーマンスモニタを見ていると、イーサネットの受信が、絶えず7.0Mbps以上を上回っています。
>(1秒間に約7メガバイト受信していると理解しています)
Mbpsとは、mega bits per secondの略なので、「1秒間に7メガバイト」ではなく、「1秒間に7メガビット」となります。
1バイト=8ビットでバイト数に換算すると、7.0Mbpsとは、「1秒間に約900キロバイト」ですね。
>735487.264410203 くらいの数値が返ります。
これは「1秒間に735487バイト=約718キロバイト=約5.6メガビット」となります。
>Bytes Received/sec の値は、1秒あたりの「バイト数」だと理解しています。
これは正しいです。つまり、例えば閾値を5Mbpsとしたいなら、ビットをバイトに変換するため、$threshold=5MB / 8 とする必要があります。
- 回答としてマーク TwSoft 2016年6月3日 2:41
-
"\Network Interface(*)\Bytes Received/sec"のカウンタを使うなら、以下のような感じになるでしょうか。
$threshold = 1MB # 通知する閾値 $interval = 1 # サンプルを取る間隔(秒) $count = 5 # サンプルを取る回数 $nicName = "realtek pcie gbe family controller" # 測定対象とするNIC名(全NICを対象にする場合は「*」) $bytesReceivedAverage = Get-Counter -Counter "\Network Interface($nicName)\Bytes Received/sec" -SampleInterval $interval -MaxSamples $count | select -ExpandProperty CounterSamples | select -ExpandProperty CookedValue | Measure-Object -Average | select -ExpandProperty Average if($bytesReceivedAverage -gt $threshold) { # Send-MailMessage を使って通知 }
例では$interval * $count = 5となるので、5秒間の平均値を取っています。
- 回答としてマーク 牟田口大介Moderator 2016年6月3日 3:22
すべての返信
-
"\Network Interface(*)\Bytes Received/sec"のカウンタを使うなら、以下のような感じになるでしょうか。
$threshold = 1MB # 通知する閾値 $interval = 1 # サンプルを取る間隔(秒) $count = 5 # サンプルを取る回数 $nicName = "realtek pcie gbe family controller" # 測定対象とするNIC名(全NICを対象にする場合は「*」) $bytesReceivedAverage = Get-Counter -Counter "\Network Interface($nicName)\Bytes Received/sec" -SampleInterval $interval -MaxSamples $count | select -ExpandProperty CounterSamples | select -ExpandProperty CookedValue | Measure-Object -Average | select -ExpandProperty Average if($bytesReceivedAverage -gt $threshold) { # Send-MailMessage を使って通知 }
例では$interval * $count = 5となるので、5秒間の平均値を取っています。
- 回答としてマーク 牟田口大介Moderator 2016年6月3日 3:22
-
ありがとうございます。
$threshold = 1MB # 通知する閾値
ですが、
$threshold = 1048576 # 通知する閾値
とするべきでしょうか。
あるサーバーでパフォーマンスモニタを見ていると、イーサネットの受信が、絶えず7.0Mbps以上を上回っています。
(1秒間に約7メガバイト受信していると理解しています)
その状態で実行したところ、if文に入ってほしいところですが入りません。$bytesReceivedAverage を出力すると、735487.264410203 くらいの数値が返ります。
Bytes Received/sec の値は、1秒あたりの「バイト数」だと理解しています。
PowerShell以前に、基本を理解していないのだと思いますが、よろしくお願いします。
-
> $threshold = 1048576 # 通知する閾値
> とするべきでしょうか。
PowerShellで「1MB」と記述すると「1048576」という数値に展開されます。
つまり両者は同じ値なので記述を変える必要はありません。
ちなみに、KB、GB、TB表記も可能です。
>あるサーバーでパフォーマンスモニタを見ていると、イーサネットの受信が、絶えず7.0Mbps以上を上回っています。
>(1秒間に約7メガバイト受信していると理解しています)
Mbpsとは、mega bits per secondの略なので、「1秒間に7メガバイト」ではなく、「1秒間に7メガビット」となります。
1バイト=8ビットでバイト数に換算すると、7.0Mbpsとは、「1秒間に約900キロバイト」ですね。
>735487.264410203 くらいの数値が返ります。
これは「1秒間に735487バイト=約718キロバイト=約5.6メガビット」となります。
>Bytes Received/sec の値は、1秒あたりの「バイト数」だと理解しています。
これは正しいです。つまり、例えば閾値を5Mbpsとしたいなら、ビットをバイトに変換するため、$threshold=5MB / 8 とする必要があります。
- 回答としてマーク TwSoft 2016年6月3日 2:41