1

私がやろうとしているのは、正規表現を使用して、SCOM UNIX ログ監視で特定のイベント (イベント コードなど) の抑制を実行することです。

式は次のとおりです。

((?i:warning)(?!(.*1222)|(.*1001)))

つまり、ログで「警告」を検索しますが、イベント 1222 または 1001 が行に存在する場合は一致しません。

ルールを作成するときに SCOM の組み込みのテスト機能を使用すると、サンプル ログを含むテストが期待どおりに返されますが、テスト行を UNIX ログに挿入すると、アラートが生成されません。

システム (RedHat 6 を実行している) で構文が受け入れられていない可能性があると思われます。これを正規表現ツールでテストしたところ、期待どおりに動作するようです。

サーバーでテストしようとすると、次のようになります。

[root@bld02 ~]# grep ((?i:warning)(?!(.*1222)|(.*1001))) /var/log/messages
-bash: !: event not found

[root@bld02 ~]# tail /var/log/messages
Nov 13 15:07:26 bld02 root: SCOM Test Warning Event ID 1001 Round 18
Nov 13 15:07:29 bld02 root: SCOM Test Warning Event ID 1000 Round 18
Nov 13 15:07:35 bld02 root: SCOM Test Warning Event ID 1002 Round 18

なので、2試合を予定しています。

正規表現は何ですか?次のような多くのバリエーションをテストしました: .*((?i:warning)(?!(.*1222)|(.*1001))).*-Rnオプションの使用、引用符の使用などですが、手動で実行すると一致するものはありません...何が欠けていますか?

4

4 に答える 4

1

grep-Pフラグを介して perl の比較可能性を有効にしない限り、先読みをサポートしません:

これを試して:

grep -P '((?i:warning)(?!(.*1222)|(.*1001)))' /var/log/messages

また、正規表現の周りに引用符を追加しました-それらも必要だと確信しています。

于 2013-11-13T23:53:08.407 に答える
0

あなたはソリューションを複雑にしています

  1. 通常どおりにログ ファイル リーダーを作成します。つまり、/bogus/file.log をポイントし、キーワード (warning|error|fail など) を取得します。
  2. 管理パックをエクスポートする
  3. 編集してフィルタリングを有効にします

つまり、ルールの WriteActions タグを見つけて、そこにフィルターを挿入します。

</DataSources>
<ConditionDetection ID="Filter" TypeID="System!System.ExpressionFilter">
<Expression>
  <RegExExpression>
     <ValueExpression>
        <XPathQuery Type="String">//row</XPathQuery>
     </ValueExpression>
     <Operator>DoesNotMatchRegularExpression</Operator>
     <Pattern>exampleexpression</Pattern>
 </RegExExpression>
</Expression>
</ConditionDetection>
<WriteActions>

必要に応じてそのままインポートし、後でコンソールで編集する方がはるかに簡単です。フィルターが削除される可能性があるため、最後の式を削除しないでください。管理パックのバージョン番号を増やすことを忘れないでください

  1. 管理パックをインポートする
  2. AND グループを使用してフィルタを追加します。つまり、//行には警告が含まれ、//行は正規表現と一致しません (1222|1001)

必要に応じてアイテムが除外されますが、それ以外はすべて残っています。

複数のログ ファイル リーダーが同じログ ファイルを読み取らないように注意してください。旨く動きません。

于 2016-02-19T03:50:03.520 に答える
0

正と負の一致を分割できます ( -v):

cat /var/log/messages | grep -i warning | grep -v '1222|1001' 
于 2013-11-13T10:22:02.517 に答える
0

SCOM の「Test Log File Expression」ユーティリティは、Windows コンピュータで実行され、実際のログ ファイルの解析で使用されるものとは異なる RegEx パーサー (.NET) を使用します。ログ ファイルは、標準の POSIX RegEx を使用して UNIX/Linux コンピューターで解析されます。Aparantly POSIX RegEx は否定先読み (?!) をサポートしていないため、コマンドを手動で実行しても結果が返されません。

于 2013-11-13T23:39:40.460 に答える