Search code examples
rubyregexruntime-errorsensu

How can I check for repeated strings with check-tail plugin in Sensu?


I am using sensu and the check-tail.rb plugin to alert if any errors appear in my app logs. The problem is that I want the check to be successful if it finds 3 or more error messages.

The solution that I came up with is using a regex like:

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

But it seems to not work because of the match function: instead of passing the variable as a ruby regex it passes it as a string (this can be seen here).


Solution

  • You need to pass the pattern as a string literal, not as a Regexp object.

    Thus, you need to remove the regex delimiters and change the modifiers to their inline option variants, that is, prepend the pattern with (?im).

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

    Note that to match the start of string in Ruby, you need to use \A and to match the end of string, you need to use \z anchors.