Resumo

Este gerador de regex transforma uma lista de hosts, caminhos, versões, domínios de e-mail ou códigos de status HTTP em um padrão escapado para regras de targeting de rollout, matchers do Prometheus e filtros de log. Você escolhe entre a semântica de correspondência por busca (JavaScript, Go, grep) e de correspondência completa (Prometheus, Alertmanager, Envoy), e depois testa linhas no navegador. Nada sai da sua máquina.

Ferramenta gratuita

Gerador de regex para targeting de rollout e filtros de log

Cole os hosts, caminhos, versões ou códigos de status que você quer casar. Receba um padrão escapado para o seu motor de regex e teste-o com linhas reais antes que ele chegue à produção.

Notebook à noite mostrando saída de terminal filtrada numa mesa de desenvolvedor

Gere uma regex a partir de uma lista de valores

Escolha o que você está casando, liste os valores e escolha o motor. O padrão e os resultados dos testes são atualizados enquanto você digita.

Padrão gerado

    Como funciona

    O que o gerador faz com os seus valores

    Escapa cada literal

    Pontos, barras, colchetes e sinais de mais nos seus valores são escapados, então api.internal.example.com não casa com api-internal-example-com. Listas de permissão escritas à mão falham aqui mais do que em qualquer outro lugar.

    Escreve para o motor que você usa

    Motores de busca precisam de ^ e $ para fixar uma correspondência. Prometheus, Alertmanager e Envoy casam a string inteira e precisam de .* em regras de prefixo e sufixo. Você escolhe o motor e o gerador adapta o padrão.

    Testa antes de publicar

    Cada linha de teste recebe um selo de correspondência ou sem correspondência, usando o padrão que você está prestes a copiar. Inclua de propósito os quase-casos: checkout-v22 ao lado de checkout-v2, example.com.evil.io ao lado de example.com.

    Onde os padrões falham

    A regex que passou na revisão e mesmo assim acordou alguém

    A maioria dos incidentes com regex em configurações de rollout e de alertas não é exótica. Uma regra de targeting que devia cobrir três hosts internos também cobriu um sósia. Um matcher de alerta escrito com âncoras que o Prometheus não precisa deixou um serviço de fora sem aviso. Um filtro de log que casou por substring escondeu os erros que ele devia contar. O padrão raramente é esperto demais. Quase sempre é frouxo demais, ou foi testado só em linhas que deveriam casar. Uma regra que controla um rollout deve ser testada primeiro nas linhas que não podem casar.

    • Escape os pontos em todo hostname
    • Saiba se o seu motor ancora por você
    • Teste os quase-casos, não só os acertos
    • Prefira uma lista literal a uma regex quando o conjunto for pequeno e estável
    Corredor de racks de servidores com luzes verdes de status
    Uso

    De uma lista de valores a um padrão em que você confia

    1. 1

      Escolha o tipo de correspondência

      Valores exatos para listas de permissão de hosts e chaves de flag, prefixo para grupos de rotas, códigos de status para regras de alerta e famílias de versão para targeting de rollout por versão do app.

    2. 2

      Escolha o motor

      Use correspondência por busca para código e grep. Use correspondência completa para matchers do Prometheus, rotas do Alertmanager e Envoy. Essa única escolha elimina o erro de âncora mais comum.

    3. 3

      Cole os quase-casos na caixa de teste

      Adicione um host parecido, uma versão vizinha e um código de status logo fora do intervalo. Se algum deles mostrar correspondência, aperte os valores antes de copiar o padrão.

    Perguntas frequentes

    Este gerador de regex é grátis e envia meus valores para algum lugar?
    É grátis e roda inteiramente no seu navegador. Os valores que você digita, o padrão e as linhas de teste nunca são enviados a um servidor. A única requisição é um contador anônimo que registra que a ferramenta foi usada.
    Qual motor de regex o resultado usa como alvo?
    Dois comportamentos cobrem a maior parte do trabalho de infraestrutura. A correspondência por busca serve para JavaScript, Go regexp, grep -E e PCRE, onde um padrão pode casar em qualquer ponto da linha, então a ferramenta adiciona ^ e $ quando você precisa. A correspondência completa serve para Prometheus, Alertmanager e Envoy, que tratam a string inteira como correspondência, então a ferramenta adiciona .* onde você quer uma regra de prefixo, sufixo ou contém.
    Por que o Prometheus ignora minhas âncoras ^ e $?
    Os matchers de label do Prometheus são totalmente ancorados. A expressão env=~"prod" é avaliada como ^(?:prod)$, então um padrão escrito para grep vai casar menos do que você espera, ou nada, sem aviso. Escolha o motor de correspondência completa e o gerador escreve o padrão do jeito que o Prometheus lê.
    O padrão evita backtracking catastrófico?
    Os padrões gerados usam apenas literais, classes de caracteres limitadas e alternâncias planas. Não há quantificadores aninhados, que são a causa habitual de backtracking descontrolado em JavaScript e PCRE. Motores baseados em RE2, como Go e Envoy, rodam em tempo linear de qualquer forma.
    Como os caracteres especiais são tratados?
    Todo valor literal é escapado. Um host como api.internal.example.com vira api\.internal\.example\.com, então o ponto deixa de casar com qualquer caractere. Esse é o erro mais comum em listas de permissão escritas à mão, e é ele que deixa passar api-internal-example-com.
    Posso usar o padrão em uma regra de targeting de feature flag?
    Sim, desde que a sua plataforma de flags tenha um operador de regex ou de correspondência de padrão sobre um atributo de contexto, como hostname, caminho ou e-mail do usuário. Confirme qual motor ela usa antes de colar. Se ela só oferecer operadores de correspondência exata ou de começa com, uma lista de valores literais é mais segura do que uma regex.
    O que ele não faz?
    Não infere um padrão a partir de exemplos e não gera intervalos numéricos nem lookaheads. Ele monta um padrão a partir de uma lista de valores que você fornece, usando regras que você consegue ler. As linhas de teste são avaliadas com o motor JavaScript, então confirme o comportamento específico de cada motor na sua stack antes de publicar.

    Condicione o rollout ao SLO, não a um palpite

    Regras de targeting decidem quem recebe uma mudança. O AI Pilot do upstreamapi decide se ela continua e reverte sozinho quando a taxa de erro ultrapassa o limite do seu SLO.