要件
Windowsサーバで稼働し、JSON形式でログを出力するシステムにてトラブル発生時、時刻とエラー発生ファイルの一覧を作成したい。しかし、該当システムではエラー要因や警告レベルなど不要な値が含まれる。また、セキュリティの観点からシステムが存在する系から解析用の環境へのファイル移行は認められず、外部ソフトの導入も即座に行うことはできない。
そのため、Windows標準機能であるPowerShellにてJSONファイルの解析を行いたい。
成果物(例)
Set-Location (ログファイル配置ディレクトリ)
$jsonContent = Get-Content -Path "log.json" -Raw -Encoding UTF8
$jsonObject = ConvertFrom-Json $jsonContent
Write-Output $jsonObject | Select-Object (表示したいキー1), (表示したいキー2),... | Format-list
※外部ファイルの読み込みはSet-ExecutionPolicyなどで別途許可する必要があるため、セキュリティ上の懸念がある場合は注意
説明
Set-Location (ログファイル配置ディレクトリ)
後述のファイル指定時にフルパスを入力してもよいがログ分析の場合複数のファイルを読み込むことも多いため、デフォルトパスとしてログ配置パスを設定
$jsonContent = Get-Content -Path "log.json" -Raw -Encoding UTF8
変数jsonContentにログファイルを読み込み。GetContentコマンドレットを用いてログ全体を読み込み。出力日時などの不要な行がある場合は、この時弾くとよい。
$jsonObject = ConvertFrom-Json $jsonContent
ConvertFrom-Jsonコマンドレットを用いて読み込んだログテキストをJSONオブジェクトに変換。
Write-Output $jsonObject | Select-Object (表示したいキー1), (表示したいキー2),... | Format-list
見やすさのため、Format-listコマンドレットを用いで表示を行う。Select-Objectで表示したいキーと値を抽出し、その結果をパイプラインで渡す。