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 | 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 | 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 | Extrai valores para vários campos de um campo de source usando um delimitador e nomes de campos predefinidos.
É possível combinar estas funções com outras. Para ver um exemplo relacionado, consulte Parse CSV-formatted logs. | |
Extração chave-valor | 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. | |
Extrai pares chave-valor de um campo de source usando um delimitador. | ||
Extração padrão Syslog | 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 | 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.
NotaUm 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' )NotaSe a string de destino não for um objeto JSON válido, a função
e_jsonretorna 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âmetrosep. 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âmetrosep. 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âmetrosep. 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
fmtestá 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,prefixesuffix.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_patheexclude_pathsã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_listorganiza 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_rlistorganiza 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çõese_psvee_tsvoperam 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 é
=.NotaVocê 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 é
".NotaO valor de um par chave-valor dinâmico extraído geralmente é colocado entre aspas, por exemplo,
a="abc"eb="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, dea=ab12_-.%~|abc b=123, o sistema extraia: ab12_-.%~eb: 123.escape
Boolean
Não
Controla se caracteres de escape nos valores devem ser interpretados. O valor padrão é
False. Por exemplo, da entradakey="abc\"xyz", por padrão, a função extrai o valorabc\para o campokey. Se você definaescape=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=2NotaSe o log bruto for
request_uri: a1=1&a2=&a3=3e 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
content2e interpretar caracteres de escape usando o parâmetroescape.-
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\weabc\s.NotaPara 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.NotaVocê 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=v3NotaSe o log bruto for
request_uri: a1=1&a2=&a3=3, a função e_kv_delimit() não conseguirá extraira2porque 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": 4001792NotaUm 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 camposusereresultserã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 segueMESSAGE:.-
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
-
-