質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Q&A

4回答

3507閲覧

イベントビューアー>Windowsログで取れるログをサイズでなくて日付で区切る事は出来ないのでしょうか?

moitaro

総合スコア443

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

0グッド

1クリップ

投稿2019/03/08 06:52

編集2019/03/08 06:53

お世話になっております。

WinSev2012R2を管理しております。
件名の通りなのですが
イベントビューアー>Windowsログで取れるログを
サイズでなくて日付で区切る事は出来ないのでしょうか?

グーグルさんなどで調査したのですが
そのようなものは見つけられなかったのですが
皆様ログ解析をする場合は有料のソフトウェアを購入されているのでしょうか?

なんとか日付毎にログを取得する方法は無いのでしょうか?

お忙しい所大変申し訳無いのですが上記お問い合わせいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

サイズ区切りといわれているのは、イベントビューアーでの各ログの最大サイズのことを指していて、デフォルトの上書きではなく、アーカイブ(別ファイルに)することを想定しているのだと思いますが、UNIX系のログローテーションのように、世代保持指定ができるわけではないので、この機能だけに頼ろうとしているならば、その後の運用管理が面倒になるのではないでしょうか。

一応、下記で1日単位でアーカイブされるようにはなるのではないかと思いますが、日付毎ではなくログの開始から1日毎にアーカイブされるようになるのではないでしょうか。
ただし、実際にやったことも試すつもりもありませんので、実行した結果どうなるかはわかりません。

PowerShell

1Limit-EventLog -LogName "対象のログ名" -RetentionDays 1

また、roninさんの回答内で触れられてはいるものの、PowerShellでの日付指定でログを取得するサンプルも貼っておきます。先日つけた回答のように-ListLogでまわしてlognameに与えれば全ログ対象に出来るでしょうし、Get-Dateと組み合わせれば日付毎のログを出力できるでしょう。

PowerShell

1Get-WinEvent -FilterHashtable @{logname="system"; starttime="2019/3/7"; endtime="2019/3/8"; level=1,2,3}

全量のログをWhere-Objectに渡すことで日付毎のフィルターとしていますが、(例外もある気はしますが)早い段階でデータを削った方が軽くていいですよね。
日付指定ならGet-EventLogでも-After-Before引数で可能ですが、そもそもこのコマンドレットを使うのは今は推奨されないものだと思っています。

古い Windows XP / Windows Server 2003 以前のイベントログ形式で動作するため、処理時間のパフォーマンスに問題を及ぼす場合があります。また、Windows Vista / Windows Server 2008 以降の新イベントログ形式 (EventLog 2.0) のログは取得できません。

ソース 'DCOM' のイベント ID '10016' の説明が見つかりません。

(以下略)

投稿2019/03/08 13:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ronin

2019/03/11 01:02

なるほど、もっと全然ベストな方法があるんですね。質問者ではありませんが、勉強になりました。 自分はいつもget-commandからそれっぽいコマンド名見つけて試してしまうので推奨、非推奨とかあまり意識していませんでした。 ご教示ありがとうございます。
moitaro

2019/03/12 00:34

lazybones2000様 コメントありがとうございます。 こちらのやり方で出来そうか検討してみます。 本当にありがとうございました。
moitaro

2019/03/12 02:23 編集

