Regex correspondant à la surveillance du journal Unix dans les tests SCOM 2012 SP1, mais ne correspond pas sur le serveur Unix

Ce que j’essaie de faire est d’utiliser l’expression régulière pour effectuer la suppression d’événements spécifiques (tels que les codes d’événements) dans la surveillance des journaux UNIX SCOM.

L’expression est:

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

C’est-à-dire rechercher dans le journal “warning” mais ne correspond pas si les événements 1222 ou 1001 existent sur la ligne.

J’utilise la fonction de test intégrée dans SCOM lors de la création de la règle et les tests avec des exemples de journaux reviennent comme prévu, mais lorsque j’injecte des lignes de test dans le journal Unix, aucune alerte n’est générée.

Je soupçonne que la syntaxe pourrait ne pas être acceptée sur le système (RedHat 6 en cours d’exécution). Je l’ai testé avec les outils regex et semble fonctionner comme prévu.

Lorsque j’essaie de le tester sur le serveur, j’obtiens:

 [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 

Donc, je m’attends à 2 matchs.

Quelle devrait être la regex? J’ai testé de nombreuses variantes comme -Rn .*((?i:warning)(?!(.*1222)|(.*1001))).* , Utilisé l’option -Rn , les guillemets utilisés ect mais rien ne correspond lancez-le … qu’est-ce qui me manque?

grep ne supporte pas les anticipations à moins que vous n’activiez la comparabilité perl via l’indicateur -P :

Essaye ça:

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

J’ai également ajouté des citations sur le regex – je suis sûr que vous en avez aussi besoin.

Vous pouvez diviser la correspondance positive et négative ( -v ):

 cat /var/log/messages | grep -i warning | grep -v '1222|1001' 

L’utilitaire “Test Expression du fichier journal” de SCOM s’exécute sur l’ordinateur Windows et utilise un parsingur RegEx différent (.NET) de celui utilisé lors de l’parsing du fichier journal. Les fichiers journaux sont analysés sur l’ordinateur UNIX / Linux à l’aide de POSIX RegEx standard. De même, POSIX RegEx ne prend pas en charge les résultats de recherche négatifs (?!), Ce qui explique pourquoi lorsque je lance la commande manuellement, il ne renvoie aucun résultat.

Vous êtes complètement compliqué la solution

  1. Créez votre lecteur de fichier journal normalement, c’est-à-dire pointez sur /bogus/file.log, et capturez vos mots clés, c’est-à-dire avertissement | erreur | échec, etc.
  2. exporter le pack d’administration
  3. modifiez-le pour activer le filtrage

c’est-à-dire trouver le tag WriteActions pour la règle et y insérer le filtre, c’est-à-dire

      //row  DoesNotMatchRegularExpression exampleexpression     

importez tel quel si vous le souhaitez et éditez-le dans la console après, car c’est beaucoup plus facile, ne supprimez pas la dernière expression car elle pourrait supprimer le filtre. N’oubliez pas d’incrémenter le numéro de version du pack d’administration

  1. importer le pack d’administration
  2. append un filtre à l’aide d’un groupe AND, c.-à-d. que // la ligne contient un avertissement et que // la ligne ne correspond pas à une expression régulière (1222 | 1001)

vous aurez maintenant les éléments filtrés comme requirejs, mais ont tout le rest.

Soyez averti de ne pas avoir plusieurs lecteurs de fichiers journaux lisant le même fichier journal. ça ne marche pas bien.