Powershell syslogの大量受信に耐える

ITインフラ系

syslogを受信できるログサーバーをwindowsで作ったのですが
短時間に大量に出力されるログをPowershellコマンドレットで処理するとかなり処理が遅くなるうえ、出力されずに処理が飛ばされることがあるので、コマンドレットではなく.net frameworkで処理しました

$file = New-Object System.IO.StreamWriter("C:\logserver\logtest.log", $false, [System.Text.Encoding]::GetEncoding("unicode"))
while($true) `
{
if($Udp.Available) `
{
$Buffer = $Udp.Receive([ref]$Sender)
$MessageString = [Text.Encoding]::UTF8.GetString($Buffer)
$file.WriteLine("$MessageString")
}
}

最低限の機能だとこんな感じです。コマンドレットを使わないなら機能をいろいろ追加しても大丈夫だと思います。
コマンドレットはめっちゃ遅いらしいので処理速度に気を付けるスクリプトは.net frameworkを使いたいです

余談ですが1日ごとに分けたい場合などは、whileのあとに[datetime]Nowなどを入れてif文を追加してやると良いと思います

参考文献
WindowsでPowershellだけでSyslogを受信してみる。 – 技術的な何か。

タイトルとURLをコピーしました