Todos os produtos
Search
Central de documentação

Simple Log Service:Funções de extração de valores

Última atualização: Aug 26, 2026

Este tópico explica a sintaxe das funções de extração de valores de campos, incluindo parâmetros e exemplos.

Lista de funções

Tipo

Função

Descrição

Extração por expressão regular

e_regex

Extrai um valor de um campo usando uma expressão regular e o atribui a outro campo.

É possível combinar esta função com outras. Para ver um exemplo relacionado, consulte Parse Java error logs.

Extração JSON

e_json

Processa um objeto JSON em um campo especificado. As operações incluem expandir o objeto, extrair dados com JMESPath ou extrair e expandir simultaneamente.

É possível combinar esta função com outras. Para ver um exemplo relacionado, consulte Transform complex JSON data.

Extração baseada em delimitador

e_csv, e_psv, e_tsv

Extrai valores para vários campos de um campo de source usando um delimitador e nomes de campos predefinidos.

  • e_csv: O delimitador padrão é a vírgula (,).

  • e_psv: O delimitador padrão é a barra vertical (|).

  • e_tsv: O delimitador padrão é o caractere de tabulação (\t).

É possível combinar estas funções com outras. Para ver um exemplo relacionado, consulte Parse CSV-formatted logs.

Extração chave-valor

e_kv

Extrai pares chave-valor de um ou mais campos de source usando um caractere de aspas especificado.

É possível combinar esta função com outras. Para ver um exemplo relacionado, consulte Extract dynamic key-value pairs from a string.

e_kv_delimit

Extrai pares chave-valor de um campo de source usando um delimitador.

Extração padrão Syslog

e_syslogrfc

Calcula facility e severity a partir de um valor de prioridade com base no protocolo Syslog e os mapeia para o nível correspondente.

É possível combinar esta função com outras. Para ver um exemplo relacionado, consulte Parse standard Syslog format data.

Extração baseada em regras

e_anchor

Extrai strings usando as regras definidas em anchor_rules.

e_regex

