システムやアプリケーションの運用において、ログファイルからリアルタイムでエラーや警告を検出し、即座に対応できる体制は非常に重要です。この記事では、PowerShellを使ってログファイル内の特定キーワードを常時監視し、発見時にアラートを出す方法を紹介します。
ログ監視の基本的な仕組み
PowerShellにはログファイルの内容を逐次読み取るためのGet-Contentコマンドレットがあります。このコマンドレットに-Waitと-Tailオプションを組み合わせることで、ログファイルの末尾に追記された内容をリアルタイムで取得できます。
スクリプトの全体像
以下は、ログファイルの内容に「ERROR」という文字列が含まれた場合に、コンソールに警告を表示するサンプルスクリプトです。
$logPath = "C:\Logs\sample.log" # 監視対象のログファイルパス
$keyword = "ERROR" # 監視するキーワード
Write-Host "ログ監視を開始します:$logPath"
Get-Content -Path $logPath -Wait -Tail 0 | ForEach-Object {
if ($_ -match $keyword) {
Write-Host "【警告】キーワードが検出されました:" -ForegroundColor Red
Write-Host $_ -ForegroundColor Yellow
# 必要に応じてここでメール通知やサウンド再生などを追加
}
}
エラー検出時にメール通知を送る方法
エラーを発見したらすぐにメールで通知したい場合、Send-MailMessageコマンドレットを使うことができます。SMTPサーバーの設定が必要ですが、以下はその一例です。
$from = "alert@example.com"
$to = "admin@example.com"
$smtp = "smtp.example.com"
Send-MailMessage -From $from -To $to -Subject "ログ監視アラート" `
-Body "ERRORがログに記録されました:`n$_" -SmtpServer $smtp
このように、前述のスクリプトのWrite-Hostの代わりにこの処理を入れることで、エラー時に自動でメールを飛ばす仕組みが完成します。
応用 複数のキーワードを監視する
エラー以外にも「WARNING」や「CRITICAL」など複数のキーワードを検知したい場合、以下のように正規表現を使って対応できます。
$keywords = "ERROR|WARNING|CRITICAL"
if ($_ -match $keywords) {
Write-Host "【警告】重要なログが検出されました:" -ForegroundColor Red
Write-Host $_ -ForegroundColor Yellow
}
まとめ
PowerShellを活用すれば、簡易な監視システムを自作することが可能です。リアルタイム性が求められる場面でも、Get-Content -Waitを活用することで、ログファイルの変化を即座にキャッチできます。さらに、通知機能を加えることで、トラブルを未然に防ぐ体制を構築することができます。