PS C:\powershell> Limit-EventLog -LogName "system" -RetentionDays 1 Limit-EventLog : 保持日数は、オーバーフローの動作が "OverwriteOlder" の場合のみ有効です。変更してから再試行してください 。 発生場所 C:\powershell\eventget4.ps1:1 文字:1 + Limit-EventLog -LogName "system" -RetentionDays 1 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Limit-EventLog]、InvalidOperationException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.LimitEventLogCommand となり もう一つご教示頂いた方は PS C:\powershell> Get-WinEvent -FilterHashtable @{logname="system"; starttime="2019/3/7";endtime="2019/3/11"; level=1,2,3} Get-WinEvent : 指定した選択条件に一致するイベントが見つかりませんでした。 発生場所 行:1 文字:1 + Get-WinEvent -FilterHashtable @{logname="system"; starttime="2019/3/7";endtime=" ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (:) [Get-WinEvent], Exception + FullyQualifiedErrorId : NoMatchingEventsFound,Microsoft.PowerShell.Commands.GetWinEventCommand となります。 level=1,2,3を削除すればそれとなく表示されるのでもう少し調べてみます。 本当に助かりました。ありがとうございます。
退会済みユーザー

退会済みユーザー

2019/03/12 04:43

Limit-EventLog実行時のエラーは、表示の通りで、指定サイズに到達時の動作が上書きになっていないと日数指定できないという事です。詳細は下記辺りでご確認ください。 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/limit-eventlog?view=powershell-5.1 levelはログレベルを絞るサンプルとして書いたものなので、全量を取りたいならば必要はありません。ここで指摘する数値の意味は、先日の回答でも触れた(手抜きで)調べてくださいとした項目です。 なお、本当にログがない場合はレベル指定を外しても同じエラーになるので、特に全ログファイルを対象にする想定があるならばご注意ください。
moitaro

2019/03/12 04:46

あ…… evtx 形式で保存したいので 調査中です…… なんかこのやり方だとevtxで保存出来ない気がしてきてます……
guest

0

以下のようなbatを作成し、23:59:59にタスクスケジューラで起動するというのはいかがでしょうか?

bat

1set today=%DATE:/=% 2wevtutil epl System system_%today%.evtx && wevtutil cl System 3
  1. wevtutil epl System system_%today%.evtxで実行時点までのイベントログを、実行日のファイル名でエクスポート
  2. 正常終了後にwevtutil cl Systemで該当イベントログを削除

となります。
問題点は、初回はこれまでのイベントログすべてがエクスポート対象となってしまうこと、エクスポート後に原本を削除してしまうので十分にテストが必要なこと、かなと思います。

投稿2019/03/12 14:58

tell

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moitaro

2019/03/13 03:16

Tell様 コメントありがとうございます。 エクスポート後に原本を削除の && wevtutil cl System を動作させるのがちょっと怖いのですが こちらで日付で取れているのでこのような方法もあるのですねっ というかevtx内で指定の日付の情報取れないのだろうか……(+_+) コメントありがとうございました。m(_ _)m
guest

0

カスタムビューとかではダメですか?
検討違いでしたらすみません。

[カスタムビュー作成@IT]
(https://www.atmarkit.co.jp/fwin2k/win2ktips/1191custevt/custevt.html)

2019/03/11 18:46 追記
lazybones2000さんに教えて頂いたコマンドで手動で任意(一日単位でも可能)の日付のログを取得する感じのスクリプトを書いてみました。
なお、サーバへアクセスできるクライアント端末からの使用をイメージしています。

使い方の説明
1.LogStart,LogEndに開始と終了日付を設定します。
2.WorkDirに作業用ディレクトリパスを入力(末尾に\を入れてください)
3.WorkDirにServerList.txtとLogList.txtを入れてください。
4.3の両ファイルに取得したいサーバ名とログ名を入れてください。
※途中で空白行があれば、それ以降は処理しません。
5.ログの出力形式を選択してください。(1は一つのファイルにまとめられた状態。2はサーバ名で分けられた状態、3はログ名で分けられた状態
イメージ
1 = WindowsServerLog_20190301
2 = ServerName1_20190301
3 = ServerName1_Application_20190301

PowerShell

1$ErrorActionPreference = "silentlycontinue" 2$LogStart = "2019/3/1" #開始 yyyy/MM/dd 3$LogEnd = "2019/3/2" #終了 yyyy/MM/dd 4$WorkDir = "C:\Users\hostname\Desktop\log\" 5$ServerListFile = $WorkDir+"ServerList.txt" 6$LogListFile = $WorkDir+"LogList.txt" 7$LogOutStaus = "3" #ログの出力形式 "1:一つのファイル","2:サーバ単位で分割","3:サーバとログ名で分割" 8$OutFileName = "" 9$ServerList = (Get-Content -Encoding UTF8 $ServerListFile) 10$LogList = (Get-Content -Encoding UTF8 $LogListFile) 11 12 13# ステータスが"1"であれば一つのファイルに纏めて出す 14if($LogOutStaus.Equals("1")){ $OutFileName = "WindowsServerLog_"+(get-date $LogStart -format yyyyMMdd)+".csv" } 15 16#サーバ数分繰り返す 17foreach($server in $ServerList){ 18 19 # 途中で改行があれば以降は参照しない 20 if($server.Equals("")){ 21 break; 22 } 23 24 # ステータスが"2"であればサーバ単位で出力する 25 if($LogOutStaus.Equals("2")){ $OutFileName = $server+"_"+(get-date $LogStart -format yyyyMMdd)+".csv" } 26 27 #ログ分繰り返す 28 foreach($logname in $LogList){ 29 30 #途中で改行があれば以降は参照しない 31 if($logname.Equals("")){ 32 break; 33 } 34 35 # ステータスが"3"であればサーバ+ログ単位で出力する 36 if($LogOutStaus.Equals("3")){ $OutFileName = $server+"_"+$logname+"_"+(get-date $LogStart -format yyyyMMdd)+".csv"} 37 38 Get-WinEvent -ComputerName $server -FilterHashtable ` 39 @{logname=$logname; starttime=$LogStart; endtime=$LogEnd;level=1,2,3} | ` #levelの末尾に4を追加するとinfoも出る。 40 Select-Object -Property TimeCreated,LogName,LevelDisplayName,ProviderName,id,MachineName,Message | ` #itemの選定をしないならワイルドカードを設定 41 Export-Csv -UseCulture -Path $WorkDir$OutFileName -Append -Encoding UTF8 -NoTypeInformation 42 43 } 44}

ちなみに、私の勉強方法ですが、基本的にググって出てきたものを試したり、get-commandで出てきたコマンド名を試したり…と言った感じですので、動けばいいか、程度の事しかできません。

以上です。

投稿2019/03/08 08:07

編集2019/03/11 10:00
ronin

総合スコア89

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moitaro

2019/03/08 08:25

ronin様 コメントありがとうございます。 カスタムビューでは出来るらしいのですが 全てのログを日付毎に管理したいのです…… とココまで書いて思ったのですが 全てカスタムビューに入れれば出来る気がしてきました。 調査してみますっ コメントありがとうございました。
moitaro

2019/03/08 09:00

と思いましたが30日間だけログを保存ではなくて 190301のログ 190302のログ 190303のログ 190304のログ とログを日付毎取得しておきたいのです…… うーん出来ないのか調査してみます。 コメントありがとうございました。
ronin

2019/03/08 09:02

例えば以下の様なコマンド叩けば日付事に取得はできるかと・・・色々手直し必要ですが。 Get-EventLog -ComputerName ホスト名 -LogName 'Windows PowerShell' | where {$_.TimeWritten -gt (get-date 2019-03-08)} | format-table -AutoSize -Wrap
moitaro

2019/03/08 09:03

うーん ログの日付を 2019/03/08 0:00:00から2019/03/08 23:59:59 とすれば出来そうですが ソレを手動ではなくて自動化したいのです……
moitaro

2019/03/08 09:04

ありがとうございます。 Get-EventLog -ComputerName ホスト名 -LogName 'Windows PowerShell' | where {$_.TimeWritten -gt (get-date 2019-03-08)} | format-table -AutoSize -Wrap を参考にもうちょっと考えてみますっ
ronin

2019/03/08 09:11

そのあたりはget-dateのフォーマット指定でよいですし、日付毎にログを取得する、という事の回答という事で。。
moitaro

2019/03/11 08:56

ronin様 本当に度々ありがとうございます。 Get-EventLog -ComputerName ホスト名 -LogName 'Windows PowerShell' ホスト名の WindowsPowerShell のイベントをゲットする。 | where {$_.TimeWritten -gt (get-date 2019-03-08)} その中で3月8日のデータ | format-table -AutoSize -Wrap 出力フォーマットは無駄な空白を省略し横はオートサイズ と概ね理解出来るのですがこれを 本日(例えば3月11日)のみのログを保存しておきたいと思っているのですが                          ___ Get-EventLog -ComputerName ホスト名 -LogName '*' | where {$_.TimeWritten -gt (get-date いtoday)} | format-table -AutoSize -Wrap >$today.log ^^^ としてタスクスケジューラで毎日23:59に実行したいと思っているのですが PowerShellの考え方としてこちらは大丈夫でしょうか? 参考文献などご存知でしたらご教授頂けないでしょうか? ronin様はどのようにしてPowerShellを学ばれたのでしょうか? 考えても不明でしたのでお忙しい所大変申し訳無いのですが上記お問い合わせいたします。
guest

0

evtx形式で保存したいのですが

PS C:\Windows\system32> Get-WinEvent -LogName system | Format-List >test.evtx

で保存したevtxだとイベントビューアーに持っていっても読めない……
ので調査中……

考え方変なのかな……

投稿2019/03/12 07:16

moitaro

総合スコア443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwind918

2019/03/12 08:22

参考URLに記載されていることは、powershellからGet-WinEventの場合はevtxファイル形式でエクスポートはできない。 -pathでevtxファイルを指定すればevtxファイルからイベントログを読み込んで別ファイルにエクスポートできる。です。 コマンドプロンプトでwevtutil使えって書いてありますね。
moitaro

2019/03/12 08:25

ありがとうございます。 wevtutil export-log [イベントログの種類] [エクスポート先ファイルパス] でやって見る方法を考えてみますっ まぁPowerShellでやろうとした理由はコマンドプロンプトより高度な事が出来そうだっただけで そんなにこだわりは無いので……
moitaro

2019/03/12 08:32

こんなに苦労しているのもMSがログのサイズ毎でしかないのが悪いっ どうしてマイクロソフトは日付毎ログを残すという運用方針をしていないのだろうか……(+_+)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問