Extrai valores de um campo com base em uma expressão regular e os atribui a outros campos.

  • Sintaxe

    e_regex(key, regex, fields_info, mode="fill-auto", pack_json=None)
  • Parâmetros

    Parâmetro

    Tipo

    Obrigatório

    Descrição

    key

    Qualquer

    Sim

    O campo de source. Se o campo não existir, a função não executará nenhuma ação. Para obter informações sobre como configure nomes de campos especiais, consulte event types.

    regex

    String

    Sim

    A expressão regular usada para extrair valores de campos. Ela suporta grupos de captura e grupos sem captura.

    Nota

    Um grupo sem captura, que exige o prefixo ?:, às vezes é usado para agrupamento. Por exemplo, \w+@\w+\.\w(?:\.\cn)?. Para obter mais informações, consulte non-capturing groups.

    fields_info

    String/List/Dict

    Não

    Os campos de destino para os valores correspondentes. Este parâmetro é obrigatório se você não usar grupos de captura nomeados na expressão regular.

    mode

    String

    Não

    O modo de sobrescrita para os campos. O valor padrão é fill-auto. Para obter mais informações sobre os valores e seus significados, consulte field extraction check and overwrite mode.

    pack_json

    String

    Não

    Empacota todos os resultados correspondentes da expressão regular no campo especificado por pack_json. O valor padrão é None, o que indica que o empacotamento está desativado.

  • Resposta

    Retorna o log atualizado com os campos extraídos e seus respectivos valores.

  • Exemplos

    • Exemplo 1: Extrair um único valor

      • Log bruto

        msg: 192.168.0.1 http://... 127.0.0.0
      • Regra de transformação

        # Extract the first IP address from the msg field. 
        e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","ip")
      • Resultado da transformação

        msg: 192.168.0.1 http://... 127.0.0.0
        ip: 192.168.0.1
    • Exemplo 2: Extrair vários valores

      • Log bruto

        msg: 192.168.0.1 http://... 127.0.0.0
      • Regra de transformação

        # Extract two IP addresses from the msg field and assign them to server_ip and client_ip.
        e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",["server_ip","client_ip"])
      • Resultado da transformação

        msg: 192.168.0.1 http://... 127.0.0.0
        server_ip: 192.168.0.1
        client_ip: 127.0.0.0
    • Exemplo 3: Extrair valores usando um grupo de captura.

      • Log bruto

        content: start sys version: deficience, err: 2
      • Regra de transformação

        # Use a regular expression to capture the version and error values from the content field.
        e_regex("content",r"start sys version: (\w+),\s*err: (\d+)",["version","error"])
      • Resultado da transformação

        content: start sys version: deficience, err: 2
        error: 2
        version: deficience
    • Exemplo 4: Extrair valores usando um grupo de captura nomeado

      • Log bruto

        content:  start sys version: deficience, err: 2
      • Regra de transformação

        e_regex("content",r"start sys version: (?P<version>\w+),\s*err: (?P<error>\d+)")
      • Resultado da transformação

        content:  start sys version: deficience, err: 2
        error:  2
        version:  deficience
    • Exemplo 5: Crie dinamicamente um nome de campo e um valor a partir do campo dict.

      • Log bruto

        dict: verify:123
      • Regra de transformação

        e_regex("dict",r"(\w+):(\d+)",{r"k_\1": r"v_\2"})
      • Resultado da transformação

        dict: verify:123
        k_verify: v_123
    • Exemplo 6: Extrair e empacotar um valor no campo name.

      • Log bruto

        msg: 192.168.0.1 http://... 127.0.0.0
      • Regra de transformação

        e_regex("msg", r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", "ip", pack_json="name")
      • Resultado da transformação

        msg:192.168.0.1 http://... 127.0.0.0
        name:{"ip": "192.168.0.1"}
    • Exemplo 7: Crie dinamicamente campos a partir do campo dict e empacotá-los no campo name.

      • Log bruto

        dict: x:123, y:456, z:789
      • Regra de transformação

        e_regex("dict", r"(\w+):(\d+)", {r"k_\1": r"v_\2"}, pack_json="name")
      • Resultado da transformação

        dict:x:123, y:456, z:789
        name:{"k_x": "v_123", "k_y": "v_456", "k_z": "v_789"}
    • Exemplo 8: Extrair e empacotar valores de um grupo de captura no campo name.

      • Log bruto

        content: start sys version: deficience, err: 2
      • Regra de transformação

        e_regex( "content", r"start sys version: (\w+),\s*err: (\d+)", ["version", "error"],pack_json="name")
      • Resultado da transformação

        content:start sys version: deficience, err: 2
        name:{"version": "deficience", "error": "2"}
  • Referências

    É possível combinar esta função com outras. Para ver um exemplo relacionado, consulte Parse Java error logs.

e_json

Executa operações JSON em um objeto JSON dentro de um campo especificado. Essas operações incluem expandir os dados JSON, extrair dados com uma expressão JMESPath ou extrair e depois expandir um subconjunto JSON.

  • Sintaxe

    e_json(key, expand=None, depth=100, prefix="__", suffix="__", fmt="simple", sep=".", 
         expand_array=True, fmt_array="{parent}_{index}", 
         include_node=r"[\u4e00-\u9fa5\u0800-\u4e00a-zA-Z][\w\-\.]*",  
         exclude_node="", include_path="", exclude_path="",
         jmes="", output="", jmes_ignore_none=False, mode='fill-auto'
    )
    Nota

    Se a string de destino não for um objeto JSON válido, a função e_json retorna a string original sem analisá-la.

  • Parâmetros

    Parâmetro

    Tipo

    Obrigatório

    Descrição

    key

    String

    Sim

    O nome do campo de entrada. Se o campo não existir, a função não executará nenhuma ação. Para obter informações sobre como configure nomes de campos especiais, consulte Event types.

    expand

    Boolean

    Não

    Especifica se o campo deve ser expandido.

    • Se o parâmetro jmes não estiver configurado, o valor padrão é True, o que expande o campo.

    • Se o parâmetro jmes estiver configurado, o valor padrão é False, o que não expande o campo.

    depth

    Number

    Não

    A profundidade até a qual a função expande o campo. Valores válidos: 1 a 2000. O valor padrão é 100. Um valor igual a 1 expande apenas o primeiro nível.

    prefix

    String

    Não

    O prefixo a ser adicionado a cada nome de campo expandido.

    suffix

    String

    Não

    O sufixo a ser adicionado a cada nome de campo expandido.

    fmt

    String

    Não

    O método de formatação para nomes de campos expandidos. Valores válidos:

    • simple (padrão): Usa o nome do nó atual como nome do campo. O formato é {prefix}{current}{suffix}.

    • full: Combina o caminho completo do campo de source até o nó atual como nome do campo. O formato é {parent_list_str}{sep}{prefix}{current}{suffix}. O delimitador é especificado pelo parâmetro sep. O delimitador padrão é ..

    • parent: Combina o nome do nó atual com o nome de seu nó pai imediato. O formato é {parent}{sep}{prefix}{current}{suffix}. O delimitador é especificado pelo parâmetro sep. O delimitador padrão é ..

    • root: Combina o nome do nó atual com o nome do nó raiz. O formato é {parent_list[0]}{sep}{prefix}{current}{suffix}. O delimitador é especificado pelo parâmetro sep. O delimitador padrão é ..

    sep

    String

    Não

    O delimitador entre os nomes dos nós pai e filho. Este parâmetro se aplica quando fmt está definido como full, parent ou root. O valor padrão é ..

    expand_array

    Boolean

    Não

    Especifica se arrays devem ser expandidos. O valor padrão é True.

    fmt_array

    String

    Não

    O método de formatação para expansão de arrays. O formato é {parent_rlist[0]}_{index}. Você também pode crie uma string de formato personalizada usando até cinco placeholders: parent_list, current, sep, prefix e suffix.

    include_node

    String/Number

    Não

    A lista de permissões de nós especifica os nomes de nós a serem incluídos para filtragem. Por padrão, apenas nós cujos nomes consistem em caracteres chineses, dígitos, letras e _.- são expandidos automaticamente.

    exclude_node

    String

    Não

    Uma expressão regular que define uma lista de bloqueios de nomes de nós a serem excluídos.

    include_path

    String

    Não

    Uma expressão regular que define uma lista de permissões de caminhos de nós a serem incluídos.

    exclude_path

    String

    Não

    Uma expressão regular que define uma lista de bloqueios de caminhos de nós a serem excluídos.

    jmes

    String

    Não

    Uma expressão JMESPath para extrair dados do objeto JSON.

    output

    String

    Não

    O nome do campo de saída para o valor extraído usando a expressão JMESPath.

    jmes_ignore_none

    Boolean

    Não

    Especifica o comportamento quando a expressão JMESPath não encontra nenhum valor. Se for True (o padrão), a extração é ignorada. Se for False, uma string vazia será retornada.

    mode

    String

    Não

    O modo de sobrescrita de campos. O valor padrão é fill-auto. Para obter mais informações, consulte Field extraction check and overwrite modes.

    • Filtragem de expansão JSON

      • Se uma lista de permissões de nós estiver definida, apenas os nós presentes nela serão incluídos no resultado. Exemplo de expressão regular para lista de permissões de nós: e_json("json_data_filed", ...., include_node=r'key\d+').

      • Se uma lista de bloqueios de nós estiver definida, os nós presentes nela serão excluídos do resultado. Exemplo de expressão regular para lista de bloqueios de nós: e_json("json_data_filed", ...., exclude_node=r'key\d+').

      • Para expansão de caminhos de nós, as expressões regulares include_path e exclude_path são comparadas com o início do caminho. Os caminhos de nós usam . como delimitador.

    • Filtragem JMESPath

      Use JMESPath para selecione e calcular dados.

      • Selecione uma lista de atributos de elementos de um caminho JSON específico: e_json(..., jmes="cve.vendors[*].product",output="product")

      • Concatene atributos de elementos de um caminho JSON específico com uma vírgula (,): e_json(..., jmes="join(',', cve.vendors[*].name)",output="vendors")

      • Calcule o valor máximo de atributo para elementos em um caminho JSON específico: e_json(..., jmes="max(words[*].score)",output="hot_word")

      • Retorne uma string vazia se um caminho específico não existir ou estiver vazio: e_json(..., jmes="max(words[*].score)",output="hot_word", jmes_ignore_none=False)

    • parent_list e parent_rlist

      Os exemplos a seguir demonstram seu uso.

      Log bruto:

      data: { "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}
      • parent_list organiza os nós pais da esquerda para a direita.

        e_json("data", fmt='{parent_list[0]}-{parent_list[1]}#{current}')

        Resultado da transformação:

        data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}
        data-k2#k3:200
        data-k2#k5:300
      • parent_rlist organiza os nós pais da direita para a esquerda.

        e_json("data", fmt='{parent_rlist[0]}-{parent_rlist[1]}#{current}')

        Resultado da transformação:

        data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}
        k2-data#k3:200
        k4-k2#k5:300
  • Resposta

    Retorna o log com os novos campos adicionados.

  • Exemplos

    • Exemplo 1: Expandir um campo.

      • Log bruto

        data: {"k1": 100, "k2": 200}
      • Regra de transformação

        e_json("data",depth=1)
      • Resultado da transformação

        data: {"k1": 100, "k2": 200}
        k1: 100
        k2: 200
    • Exemplo 2: Adicionar um prefixo e um sufixo aos nomes dos campos.

      • Log bruto

        data: {"k1": 100, "k2": 200}
      • Regra de transformação

        e_json("data", prefix="data_", suffix="_end")
      • Resultado da transformação

        data: {"k1": 100, "k2": 200}
        data_k1_end: 100
        data_k2_end: 200
    • Exemplo 3: Expandir um campo usando diferentes formatos.

      • Log bruto

        data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
      • fmt=full

        e_json("data", fmt='full')
        data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
        data.k1: 100
        data.k2.k3: 200
        data.k2.k4.k5: 300
      • fmt=parent

        e_json("data", fmt='parent')
        data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
        data.k1: 100
        k2.k3: 200
        k4.k5: 300
      • fmt=root

        e_json("data", fmt='root')
        data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
        data.k1: 100
        data.k3: 200
        data.k5: 300
    • Exemplo 4: Extrair dados JSON com um delimitador, prefixo e sufixo especificados.

      • Log bruto

        data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
      • Regra de transformação

        e_json("data", fmt='parent', sep="@", prefix="__", suffix="__")
      • Resultado da transformação

        data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } }
        data@__k1__:100
        k2@__k3__:200
        k4@__k5__:300
    • Exemplo 5: Usar o parâmetro fmt_array para extrair dados JSON como um array.

      • Log bruto

        people: [{"name": "xm", "sex": "boy"}, {"name": "xz", "sex": "boy"}, {"name": "xt", "sex": "girl"}]
      • Regra de transformação

        e_json("people", fmt='parent', fmt_array="{parent_rlist[0]}-{index}")
      • Resultado da transformação

        people: [{"name": "xm", "sex": "boy"}, {"name": "xz", "sex": "boy"}, {"name": "xt", "sex": "girl"}]
        people-0.name: xm
        people-0.sex: boy
        people-1.name: xz
        people-1.sex: boy
        people-2.name: xt
        people-2.sex: girl
    • Exemplo 6: Usar uma expressão JMESPath para extrair um objeto JSON.

      • Log bruto

        data: { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}}
      • Regra de transformação

        e_json("data", jmes='foo', output='jmes_output0')
        e_json("data", jmes='foo.bar', output='jmes_output1')
        e_json("data", jmes='people[0].last', output='jmes_output2')
        e_json("data", jmes='people[*].first', output='jmes_output3')
      • Resultado da transformação

        data: { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}}
        jmes_output0: {"bar": "baz"}
        jmes_output1: baz
        jmes_output2: d
        jmes_output3: ["James", "Jacob"]
  • Leitura adicional

    Para ver um exemplo de combinação desta função com outras, consulte Complex JSON data transformation.

