diff --git a/docs/configuration.md b/docs/configuration.md index 0e6e3893..1e03ae80 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -151,13 +151,19 @@ current node. # Whether an alert should continue matching subsequent sibling nodes. [ continue: | default = false ] +# DEPRECATED: Use matchers below. # A set of equality matchers an alert has to fulfill to match the node. match: [ : , ... ] +# DEPRECATED: Use matchers below. # A set of regex-matchers an alert has to fulfill to match the node. match_re: [ : , ... ] + +# A list of matchers that an alert has to fulfill to match the node. +matchers: + [ - ... ] # How long to initially wait to send a notification for a group # of alerts. Allows to wait for an inhibiting alert to arrive or collect @@ -295,18 +301,32 @@ source matchers in a way that alerts never match both sides. It is much easier to reason about and does not trigger this special case. ```yaml +# DEPRECATED: Use target_matchers below. # Matchers that have to be fulfilled in the alerts to be muted. target_match: [ : , ... ] +# DEPRECATED: Use target_matchers below. target_match_re: [ : , ... ] + +# A list of matchers that have to be fulfilled by the target +# alerts to be muted. +target_matchers: + [ - ... ] +# DEPRECATED: Use source_matchers below. # Matchers for which one or more alerts have to exist for the # inhibition to take effect. source_match: [ : , ... ] +# DEPRECATED: Use source_matchers below. source_match_re: [ : , ... ] + +# A list of matchers for which one or more alerts have +# to exist for the inhibition to take effect. +source_matchers: + [ - ... ] # Labels that must have an equal value in the source and target # alert for the inhibition to take effect. @@ -640,6 +660,57 @@ value: [ short: | default = slack_config.short_fields ] ``` +## `` + +A matcher is a string with a syntax inspired by PromQL and OpenMetrics. The syntax of a matcher consists of three tokens: + +- A valid Prometheus label name. + +- One of `=`, `!=`, `=~`, or `!~`. `=` means equals, `!=` means that the strings are not equal, `=~` is used for equality of regex expressions and `!~` is used for un-equality of regex expressions. They have the same meaning as known from PromQL selectors. + +- A UTF-8 string, which may be enclosed in double quotes. Before or after each token, there may be any amount of whitespace. + +The 3rd token may be the empty string. Within the 3rd token, OpenMetrics escaping rules apply: `\"` for a double-quote, `\n` for a line feed, `\\` for a literal backslash. Unescaped `"` must not occur inside the 3rd token (only as the 1st or last character). However, literal line feed characters are tolerated, as are single `\` characters not followed by `\`, `n`, or `"`. They act as a literal backslash in that case. + +In the configuration, multiple matchers are combined in a YAML list. However, it is also possible to combine multiple matchers within a single YAML string, again using syntax inspired by PromQL. In such a string, a leading `{` and/or a trailing `}` is optional and will be trimmed before further parsing. Individual matchers are separated by commas outside of quoted parts of the string. Those commas may be surrounded by whitespace. Parts of the string inside unescaped double quotes `"…"` are considered quoted (and commas don't act as separators there). If double quotes are escaped with a single backslash `\`, they are ignored for the purpose of identifying quoted parts of the input string. If the input string, after trimming the optional trailing `}`, ends with a comma, followed by optional whitespace, this comma and whitespace will be trimmed. + +Here are some examples of valid string matchers : + +1. Shown below are two equality matchers combined in a long form YAML list. + +```yaml + matchers : + - foo = bar + - dings !=bums +``` + +2. Similar to example 1, shown below are two equality matchers combined in a short form YAML list. + +```yaml +matchers: [ foo = bar, dings != bums ] +``` + +As shown below, in the short-form, it's generally better to quote the list elements to avoid problems with special characters like commas: + +```yaml +matchers: [ "foo = bar,baz", "dings != bums" ] +``` + +3. You can also put both matchers into one PromQL-like string. Single quotes for the whole string work best here. + +```yaml +matchers: [ '{foo="bar",dings!="bums"}' ] +``` + +4. To avoid any confusion about YAML string quoting and escaping, you can use YAML block quoting and then only worry about the OpenMetrics escaping inside the block. A complex example with a regular expression and different quotes inside the label value is shown below: + +```yaml +matchers: + - | + {quote=~"She said: \"Hi, all!( How're you…)?\""} +``` + + ## `` OpsGenie notifications are sent via the [OpsGenie API](https://docs.opsgenie.com/docs/alert-api). @@ -810,4 +881,4 @@ API](http://admin.wechat.com/wiki/index.php?title=Customer_Service_Messages). [ to_user: | default = '{{ template "wechat.default.to_user" . }}' ] [ to_party: | default = '{{ template "wechat.default.to_party" . }}' ] [ to_tag: | default = '{{ template "wechat.default.to_tag" . }}' ] -``` +``` \ No newline at end of file