要約
この正規表現ジェネレーターは、ホスト名、パス、バージョン、メールドメイン、HTTPステータスコードの一覧を、ロールアウトのターゲティング条件、Prometheus の matcher、ログフィルター向けのエスケープ済みパターンに変換します。検索一致(JavaScript、Go、grep)と完全一致(Prometheus、Alertmanager、Envoy)のどちらかを選び、ブラウザ上で行をテストできます。入力値はサーバーに送信されません。
正規表現 ジェネレーター:ロールアウト条件とログフィルターのために
照合したいホスト名、パス、バージョン、ステータスコードを入力します。お使いの正規表現エンジン向けにエスケープ済みのパターンを取得し、本番に入れる前に実際のログ行で確認できます。

入力値からジェネレーターが行うこと
リテラルをすべてエスケープ
値に含まれるドット、スラッシュ、括弧、プラス記号はエスケープされます。そのため api.internal.example.com が api-internal-example-com に一致することはありません。手書きの許可リストは、ここで最も失敗しやすい箇所です。
実行するエンジン向けに書く
検索型エンジンではマッチを ^ と $ で固定する必要がありますが、Prometheus、Alertmanager、Envoy は文字列全体にマッチさせるため、前方一致や後方一致には .* が必要です。エンジンを選べば、ジェネレーターがパターンを合わせます。
出荷前にテスト
テスト行ごとに、これからコピーするパターンを使った一致または不一致のバッジが表示されます。意図的に近い誤一致も入れてください。例えば checkout-v2 に対する checkout-v22、example.com に対する example.com.evil.io です。
レビューを通過しても、夜中にページを鳴らした正規表現
ロールアウトやアラートの設定で起きる正規表現の障害は、特殊なものではありません。3つの内部ホストだけを対象にするはずのターゲティング条件が、紛らわしいホスト名まで対象にしてしまう。Prometheus には不要なアンカーを付けたアラートの matcher が、いつの間にかあるサービスを外す。部分一致のログフィルターが、数えるべきエラーを隠してしまう。 パターンが複雑すぎることは稀で、ほとんどは緩すぎるか、一致すべき行だけでテストされたことが原因です。ロールアウトをゲートする規則は、まず一致してはいけない行でテストすべきです。
- ホスト名のドットをすべてエスケープする
- 使っているエンジンが自動でアンカーするかを確認する
- 一致する行だけでなく、近い誤一致もテストする
- 候補が少なく安定しているなら、正規表現よりリテラルの一覧を選ぶ
値の一覧から、信頼できるパターンへ
-
1
照合の種類を選ぶ
ホストやフラグキーの許可リストには完全一致、ルートのグループには前方一致、アラートルールにはステータスコード、アプリバージョン単位のロールアウトにはバージョンファミリーを使います。
-
2
エンジンを選ぶ
コードや grep には検索一致、Prometheus の matcher、Alertmanager のルート、Envoy には完全一致を使います。この一つの選択で、最も多いアンカーの取り違えを防げます。
-
3
近い誤一致をテスト欄に入れる
似たホスト名、隣接するバージョン、範囲のすぐ外にあるステータスコードを追加します。いずれかが一致と表示されたら、パターンをコピーする前に値を絞ってください。
よくある質問
このジェネレーターは無料ですか。入力値はどこかに送信されますか。
出力はどの正規表現エンジン向けですか。
なぜ Prometheus は ^ と $ のアンカーを無視するように見えるのですか。
パターンは破滅的バックトラッキングを避けられますか。
特殊文字はどう扱われますか。
フラグのターゲティング条件でこのパターンを使えますか。
このツールにできないことは何ですか。
ロールアウトの判断を、勘ではなく SLO に基づかせる
ターゲティング条件は誰に変更を届けるかを決めます。upstreamapi の AI Pilot は、そのまま進めてよいかを判断し、エラー率が SLO のしきい値を超えると自動でリバートします。