e_csv, e_psv e e_tsv

Estas funções extraem vários campos de um campo especificado usando um delimitador personalizado e nomes de campos predefinidos.

  • e_csv: O delimitador padrão é a vírgula (,).

  • e_psv: O delimitador padrão é a barra vertical (|).

  • e_tsv: O delimitador padrão é o caractere de tabulação (\t).

  • Sintaxe

    e_csv(input field name, output field list, sep=",", quote='"', restrict=True, mode="fill-auto")
    e_psv(input field name, output field list, sep="|", quote='"', restrict=True, mode="fill-auto")
    e_tsv(input field name, output field list, sep="\t", quote='"', restrict=True, mode="fill-auto")
  • Parâmetros

    Parâmetro

    Tipo

    Obrigatório

    Descrição

    input field name

    Qualquer

    Sim

    O nome do campo de entrada. Se o campo especificado não existir, a função não executará nenhuma ação. Para obter informações sobre como especifique nomes de campos especiais, consulte Event types.

    output field list

    Qualquer

    Sim

    Os nomes dos campos de saída que armazenam os valores analisados.

    Você pode fornecer os nomes como uma lista de strings, como ["error", "message", "result"].

    Se os nomes dos campos não contiverem vírgulas, você também pode fornecer uma única string com nomes separados por vírgulas, como "error, message, result".

    Para obter informações sobre como especifique nomes de campos especiais, consulte Event types.

    sep

    String

    Não

    O delimitador. Deve ser um único caractere.

    quote

    String

    Não

    O caractere usado para envolver valores. Use-o quando um valor contiver o delimitador.

    restrict

    Boolean

    Não

    Especifica se o modo restrito deve ser usado. O valor padrão é True, que ativa o modo restrito. Este parâmetro determina o comportamento quando o número de valores analisados não corresponde ao número de campos de saída:

    • No modo restrito (True), a função não executa nenhuma ação.

    • No modo não restrito (False), a função atribui valores aos campos correspondentes.

    mode

    String

    Não

    O modo de sobrescrita de campos. O valor padrão é fill-auto. Para obter mais informações sobre os valores e seus significados, consulte Field extraction check and overwrite modes.

  • Resposta

    Retorna o log com os novos campos adicionados.

  • Exemplos

    O exemplo a seguir usa e_csv. As funções e_psv e e_tsv operam de maneira semelhante.

    • Log bruto

      content: 192.168.0.100,10/Jun/2019:11:32:16 +0800,example.aliyundoc.com,GET /zf/11874.html HTTP/1.1,200,0.077,6404,192.168.0.100:8001,200,0.060,https://image.developer.aliyundoc.com/s?q=how-to-make-noodles&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36,-,-
    • Regra de transformação

      e_csv("content", "remote_addr, time_local,host,request,status,request_time,body_bytes_sent,upstream_addr,upstream_status, upstream_response_time,http_referer,http_x_forwarded_for,http_user_agent,session_id,guid")
    • Resultado

      content:  192.168.0.100,10/Jun/2019:11:32:16 +0800,example.aliyundoc.com,GET /zf/11874.html HTTP/1.1,200,0.077,6404,192.168.0.100:8001,200,0.060,https://image.developer.aliyundoc.com/s?q=how-to-make-noodles&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36,-,-
        body_bytes_sent:  6404
      guid:  -
      host:  example.aliyundoc.com
      http_referer:  https://image.developer.aliyundoc.com/s?q=how-to-make-noodles&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei
      http_user_agent:  Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36
      http_x_forwarded_for:  -
      remote_addr:  192.168.0.100
      request:  GET /zf/11874.html HTTP/1.1
      request_time:  0.077
      session_id:  -
      status:  200
      time_local:  10/Jun/2019:11:32:16 +0800
      topic:  syslog-forwarder
      upstream_addr:  192.168.0.100:8001
      upstream_response_time:  0.060
      upstream_status:  200
  • Mais informações

    É possível combinar estas funções com outras. Para ver um exemplo relacionado, consulte Parse CSV-formatted logs.

