2017-04-14 1 views
1

J'utilise sensu et le plugin check-tail.rb pour signaler si des erreurs apparaissent dans les journaux de mes applications. Le problème est que je veux que la vérification réussisse si elle trouve 3 messages d'erreur ou plus.Comment vérifier les chaînes répétées avec le plug-in check-tail dans Sensu?

La solution que je suis venu avec utilise une expression régulière comme:

\^.*"status":503,.*$.*^.*"status":503,.*$.*^.*"status":503,.*$\im 

Mais il semble ne pas fonctionner à cause de la fonction de correspondance: au lieu de passer la variable comme une expression régulière rubis qu'il passe comme chaîne (ceci peut être vu here).

Quelqu'un peut-il m'aider sur ce coup?

+0

Et si vous supprimez les barres obliques inverses et que vous utilisez '(? Im) ^. *" Status ": 503,. * $. * ^. *" Status ": 503,. * $. * ^. *" Status " : 503,. * $ '? –

+0

Merci, cela a fonctionné. Veuillez répondre à ma question et je l'approuverai. –

+0

J'ai ajouté une réponse, veuillez vérifier si le '' \ '' devrait être doublé (si vous utilisez un littéral de chaîne entre guillemets, ils doivent être doublés). –

Répondre

1

Vous devez transmettre le modèle sous la forme d'un littéral de chaîne, pas en tant qu'objet Regexp.

Par conséquent, vous devez supprimer les délimiteurs d'expression régulière et modifier les modificateurs à leurs variantes d'option en ligne, c'est-à-dire ajouter le motif au préfixe (?im).

(?im)\A.*"status":503,.*$.*^.*"status":503,.*$.*^.*"status":5‌​03,.*\z 

Notez que pour correspondre au début de la chaîne en Ruby, vous devez utiliser \A et pour correspondre à la fin de la chaîne, vous devez utiliser \z ancres.

+0

Si vous utilisez un littéral de chaîne entre guillemets doubles, '\ A' et' \ z' doivent être doublés. –