【PowerShell】ログファイルを監視してリアルタイムに変化を検知する方法

【PowerShell】ログファイルを監視してリアルタイムに変化を検知する方法 PowerShell

ログファイルは、システムやアプリケーションの動作状況を確認するうえで非常に重要な情報源ですが、手動で確認していてはリアルタイム性に欠けてしまいます。PowerShellを使えば、特定のログファイルに新たな行が追加された瞬間にその内容を検知する処理を簡単に実装することができます。この記事では、PowerShellによってログファイルの更新を常時監視し、リアルタイムで反応する仕組みの作り方を解説します。

ログ監視に使うPowerShellコマンドの基本

PowerShellには、Get-Contentコマンドレットに-Waitと-Tailオプションを組み合わせることで、ファイル末尾の新しい出力をリアルタイムで取得し続ける機能があります。この機能はLinuxでのtail -fと同等の動作を実現します。たとえば、ログファイルの末尾を継続的に監視し、何らかのキーワードが現れた場合にアラートを表示するような使い方が可能です。

実際のスクリプト例

以下は、指定されたログファイルに新しい行が追加された際に、それが「ERROR」を含んでいた場合のみアラートとして画面に出力するサンプルです。

$logPath = "C:\Logs\application.log"

Get-Content -Path $logPath -Wait -Tail 0 | ForEach-Object {
    if ($_ -match "ERROR") {
        Write-Host "$(Get-Date -Format 'yyyy/MM/dd HH:mm:ss') エラー検知: $_" -ForegroundColor Red
    } else {
        Write-Host "$(Get-Date -Format 'yyyy/MM/dd HH:mm:ss') 通常出力: $_"
    }
}

このスクリプトを実行すると、PowerShellはapplication.logというファイルの末尾に追記されるすべての行を監視し、該当する行が「ERROR」を含んでいれば赤色の警告として表示します。そうでない場合は通常の出力として表示されます。

常駐監視スクリプトとしての使い方

このようなスクリプトは、バッチ処理や業務アプリケーションのログを常に見張っておきたい場合に非常に有効です。定期的に実行するのではなく、スクリプトをバックグラウンドやタスクスケジューラに登録して常駐させることで、ほぼリアルタイムのログ監視を実現できます。特にトラブル対応の迅速化や異常検知の自動化に大きく貢献します。

応用的な活用例と工夫

検知対象のキーワードを複数にしたり、検知時にメールやSlack通知を送信したり、ログ内容をフィルタしてCSVに記録する処理と組み合わせることで、より高度な監視システムを構築することも可能です。ログ形式によっては、特定のカラムを抽出して自動レポートの作成にも応用できます。

まとめ

PowerShellのGet-Contentを活用すれば、ログファイルの更新をリアルタイムで監視し、特定の文字列を即座に検知する仕組みを非常にシンプルに実装できます。日々のシステム運用において、トラブルの早期発見や自動対応を実現したい場合には、ぜひこの手法を取り入れてみてください。