e_kv

Extrai pares chave-valor de um ou mais campos de entrada.

  • Sintaxe

    e_kv(field_or_list, sep="=", quote='"', escape=False, prefix="", suffix="", mode="fill-auto")
  • Parâmetros

    Parâmetro

    Tipo

    Obrigatório

    Descrição

    field_or_list

    String ou lista de strings

    Sim

    O nome de um ou mais campos de entrada. Para obter informações sobre como especifique nomes de campos especiais, consulte Event types.

    sep

    String

    Não

    O separador chave-valor, que pode ser uma expressão regular. O valor padrão é =.

    Nota

    Você pode usar grupos sem captura, mas não grupos de captura. Para obter mais informações, consulte Grouping.

    quote

    String

    Não

    O caractere usado para envolver valores. O valor padrão é ".

    Nota

    O valor de um par chave-valor dinâmico extraído geralmente é colocado entre aspas, por exemplo, a="abc" e b="xyz". Se um valor não estiver entre aspas, o sistema extrai apenas um valor composto pelos seguintes caracteres: caracteres chineses, letras, números e os símbolos _-.%~. Por exemplo, de a=ab12_-.%~|abc b=123, o sistema extrai a: ab12_-.%~ e b: 123.

    escape

    Boolean

    Não

    Controla se caracteres de escape nos valores devem ser interpretados. O valor padrão é False. Por exemplo, da entrada key="abc\"xyz", por padrão, a função extrai o valor abc\ para o campo key. Se você defina escape=True, o valor extraído será abc"xyz.

    prefix

    String

    Não

    O prefixo a ser adicionado aos nomes dos campos extraídos.

    suffix

    String

    Não

    O sufixo a ser adicionado aos nomes dos campos extraídos.

    mode

    String

    Não

    O modo de sobrescrita de campos. O valor padrão é fill-auto. Para obter mais informações sobre os modos disponíveis, consulte Field extraction check and overwrite modes.

  • Resposta

    Adiciona os pares chave-valor extraídos ao log como novos campos.

  • Exemplos

    • Exemplo 1: Extrair pares chave-valor usando o delimitador padrão =.

      • Log bruto

        http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
        Nota

        Se o log bruto for request_uri: a1=1&a2=&a3=3 e o valor de a2 estiver vazio, a função e_kv() não conseguirá extrair a2. Você pode usar a função e_regex() para extraí-lo, por exemplo, e_regex("request_uri",r'(\w+)=([^=&]*)',{r"\1":r"\2"},mode="overwrite").

      • Regra de transformação

        e_kv("http_refer")
      • Resultado

        http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
        q: asd
        a: 1
        b: 2
    • Exemplo 2: Adicionar um prefixo e um sufixo aos nomes dos campos.

      • Log bruto

        http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
      • Regra de transformação

        e_kv(
            "http_refer",
            sep="=",
            quote='"',
            escape=False,
            prefix="data_",
            suffix="_end",
            mode="fill-auto",
        )
      • Resultado

        http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2
        data_q_end: asd
        data_a_end: 1
        data_b_end: 2
    • Exemplo 3: Extrair pares chave-valor do campo content2 e interpretar caracteres de escape usando o parâmetro escape.

      • Log bruto

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

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

        content2:  k1:"v1\"abc", k2:"v2", k3: "v3"
        k1: v1"abc
        k2: v2
        k3: v3
  • Leitura adicional

    Para ver um exemplo de combinação desta função com outras, consulte Extract dynamic key-value pairs from a string.

