Categories: OS

PowerShellでログを解析する方法:基本から応用まで徹底解説

システム運用やトラブルシューティングにおいて、ログ解析は欠かせない作業です。Windows環境では、イベントログ、テキストログ、カスタムログなど、さまざまなログが存在しますが、それらを効率的に解析するにはPowerShellのスキルが非常に役立ちます。この記事では、PowerShellを使ってログを解析する基本から応用までをわかりやすく解説します。初学者でも実践できるように、具体的なコマンドやサンプル付きで紹介します。


PowerShellで扱えるログの種類

PowerShellでは、以下のようなログを扱うことができます。

  • Windowsイベントログ(アプリケーション、システム、セキュリティなど)
  • 独自のテキストログファイル(.log, .txtなど)
  • IISログやアプリケーションログ
  • システム情報を記録したCSVログなど

これらはGet-EventLogGet-WinEventコマンドレットを使ってアクセスできるほか、Get-Contentとパイプ処理を使ってカスタムログを柔軟に解析することも可能です。


Windowsイベントログを取得する:Get-EventLog

まずは基本的なコマンドから紹介します。以下のように使えば、特定のログを取得できます。

Get-EventLog -LogName System -Newest 10

このコマンドは「System」ログの最新10件を取得します。

より詳細な情報を抽出するには、次のようにフィルタを追加します。

Get-EventLog -LogName Application -EntryType Error -After (Get-Date).AddDays(-1)

このコマンドは、過去24時間以内に記録された「アプリケーションログ」の「エラー」だけを抽出します。


Get-WinEventでより柔軟な検索を行う

Get-WinEventは、XML形式のフィルタが使えるため、より高度な検索が可能です。

Get-WinEvent -LogName Security | Where-Object { $_.Id -eq 4625 }

このコマンドは、ログオン失敗イベント(ID:4625)だけを抽出します。

XMLクエリを使って絞り込む例:

$filter = @"
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">*[System[(EventID=4624)]]</Select>
</Query>
</QueryList>
"@

Get-WinEvent -FilterXml $filter

カスタムログファイルを読み取る:Get-Contentとパイプ処理

独自のアプリケーションログ(例:Apache、IISなどのログファイル)はGet-Contentで読み込みます。

Get-Content "C:\Logs\app.log" | Select-String "ERROR"

このようにすると、ログの中から”ERROR”を含む行だけを抽出できます。

日付でフィルタしたい場合:

Get-Content "C:\Logs\app.log" | Where-Object { $_ -match "2025-04-10" }

ログ解析に役立つテクニック:Select-Stringと正規表現

Select-Stringはログ解析において非常に強力です。正規表現もサポートしています。

Get-Content "C:\Logs\app.log" | Select-String -Pattern "Exception|Error|Fail"

複数のエラーキーワードを一気に検出できます。

特定のパターンに一致する行番号を取得:

Get-Content "C:\Logs\app.log" | Select-String -Pattern "Timeout" | Select LineNumber, Line

ログをCSVとして出力・保存する

PowerShellで解析したログをCSVに保存して、Excelなどで可視化することも簡単です。

Get-EventLog -LogName System -Newest 100 | 
Select TimeGenerated, EntryType, Source, Message |
Export-Csv -Path "C:\Logs\SystemLog.csv" -NoTypeInformation

これは「システムログ」の最新100件を抽出し、必要な情報のみCSVファイルに保存する例です。


よく使うログ解析スクリプトのテンプレート

アプリケーションログのエラーを出力するスクリプト:

$logs = Get-EventLog -LogName Application -EntryType Error -After (Get-Date).AddDays(-7)
$logs | Select TimeGenerated, Source, EventID, Message | Format-Table -AutoSize

テキストログから日付単位で検索:

$today = (Get-Date).ToString("yyyy-MM-dd")
Get-Content "C:\Logs\custom.log" | Where-Object { $_ -match $today }

エラーメッセージの統計を取る:Group-Objectの活用

ログの種類や頻度を集計するには、Group-Objectが便利です。

Get-EventLog -LogName Application -Newest 1000 | 
Group-Object -Property Source |
Sort-Object -Property Count -Descending |
Select-Object -First 10

これにより、発生頻度の多いアプリケーション名を上位10件表示できます。


まとめ

PowerShellはログ解析において非常に強力なツールです。GUIでは困難なフィルタリングやデータ集計も、スクリプトを使えば簡単に自動化できます。
本記事で紹介した基本的なコマンドとテクニックを活用すれば、日々の運用業務や障害対応の効率化に大いに役立つはずです。
まずは、自分の環境で使われているログを確認し、少しずつPowerShellのコマンドを試してみてください。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。