私はGitHubの開発者の助けを借りて解決策を見つけました。
ANDおよびOR宣言を含むif文と同様に、configの処理が次のように表示されることがあります。
Alertmanagerは、設定を上下左右の原則に適用します。アップダウンがORステートメントに類似している場合、通常のifステートメントで使用します。
左から右に行くときは、ifコマンドのAND文と比較できます。
さらに、最初のステートメントが一致し、 'AND'パーツが宣言されていない場合、alertmanagerは、それ以上の一致を見ずにアラートを受信者にプッシュすることに注意してください。したがって、上記の例では、プロメテウスが以下のラベル(警告:severity: "warning"、アプリケーション: "barfoo")で警告を発すると、警告はhipchat-teamXに送信されます。
次の点に注意してください。アプリケーションのラベル値は、hipchat-teamYのルートと一致します。それでなぜそれがそのルートに送られないのですか?答えはそれほど難しくありません。最初のものが一致し、宣言されたサブルーチンがないため、他の一致を探すのを止めるからです。
ただし、alertmanagerに下のコードのような設定がある場合、アラートは受信者 'hipchat-teamY'に送信されます。
routes:
match:
severity:"warning"
receiver: "hipchat-teamX"
routes:
match_re:
application:"(barfoo.*)"
receiver: "hipchat-teamY"
match_re:
application:"(foo|bar)"
receiver: "hipchat-teamX"
match_re:
application:"(barfoo.*)"
receiver: "hipchat-teamY"
それはもう少し高度にするために、asumeのプロメテウスは、次のラベル{深刻度:「クリティカル」、アプリケーション:「barfoo」}で新しいアラートを送信します。以下の設定では、警告はhipchat-teamXにルーティングされます。
ラベル{重大度: "critical"、アプリケーション: "foo"}の場合、アラートはhipchat-teamYに送信されます。
routes:
match:
severity:"warning"
receiver: "hipchat-teamX"
routes:
match_re:
application:"(barfoo.*)"
receiver: "hipchat-teamY"
match_re:
application:"(foo|bar)"
receiver: "hipchat-teamX"
match:
severity:"critical"
receiver: "hipchat-teamY"
routes:
match_re:
application:"(barfoo.*)"
receiver: "hipchat-teamX"
match_re:
application:"(foo|bar)"
receiver: "hipchat-teamY"
この説明は、同じ問題または質問を受けている他の人に役立つことを願っています。