e_kv_delimit

Extrai pares chave-valor de um campo de entrada usando delimitadores.

  • Sintaxe

    e_kv_delimit(field_or_list, pair_sep=r"\s", kv_sep="=", prefix="", suffix="", mode="fill-auto")
  • Parâmetros

    Parâmetro

    Tipo

    Obrigatório

    Descrição

    field_or_list

    string ou lista de strings

    Sim

    O nome de um ou mais campos de entrada. Para obter informações sobre como especifique nomes de campos especiais, consulte event type.

    pair_sep

    string

    Não

    Uma expressão regular que separa pares chave-valor. O valor padrão é \s. Outros exemplos incluem \s\w e abc\s.

    Nota

    Para usar uma string literal como separador, recomendamos substituí-la primeiro por um delimitador de caractere único usando a função str_replace ou regex_replace. Em seguida, você pode usar esta função para analisar o campo.

    kv_sep

    string

    Não

    Uma expressão regular que separa uma chave de seu valor. O valor padrão é =. A expressão não se limita a um único caractere.

    Nota

    Você pode usar grupos sem captura, mas não grupos de captura. Para obter mais informações, consulte Grouping.

    prefix

    string

    Não

    O prefixo a ser adicionado aos nomes dos campos extraídos.

    suffix

    string

    Não

    O sufixo a ser adicionado aos nomes dos campos extraídos.

    mode

    string

    Não

    O modo de sobrescrita de campos. O valor padrão é fill-auto. Para obter detalhes sobre os valores, consulte Field extraction check and overwrite modes.

  • Resposta

    Retorna o log com os pares chave-valor extraídos adicionados como novos campos.

  • Exemplos

    • Exemplo 1: Extrair pares chave-valor usando o delimitador padrão =.

      • Log bruto

        data: i=c1 k1=v1 k2=v2 k3=v3
        Nota

        Se o log bruto for request_uri: a1=1&a2=&a3=3, a função e_kv_delimit() não conseguirá extrair a2 porque seu valor está vazio. Para extrair pares com valores vazios, use a função e_regex(). Por exemplo: e_regex("request_uri",r'(\w+)=([^=&]*)',{r"\1":r"\2"}, mode="overwrite").

      • Regra de transformação

        e_kv_delimit("data")
      • Resultado

        data: i=c1 k1=v1 k2=v2 k3=v3
        i: c1
        k2: v2
        k1: v1
        k3: v3
    • Exemplo 2: Extrair pares chave-valor usando o delimitador &?.

      • Log bruto

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

        e_kv_delimit("data",pair_sep=r"&?")
      • Resultado

        data: k1=v1&k2=v2?k3=v3
        k2: v2
        k1: v1
        k3: v3
    • Exemplo 3: Extrair pares chave-valor usando uma expressão regular como separador chave-valor.

      • Log bruto

        data: k1=v1 k2:v2 k3=v3
      • Regra de transformação

        e_kv_delimit("data", kv_sep=r"(?:=|:)")
      • Resultado

        data: k1=v1 k2:v2 k3=v3
        k2: v2
        k1: v1
        k3: v3

