promql/regexp

This check will warn if metric selector uses a regexp match but the regexp query doesn’t have any patterns and so a simple string equality match can be used. Since regexp checks are more expensive using a simple equality check if preferable.

Example of a query that would trigger this warning:

foo{job=~"bar"}

job=~"bar" uses a regexp match but since it matches job value to a static string there’s no need to use a regexp here and job="bar" should be used instead.

Example of a query that wouldn’t trigger this warning:

foo{job=~"bar|baz"}

Another problem this check will report on is redundant regexp anchors. As noted on Querying Prometheus page Prometheus fully anchors all regex matchers. So a query match using foo=~"bar.*" will be parsed as foo=~"^bar.*$" and so any anchors used in the query will be redundant. This means that passing foo=~"^bar.*$" to the query will be parsed as foo=~"^^bar.*$$", so both ^ and $ should be skipped to avoid it.

Configuration

This check doesn’t have any configuration options.

How to enable it

This check is enabled by default.

How to disable it

You can disable this check globally by adding this config block:

checks {
  disabled = ["promql/regexp"]
}

You can also disable it for all rules inside given file by adding a comment anywhere in that file. Example:

# pint file/disable promql/regexp

Or you can disable it per rule by adding a comment to it. Example:

# pint disable promql/regexp

How to snooze it

You can disable this check until given time by adding a comment to it. Example:

# pint snooze $TIMESTAMP promql/regexp

Where $TIMESTAMP is either use RFC3339 formatted or YYYY-MM-DD. Adding this comment will disable promql/regexp until $TIMESTAMP, after that check will be re-enabled.