イベントビューアーには現在のログをフィルターする機能があり、どのイベントを表示するかのフィルターを設定することができます。
GUI から設定する場合、特定のイベントは除外することはできませんが、XPath 形式で手動でクエリを編集した場合には、除外の設定をすることができます。
以下の画面では、「MSSQL$SQL2014」についてのログをフィルターしていますが、この中から、イベント ID が「14421」のイベントについては除外するフィルターを作ってみたいと思います。
除外を設定したい場合には「Supress」のセクションとして追加をします。
Consuming Events
<QueryList> <Query Id="0" Path="Application"> <Select Path="Application">*[System[Provider[@Name='MSSQL$SQL2014'] and (Level=2)]]</Select> <Suppress Path="Application">*[System[Provider[@Name='MSSQL$SQL2014'] and (Level=2) and (EventID=14421)]]</Suppress> </Query> </QueryList>
上記のようなクエリを XPath として指定することで、特定のイベントについては表示から除外することができます。
イベントログのフィルターではあまり使う機会はないかもしれませんが、この除外はイベントログのサブスクリプション機能でも使用することができます。
これにより、特定のイベントについてはサブスクリプションの対象外とすることができるのですが、イベントログのサブスクリプションで XPath のクエリを手動で設定する場合には注意点があります。
イベントログのサブスクリプションの設定は、レジストリの「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\EventCollector\Subscriptions」に格納されていますが、XPath を手動で設定した場合、「ReadExistingEvents」の値が「1」に設定されます。
# GUI から設定した場合は「0」になります。
この設定については、EventLogWatcher コンストラクター (EventLogQuery, EventBookmark, Boolean) / Wecutil.exe を参照するとよいかと。
readExistingEvents 型 : System.Boolean
イベント ログに既に存在するイベントを読み取るかどうかを指定するブール値。 この値が true の場合は既存のイベントが読み取られ、この値が false の場合は既存のイベントが読み取られません。
検証をした感じでは、このレジストリの値が影響をするのは、サブスクリプションにコンピューターを追加した場合かと思います。
GUI からフィルター設定した場合は、「0」となっており、この状態でコンピューターを追加すると、追加したコンピューターについては、追加以降に発生したイベントに対してサブスクリプションを実行するため、既存のイベントログについては転送が行われません。
XPath を手動で設定し、「ReadExistingEvents」が「1」となっている場合は、コンピューターを追加すると追加したコンピューターですでにイベントログに記載されているイベントについても転送対象とします。
そのため、コンピューター追加以前の過去のログに対してもサブスクリプションで転送されることになります。
XPath を手動で設定するたびに、このレジストリ値は「1」に変更されてしまうみたいでしたので、手動でフィルターを設定している場合には注意が必要そうですね。