Todos os produtos
Search
Central de documentação

Simple Log Service:Extrair pares chave-valor dinâmicos de uma string

Última atualização: Jul 03, 2026

Este tópico descreve como extrair pares chave-valor dinâmicos de uma string.

Funções

A extração de pares chave-valor dinâmicos é um processo que extrai e transforma palavras-chave e valores. Use as funções e_kv, e_kv_delimit e e_regex para essa tarefa. A tabela a seguir descreve as funções em diferentes casos de uso.

Função

Extração de palavra-chave

Extração de valor

Transformação de palavra-chave

Transformação de valor

e_kv

Usa expressões regulares específicas.

Suporta o conjunto de caracteres padrão e delimitadores específicos, como vírgulas (,) e aspas simples (").

Suporta prefixos e sufixos.

Suporta escape de texto.

e_kv_delimit

Usa expressões regulares específicas.

Utiliza delimitadores.

Suporta prefixos e sufixos.

Nenhuma (padrão).

e_regex

Usa expressões regulares personalizadas e o conjunto de caracteres padrão.

Personalizada.

Personalizada.

Personalizada.

Na maioria dos casos, use a função e_kv e configure parâmetros específicos para extrair pares chave-valor, especialmente quando for necessário extrair e aplicar escape em caracteres entre aspas ou barras invertidas (\). Em cenários complexos ou avançados, utilize a função e_regex para a extração. Já em situações específicas, a função e_kv_delimit pode ser necessária para extrair os pares chave-valor.

Extrair palavras-chave

  • Método

    Ao usar a função e_kv, e_kv_delimit ou e_regex para extrair palavras-chave, as funções devem obedecer às restrições de extração. Para obter mais informações, consulte Limites em nomes de campos para extração.

  • Exemplo 1

    O exemplo a seguir descreve as funções para extrair palavras-chave e valores do log k1: q=asd&a=1&b=2&__1__=3.

    • Função e_kv

      • Log bruto

        k1: q=asd&a=1&b=2&__1__=3
      • Regra de transformação

        # By default, keywords are extracted by using a specific character set.
        e_kv("k1")
      • Resultado

        k1: q=asd&a=1&b=2
        q: asd
        a: 1
        b: 2
        Nota

        A palavra-chave __1__ não foi extraída porque não obedece às restrições de extração. Para obter mais informações, consulte Limites em nomes de campos para extração.

    • Função e_kv_delimit

      • Log bruto

        k1: q=asd&a=1&b=2&__1__=3
      • Regra de transformação

        # After the key-value pair is separated by an ampersand (&), extract the keywords by using the ampersand (&).
        e_kv_delimit("k1", pair_sep=r"&")
      • Resultado

        k1: q=asd&a=1&b=2
        q: asd
        a: 1
        b: 2
    • Função e_regex

      • Log bruto

        k1: q=asd&a=1&b=2&__1__=3
      • Regra de transformação

        # Keywords and values are extracted by using a custom character set.
        e_regex("k1",r"(\w+)=([a-zA-Z0-9]+)",{r"\1": r"\2"})
      • Resultado

        k1: q=asd&a=1&b=2
        q: asd
        a: 1
        b: 2
  • Exemplo 2

    O exemplo a seguir descreve as funções para extrair palavras-chave do log content:k1=v1&k2=v2?k3:v3 usando expressões regulares.

    • Função e_kv

      • Log bruto

        content:k1=v1&k2=v2?k3:v3
      • Regra de transformação

        e_kv("content",sep="(?:=|:)")
      • Resultado

        content:k1=v1&k2=v2?k3:v3
        k1: v1
        k2: v2
        k3: v3
        Nota

        Quando um conjunto de caracteres é passado para o parâmetro pair_sep, kv_sep ou sep, use expressões regulares que incluam um grupo sem captura no formato (?:Conjunto de caracteres).

    • Função e_kv_delimit

      • Log bruto

        content:k1=v1&k2=v2?k3:v3
      • Regra de transformação

        e_kv_delimit("content",pair_sep=r"&?",kv_sep="(?:=|:)")
      • Resultado

        content:k1=v1&k2=v2?k3:v3
        k1: v1
        k2: v2
        k3: v3
    • Função e_regex

      • Log bruto

        content:k1=v1&k2=v2?k3:v3
      • Regra de transformação

        e_regex("content",r"([a-zA-Z0-9]+)[=|:]([a-zA-Z0-9]+)",{r"\1": r"\2"})
      • Resultado

        content:k1=v1&k2=v2?k3:v3
        k1: v1
        k2: v2
        k3: v3
  • Exemplo 3

    O exemplo a seguir mostra como usar a função e_regex para extrair palavras-chave de uma string complexa.

    • Log bruto

      content :"key1:"value1,"key2:"value2
    • Regra de transformação

      Se houver aspas duplas (") antes das palavras-chave, use a função e_regex.

      e_regex("content", r"(\w+):\"(\w+)", {r"\1": r"\2"})
    • Resultado

      Formato do log após a orquestração DSL:

      content :"key1:"value1,"key2:"value2
      key1: value1
      key2: value2

Extrair valores

  • O exemplo a seguir mostra como usar a função e_kv para extrair valores de um log quando existem identificadores claros entre pares chave-valor dinâmicos ou entre palavras-chave e valores, como a=b e a="cxxx".

    • Log bruto

      content1:  k1="helloworld",the change world, k2="good"
    • Regra de transformação

      Neste caso, the change world não é extraído.

      e_kv("content1")
      # The syntax of the e_kv_delimit function: A space is required before k2. Therefore, k2 can be parsed only when the pair_sep parameter of the e_kv_delimit function is set to ",\s".
      e_kv_delimit("content1",kv_sep="=", pair_sep=",\s")
      # The syntax of the e_regex function.
      e_regex("str",r"(\w+)=(\"\w+)",{r"\1": r"\2"})
    • Resultado

      Log extraído:

      content1:  k1="helloworld",the change world, k2="good"
      k1: helloworld
      k2: good
  • O exemplo a seguir mostra como usar a função e_kv para extrair valores de um log que contém o caractere " no formato content:k1="v1=1"&k2=v2?k3=v3.

    • Log bruto

      content:k1="v1=1"&k2=v2?k3=v3
    • Regra de transformação

      e_kv("content",sep="=", quote="'")
    • Resultado

      Log extraído:

      content: k1='v1=1'&k2=v2?k3=v3
      k1: v1=1
      k2:v2
      k3:v3

    Se você usar a função e_kv_delimit para extrair valores e a sintaxe for e_kv_delimit("ctx", pair_sep=r"&?", kv_sep="="), apenas k2: v2 e k3: v3 poderão ser analisados. A palavra-chave k1="v1 no primeiro par chave-valor é descartada porque não obedece às restrições de extração. Para obter mais informações, consulte Limites em nomes de campos para extração.

  • Alguns pares chave-valor separados por delimitadores contêm caracteres especiais, mas não estão entre caracteres específicos. Use a função e_kv_delimit para extrair valores desses pares chave-valor. Exemplo:

    • Log bruto

      content:  rats eat rice, oil|chicks eat bugs, rice|kittens eat fish, mice|
    • Regra de transformação (recomendada)

      Use a função e_kv_delimit.

      e_kv_delimit("content", pair_sep="|", kv_sep=" eat ")
    • Resultado (recomendado)

      Log extraído:

      content:  rats eat rice, oil|chicks eat bugs, rice|kittens eat fish, mice|
      kittens:  fish, mice
      chicks:  bugs, rice
      rats:  rice, oil
    • Regra de transformação (não recomendada)

      Se você usar a função e_kv, alguns campos de log não poderão ser analisados.

      e_kv("f1", sep="eat")
    • Resultado (não recomendado)

      Log extraído:

      content:  rats eat rice, oil|chicks eat bugs, rice|kittens eat fish, mice|
      kittens:  fish
      chicks:  bugs
      rats:  rice

Transformar palavras-chave

  • O exemplo a seguir mostra como usar a função e_kv ou e_kv_delimit para transformar palavras-chave e valores ao configurar os parâmetros de prefixo e sufixo no formato prefix="", suffix="".

    • Log bruto

      k1: q=asd&a=1&b=2
    • Regra de transformação

      e_kv("k1", sep="=", quote='"', prefix="start_", suffix="_end")
      e_kv_delimit("k1", pair_sep=r"&", kv_sep="=", prefix="start_", suffix="_end")
      e_regex("k1",r"(\w+)=([a-zA-Z0-9]+)",{r"start_\1_end": r"\2"})
    • Resultado

      Palavras-chave transformadas:

      k1: q=asd&a=1&b=2
      start_q_end: asd
      start_a_end: 1
      start_b_end: 2
  • O exemplo a seguir mostra como usar a função e_regex para transformar palavras-chave. A função e_regex oferece recursos mais avançados para essa finalidade.

    • Regra de transformação

      e_regex("k1",r"(\w+)=([a-zA-Z0-9]+)",{r"\1_\1": r"\2"})
    • Resultado

      Palavras-chave transformadas:

      k1: q=asd&a=1&b=2
      q_q: asd
      a_a: 1
      a_a: 2

Transformar valores

  • O exemplo a seguir mostra como usar a função e_kv para transformar valores quando um log está no formato k1:"v1\"abc" e há aspas duplas no conteúdo do log. Nesse cenário, é difícil usar as outras duas funções para transformar valores.

    • Log bruto

      """
      In this example, the backlash (\) character is not an escape character.
      """
      content2:  k1:"v1\"abc", k2:"v2", k3: "v3"
    • Regra de transformação 1

      e_kv("content2",sep=":", quote='"')
    • Resultado 1

      Log extraído:

      content2:  k1:"v1\"abc", k2:"v2", k3: "v3"
      k1: v1\
      k2: v2
      k3: v3
    • Regra de transformação 2

      Use a função e_kv para aplicar escape ao caractere barra invertida (\) usando o parâmetro escape. Exemplo:

      e_kv("content2",sep=":", quote='"',escape=True)
    • Resultado 2

      Log extraído:

      content2:  k1:"v1\"abc", k2:"v2", k3: "v3"
      k1: v1"abc
      k2: v2
      k3: v3
  • O exemplo a seguir mostra como usar a função e_kv para transformar valores quando um log está no formato a='k1=k2\';k2=k3'. Nesse cenário, é difícil usar as outras duas funções para transformar valores.

    • Log bruto

      data: i=c10 a='k1=k2\';k2=k3'
    • Regra de transformação 1

      Na função e_kv, o valor do parâmetro escape é False por padrão.

      e_kv("data", quote="'")
    • Resultado 1

      Log extraído:

      a:  k1=k2\
      i:  c10
      k2:  k3
    • Regra de transformação 2

      Use a função e_kv para aplicar escape ao caractere barra invertida (\) usando o parâmetro escape. Exemplo:

      e_kv("data", quote="'", escape=True)
    • Resultado 2

      Log extraído:

      data: i=c10 a='k1=k2\';k2=k3'
      i: c10
      a: k1=k2';k2=k3
  • O exemplo a seguir mostra como usar a função e_regex para transformar pares chave-valor complexos.

    • Log bruto

      content:  rats eat rice|chicks eat bugs|kittens eat fish|
    • Regra de transformação

      e_regex("content", r"\b(\w+) eat ([^\|]+)", {r"\1": r"\2 by \1"})
    • Resultado

      Log extraído:

      content:  rats eat rice|chicks eat bugs|kittens eat fish|
      kittens:  fish by kittens
      chicks:  bugs by chicks
      rats:  rice by rats

Estudos de caso

Neste exemplo, sua empresa precisa extrair dados de URL dos logs do site. Especifique regras de transformação conforme necessário.

  • Transformação inicial

    • Requisitos

      • Requisito 1: Analisar um log e extrair os campos proto, domain e param do log.

      • Requisito 2: Expandir os pares chave-valor no campo param.

    • Log bruto

      __source__:  192.168.0.100
      __tag__:__client_ip__:  192.168.0.200
      __tag__:__receive_time__:  1563517113
      __topic__:  
      request:  https://example.com/video/getlist/s?ver=3.2.3&app_type=supplier&os=Android8.1.0
    • Funções

      • Orquestração geral

        # Parse the request field.
        e_regex('request',grok("%{URIPROTO:uri_proto}://(?:%{USER:user}(?::[^@]*)?@)?(?:%{URIHOST:uri_domain})?(?:%{URIPATHPARAM:uri_param})?"))
        # Parse the uri_param field.
        e_regex('uri_param',grok("%{GREEDYDATA:uri_path}\?%{GREEDYDATA:uri_query}"))
        # Expand the key-value pairs.
        e_kv("uri_query")
      • Orquestração específica e resultados da transformação

        1. Use a função Grok para analisar o campo request.

          Também é possível usar expressões regulares para analisar o campo request. Para obter mais informações, consulte Função Grok e Referência de padrões Grok.

          e_regex('request',grok("%{URIPROTO:uri_proto}://(?:%{USER:user}(?::[^@]*)?@)?(?:%{URIHOST:uri_domain})?(?:%{URIPATHPARAM:uri_param})?"))

          Resultado:

          uri_domain:  example.com
          uri_param:  /video/getlist/s?ver=3.2.3&app_type=supplier&os=Android8.1.0
          uri_proto:  https
        2. Use a função Grok para analisar o campo uri_param.

          e_regex('uri_param',grok("%{GREEDYDATA:uri_path}\?%{GREEDYDATA:uri_query}"))

          Resultado:

          uri_path:  /video/getlist/s
          uri_query:  ver=3.2.3&app_type=supplier&os=Android8.1.0
        3. Extraia o campo uri_param.

          e_kv("uri_query")

          Resultado:

          app_type:  supplier
          os:  Android8.1.0
          ver:  3.2.3
  • Resultado

    Visualize o log transformado:

    __source__:  192.168.0.100
    __tag__:__client_ip__:  192.168.0.200
    __tag__:__receive_time__:  1563517113
    __topic__:  
    request:  https://example.com/video/getlist/s?ver=3.2.3&app_type=supplier&os=Android8.1.0
    uri_domain:  example.com
    uri_path:  /video/getlist/s
    uri_proto:  https
    uri_query:  ver=3.2.3&app_type=supplier&os=Android8.1.0
    app_type:  supplier
    os:  Android8.1.0
    ver:  3.2.3

    Para analisar apenas o campo request, use a função e_kv. Exemplo:

    e_kv("request")

    Visualize o log transformado:

    __source__:  192.168.0.100
    __tag__:__client_ip__:  192.168.0.200
    __tag__:__receive_time__:  1563517113
    __topic__:  
    request:  https://example.com/video/getlist/s?ver=3.2.3&app_type=supplier&os=Android8.1.0
    app_type:  supplier
    os:  Android8.1.0
    ver:  3.2.3
  • Transformação avançada

    Para extrair campos dinâmicos, como ver, app_type e os, use expressões regulares ou a função e_kv_delimit. Exemplo:

    • Use expressões regulares.

      e_regex("url", r"\b(\w+)=([^=&]+)", {r"\1": r"\2"})
    • Use a função e_kv_delmit.

      e_kv_delimit("url", pair_sep=r"?&")
  • Conclusão

    A maioria das URLs pode ser analisada com as funções anteriores. Use a função e_kv para analisar URLs de logs brutos.