e_syslogrfc

Calcula facility e severity a partir de um valor de prioridade de acordo com o protocolo syslog e adiciona os rótulos correspondentes.

  • Sintaxe

    e_syslogrfc(key, rfc, fields_info=None, mode='overwrite')
  • Parâmetros

    Parâmetro

    Tipo

    Obrigatório

    Descrição

    key

    Qualquer

    Sim

    O nome do campo que contém o valor priority.

    rfc

    String

    Sim

    O protocolo syslog a ser usado. Valores válidos: SYSLOGRFC3164 e SYSLOGRFC5424.

    fields_info

    Dict

    Não

    Um dicionário que mapeia nomes de campos de saída padrão (chaves) para nomes personalizados (valores). Os seguintes campos podem ser renomeados: {"_severity_":"sev","_facility_":"fac","_severitylabel_":"sevlabel","_facilitylabel_":"faclabel"}

    mode

    String

    Não

    O modo de sobrescrita para os campos de saída. O valor padrão é overwrite. Para obter mais informações, consulte Field extraction check and overwrite modes.

  • Resposta

    Retorna o log com os novos campos de facility, severity e rótulo.

  • Exemplos

    • Exemplo 1: Extrair informações de facility, severity e rótulo usando o protocolo SYSLOGRFC5424.

      • Log bruto

        receive_time: 1558663265
        _priority_: 13
        _version_: 1
        _log_time_: 2019-05-06 11:50:16.015554+08:00
        _hostname_: iZbp1a65********i2qZ
        _program_: root
        _procid_: -
        _msgid_: -
        _extradata_: -
        _content_: twish
      • Regra de transformação

        e_syslogrfc("_priority_","SYSLOGRFC5424")
      • Resultado

        receive_time: 1558663265
        _priority_: 13
        _version_: 1
        _log_time_: 2019-05-06 11:50:16.015554+08:00
        _hostname_: iZbp1a65********i2qZ
        _program_: root
        _procid_: -
        _msgid_: -
        _extradata_: -
        _content_: twish
        _facility_: 1
        _severity_: 5
        _severitylabel_: Notice: normal but significant condition
        _facilitylabel_: user-level messages
    • Exemplo 2: Extrair informações de facility, severity e rótulo usando o protocolo SYSLOGRFC5424 e renomear os campos de saída.

      • Log bruto

        receive_time: 1558663265
        _priority_: 13
        _version_: 1
        _log_time_: 2019-05-06 11:50:16.015554+08:00
        _hostname_: iZbp1a65********i2qZ
        _program_: root
        _procid_: -
        _msgid_: -
        _extradata_: -
        _content_: twish
      • Regra de transformação

        e_syslogrfc(
            "_priority_",
            "SYSLOGRFC5424",
            {
                "_facility_": "fac",
                "_severity_": "sev",
                "_facilitylabel_": "_facility_label_",
                "_severitylabel_": "_severity_label_",
            },
        )
      • Resultado

        receive_time: 1558663265
        _priority_: 13
        _version_: 1
        _log_time_: 2019-05-06 11:50:16.015554+08:00
        _hostname_: iZbp1a65********i2qZ
        _program_: root
        _procid_: -
        _msgid_: -
        _extradata_: -
        _content_: twish
        fac: 1
        sev: 5
        _severity_label_: Notice: normal but significant condition
        _facility_label_: user-level messages
  • Referências

    É possível combinar esta função com outras. Para ver um exemplo relacionado, consulte Parse standard Syslog format data.

