先日、Windows Server Backup の処理が、連日コケ続けていて、サーバに接続できないということがありました。
原因はバックアップ先のディスクが故障していたのですが、処理の結果が、正常にバックアップできたのか、エラーで終了したのかちゃんと通知する必要があるなぁ・・・と思い、というか前からわかってはいたことなのですが、先送りにしていたことに数年越しに着手したので、メモを残します。
この記事では、Powershell でイベントログを確認するところから。。。
Powershell のコマンドレット「Get-EventLog」
Powershellでイベントログを確認できるコマンドは、
- Get-EventLog
- Get-WinEvent
のふたつあるのですが、今回は Get-EventLog の確認方法です。
なぜ、Get-EventLog なのか、それは、ぐぐって最初にヒットして、さわったのが Get-EventLog だったから(汗)。。。Microsoftサポートの「中の人」によると、Get-WinEvent のほうが新しいコマンドで、いろいろフィルタも細かくできるよっ とのことだったのですが、せっかく調べたので活動履歴を残させていただきます!
まずは、普通にバックアップのイベントを確認してみます。
1 2 3 4 5 6 7 |
> Get-EventLog -LogName Application -Source Microsoft-Windows-Backup -Newest 3 Index Time EntryType Source InstanceID Message ----- ---- --------- ------ ---------- ------- 235362 7 12 20:37 Information Microsoft-Windows... 611 スケジュールされたバックアップがこのコンピューターに対して構成されています。 235359 7 12 20:34 Information Microsoft-Windows... 753 ブロック レベル バックアップ エンジン サービスが正常に開始しました。 235270 7 12 20:21 Information Microsoft-Windows... 754 ブロック レベル バックアップ エンジン サービスが停止しました。 |
上記は、
- LogName : Application
- ソース : Microsoft-Windows-Backup
- 新しいほうから3つ
のログを表示させています。ソースの情報が切れてしまっていますね。。。
切れているのを修正するためには、以下のように Format-Table コマンドとオプション -AutoSize を利用します。
1 2 3 4 5 6 7 |
> Get-EventLog -LogName Application -Source Microsoft-Windows-Backup -Newest 3 | Format-Table -AutoSize Index Time EntryType Source InstanceID Message ----- ---- --------- ------ ---------- ------- 235362 7 12 20:37 Information Microsoft-Windows-Backup 611 スケジュールされたバックアップがこのコンピューターに対して構成されています。 235359 7 12 20:34 Information Microsoft-Windows-Backup 753 ブロック レベル バックアップ エンジン サービスが正常に開始しました。 235270 7 12 20:21 Information Microsoft-Windows-Backup 754 ブロック レベル バックアップ エンジン サービスが停止しました。 |
さらに、
- ログレベル(エラー、警告、情報)のフィルタを追加
- 発生時間・ログレベル・メッセージ のみを表示
させてみたものが以下になります。見やすいように改行しています。
1 2 3 4 5 6 7 8 9 10 11 |
> Get-EventLog ` -LogName Application ` -EntryType Error,Warning,information ` -Source Microsoft-Windows-Backup -Newest 3 ` | Format-Table TimeGenerated,EntryType,Message -AutoSize TimeGenerated EntryType Message ------------- --------- ------- 2019/07/12 20:37:20 Information スケジュールされたバックアップがこのコンピューターに対して構成されています。 2019/07/12 20:34:25 Information ブロック レベル バックアップ エンジン サービスが正常に開始しました。 2019/07/12 20:21:49 Information ブロック レベル バックアップ エンジン サービスが停止しました。 |
だいぶ、運用現場的にみて現実的になってきたのではないでしょうか!
例えば、「情報」レベルのログが不要であれば、-EntryTypeオプション で Error と Warning のみ指定すれば良いです。その内容をメール送信することで、バックアップのエラー検知もできますね。
また、Format-Table で 時間を TimeGenerated を指定している点もポイントです。
Format-Table で指定しない場合は、Time となっていましたが、Get-Member で確認してみると(↓)TimeGenerated、または、TimeWritten となっていました。↑ではイベントが生成された TimeGenerated を指定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
> Get-EventLog -LogName Application -Source Microsoft-Windows-Backup | Get-Member TypeName: System.Diagnostics.EventLogEntry#Application/Microsoft-Windows-Backup/611 Name MemberType Definition ---- ---------- ---------- Disposed Event System.EventHandler Disposed(System.Object, System.EventArgs) CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType) : :略 : TimeGenerated Property datetime TimeGenerated {get;} ★ TimeWritten Property datetime TimeWritten {get;} ★ UserName Property string UserName {get;} EventID ScriptProperty System.Object EventID {get=$this.get_EventID() -band 0xFFFF;} |
↑よくみると EventID というプロパティもありますので、Where-Object を使って対象のイベントIDを除外する、なんてこともできますね。
まとめ
Powershell「Get-EventLog」でイベントログ内容を確認する方法を説明してきましたが、いかがでしたでしょうか。
ログの名前やソース、ログレベルなどを指定して、ぱぱっとイベントを確認したいときなんかは 重宝しますね。
次回は、Microsoft中の人がおすすめする Get-WinEvent をさわってみたいと思います。
以上です。
↓↓↓ 持っていると便利な一冊 ↓↓↓