If you put multiple matchers, they must all be true to match ("AND" semantics). So when you wrote
- matchers:
- alertname = "SystemdUnitDown"
- alertname = "InstanceDown"
it means alertname must be simultaneously equal to both those values, which can never be true.
One solution is to rewrite your matchers, such as
- matchers:
- alertname =~ "SystemdUnitDown|InstanceDown"
Personally though I find it easier to structure my rules the other way round: when a condition matches list all the receivers who should receive this alert. You can do this using nested routing rules ("routes" instead of "receiver"). For example, for the InstanceDown alert:
- matchers:
- alertname = "InstanceDown"
routes: [ { receiver: Team1, continue: true }, { receiver: Team2 } ]
#continue: true
The magic here is that the nested routes don't have any matchers, so they always match and deliver to the receiver.
You then don't need the top-level "continue: True" either (I've shown it commented out), since once this condition matches, you've finished all the processing for InstanceDown and you don't need to test any subsequent rules.