You can make a nested tree of routes, which in effect gives you an "if ... then ... else ..." capability.
routes:
- ... something to do always
continue: true
- match:
severity: critical
routes:
- ... things to do when critical
- ...
- ... things to do when not critical
- ...
Leaving out the "match" condition entirely makes a rule match always.
Note that "continue: true" carries on to the next rule after a match, but only at the same level. It will only fall out to the parent ruleset if no matches occur.
Or of course, you can explicitly match all non-critical severities e.g. match_re: severity: 'debug|informational|warning'
As to why what you wrote before didn't work:
1. The supported regex syntax for go's re2 library is defined here:
The (?!...) form is not implemented, due to the non-backtracking design of re2.
2. I don't know why you thought "not_match_re" would work, but it's not defined here:
I would have hoped that alertmanager would fail to start when given unknown config tag. If it didn't, then that could be a bug.