e_anchor

Extrai strings de um campo de entrada usando regras definidas no parâmetro anchor_rules.

  • Sintaxe

    e_anchor(key,anchor_rules,fields,restrict=False,mode="overwrite")
  • Parâmetros

    Parâmetro

    Tipo

    Obrigatório

    Descrição

    key

    Qualquer

    Sim

    O nome do campo de entrada.

    anchor_rules

    String

    Sim

    Define o padrão para extrair strings, onde um asterisco () representa o conteúdo a ser extraído. Por exemplo: User = ; Severity = *;.

    Os logs exibidos no console estão no formato Chave : Valor com um espaço padrão entre os dois pontos e o valor. Ao especifique anchor_rules, não inclua este espaço. Na entrada de log de exemplo, o campo content é o campo alvo a ser extraído.

    _source_:  bin-hangzhou-oss
        _tag_:_object_:  test001/test001-or20190906155735.perf
        _tag_:_receive_time_:  1582768681
        _topic_:
        content:  "Download": 4001792
    Nota

    Um asterisco (*) não pode ser usado como prefixo ou sufixo no valor do campo de entrada.

    fields

    Qualquer

    Sim

    Os nomes dos campos de saída para os valores extraídos. Você pode especifique os nomes como uma lista de strings, como ["user", "job", "result"]. Se os nomes dos campos não contiverem vírgulas (,), você também pode especifique-os como uma única string com nomes separados por vírgulas, como "user, job, result". Para obter detalhes sobre como especifique nomes de campos especiais, que podem conter caracteres especiais, mas não asteriscos (*), consulte event type.

    Você pode pular um nome de campo usando um asterisco (). Por exemplo, se você especifique "user,,result", apenas os campos user e result serão criados. Para obter mais informações, consulte o Exemplo 10.

    restrict

    Boolean

    Não

    Especifica se o modo restrito deve ser usado. O padrão é False (modo não restrito). Este parâmetro determina o comportamento quando o número de valores extraídos não corresponde ao número de campos de saída:

    • No modo restrito (True), a função não executa nenhuma ação.

    • No modo não restrito (False), a função atribui valores aos campos correspondentes em sequência.

    mode

    String

    Não

    O valor padrão é overwrite. Consulte field extraction check and overwrite mode para obter mais informações.

  • Resposta

    Retorna o log original com os campos extraídos e seus valores anexados.

  • Exemplos

    • Exemplo 1: Extrair vários valores

      • Log bruto

        content : "Aug 2 04:06:08: host=192.168.0.10: local/ssl2 notice mcpd[3772]: User=jsmith@example.com: severity=warning: 01070638:5: Pool member 172.31.51.22:0 monitor status down."
      • Regra de transformação

        e_anchor("content","User=*: severity=*:",["user_field","severity_field"])
      • Resultado

        content : "Aug 2 04:06:08: host=192.168.0.10: local/ssl2 notice mcpd[3772]: User=jsmith@example.com: severity=warning: 01070638:5: Pool member 172.31.51.22:0 monitor status down."
        user_field : jsmith@example.com
        severity_field : warning
    • Exemplo 2: Extrair vários valores de array JSON

      • Log bruto

        content : '"information":{"name_list":["Twiss","Evan","Wind","like"],"university":["UCL","Stanford University","CMU"]},"other":"graduate"'
      • Regra de transformação

        e_anchor("content",'name_list":*,"university":*},', ["name_list","universities"])
      • Resultado

        content : '"information":{"name_list":["Twiss","Evan","Wind","like"],"university":["UCL","Stanford University","CMU"]},"other":"graduate"'
        name_list : ["Twiss","Evan","Wind","like"]
        universities : ["UCL","Stanford University","CMU"]
    • Exemplo 3: Extrair de um log que contém caracteres especiais

      • Log bruto

        content : (+2019) June 24 "I am iron man"
      • Regra de transformação

        e_anchor("content", "(+*) * \"*\"",["Year","Date","Msg"])
      • Resultado

        content : (+2019) June 24 "I am iron man"
        Year : 2019
        Date : June 24
        Msg : I am iron man
    • Exemplo 4: Extrair de um log que contém um caractere de controle invisível (\x09)

      • Log bruto

        content : \x09\x09\x09Chrome/55.0 Safari/537.36
      • Regra de transformação

        e_anchor("content", "\x09\x09\x09*/55.0 */537.36",["Google", "Apple"])
      • Resultado

        content : \x09\x09\x09Chrome/55.0 Safari/537.36
        Google : Chrome
        Apple : Safari
    • Exemplo 5: Extrair o campo content, que contém um valor com caracteres especiais. O valor do campo é To...Subject, que segue MESSAGE:.

      • Log bruto

        content : 12:08:10,651 INFO sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE: 
        To: example@aliyun.com
        Subject: New line Breaks in Message
      • Regra de transformação

        e_anchor("content","* INFO *: \n    To: *\n    Subject: *",["time","message","email","subject"])
      • Resultado

        content : 12:08:10,651 INFO sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE: 
        To: example@aliyun.com
        Subject: New line Breaks in Message
        time : 12:08:10,651
        message : sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE
        email : example@aliyun.com
        subject : New line Breaks in Message
    • Exemplo 6: Extrair o campo content, que contém um valor com o caractere especial invisível \t.

      • Log bruto

        content :   I'm tabbed in
      • Regra de transformação

        e_anchor("content","\tI'm * in","word")
        # You can also copy the exact value from the content field to create the pattern.
        # Do not copy the default space after the colon in the field name.
        e_anchor("content","    I'm * in","word")
      • Resultado

        content :   I'm tabbed in
        word : tabbed
    • Exemplo 7: Extrair o campo content que contém um valor de caractere especial, exibido como \t.

      • Log bruto

        content : \tI'm tabbed in
      • Regra de transformação

        e_anchor("content","\tI'm * in","word")
        # You can also use the following rule:
        e_anchor("content","    I'm * in","word")
      • Resultado

        content : \tI'm tabbed in
        word : tabbed
    • Exemplo 8: Extrair um log no modo restrito

      • Log bruto

        content :  I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
      • Regra de transformação

        e_anchor("content","I * to * having",["v_word", "n_word","asd"],restrict=True)
      • Resultado

        content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
    • Exemplo 9: Extrair um log no modo não restrito

      • Log bruto

        content :  I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
      • Regra de transformação

        e_anchor("content","love * fight with my * and",["test1","test2","test13"],restrict=False)
      • Resultado

        content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
        test1 : having snowball
        test2 : friends
    • Exemplo 10: Extrair um valor e pular outro

      • Log bruto

        content: Could you compare the severity of natural disasters to man-made disasters
      • Regra de transformação

        e_anchor('content', 'compare the * of natural disasters to man-made *', 'n-word,*')
      • Resultado

        content : Could you compare the severity of natural disasters to man-made disasters
        n-word : severity