Este tópico descreve a sintaxe e os parâmetros das funções de extração de valores, além de apresentar exemplos de uso.
Funções
Categoria | Função | Descrição |
Extração baseada em expressões regulares | Extrai o valor de um campo com base em uma expressão regular e o atribui a outros campos. Esta função pode ser combinada com outras. Para mais informações, consulte Analisar logs de erro Java. | |
Extração baseada em objetos JSON | Opera em objetos JSON dentro de um campo especificado. Configure os parâmetros para expandir dados JSON, extrair dados JSON usando a expressão JMESPath ou expandir os dados JSON extraídos. Esta função pode ser combinada com outras. Para mais informações, consulte Transformar dados JSON complexos. | |
Extração por delimitadores | Extrai vários campos de um campo especificado usando um delimitador definido e nomes de campos predefinidos.
Esta função pode ser combinada com outras. Para mais informações, consulte Analisar logs formatados em CSV. | |
Extração de pares chave-valor | Extrai pares chave-valor de vários campos de entrada usando aspas especificadas. Esta função pode ser combinada com outras. Para mais informações, consulte Extrair pares chave-valor dinâmicos de uma string. | |
Extrai pares chave-valor dos campos de entrada usando um delimitador especificado. | ||
Extração baseada no protocolo syslog | Calcula os valores dos campos facility e severity e retorna o valor do campo facilitylabel, que indica informações de nível. O cálculo baseia-se no valor do campo priority e no protocolo syslog especificado. Esta função pode ser combinada com outras. Para mais informações, consulte Analisar dados no formato Syslog padrão. | |
Extração baseada em regras específicas | Extrai strings seguindo as regras definidas em anchor_rules. |
e_regex
A função e_regex extrai o valor de um campo com base em uma expressão regular e o atribui a outros campos.
-
e_regex(key,Regular expression,fields_info,mode="fill-auto",pack_json=None) -
Parâmetro
Tipo
Obrigatório
Descrição
key
Arbitrário
Sim
Nome do campo de entrada. Se o campo especificado não existir, nenhuma operação será executada. Para mais detalhes sobre como especificar nomes de campos especiais, consulte Tipos de eventos.
Expressão regular
String
Sim
Expressão regular usada para extrair o valor do campo. Há suporte para expressões regulares contendo grupos de captura e grupos sem captura.
NotaEm alguns cenários, usam-se expressões regulares com grupos sem captura. Um grupo sem captura usa um prefixo composto por um ponto de interrogação e dois pontos (
?:). Exemplo:\w+@\w+\.\w(?:\.\cn)?. Para mais informações sobre grupos sem captura, consulte Grupos sem captura.fields_info
String/ List/ Dict
Não
Nomes dos campos aos quais o valor extraído será atribuído. Se você não definir grupos de captura nomeados na expressão regular, configure este parâmetro.
mode
String
Não
Modo de sobrescrita de campos. Valor padrão: fill-auto. Para conhecer outros valores deste parâmetro, consulte Verificação de extração de campo e modos de sobrescrita.
pack_json
String
Não
Campo onde os campos especificados por fields_info serão agrupados. Valor padrão: None, indicando que nenhum campo será agrupado.
Retorna um log contendo novos valores de campo.
-
-
Exemplo 1: Extrair de um campo um valor correspondente à expressão regular especificada.
-
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:
msg: 192.168.0.1 http://... 127.0.0.0 ip: 192.168.0.1
-
-
Exemplo 2: Extrair vários valores de um campo que correspondam à expressão regular definida.
-
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 one IP address to server_ip and the other IP address to client_ip. e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",["server_ip","client_ip"]) -
Resultado:
msg: 192.168.0.1 http://... 127.0.0.0 server_ip: 192.168.0.1 client_ip: 127.0.0.0
-
-
Exemplo 3: Usar um grupo de captura para extrair vários valores correspondentes à expressão regular de um campo.
-
Log bruto:
content: start sys version: deficience, err: 2 -
Regra de transformação:
# Extract the values for version and error from the content field by including a capturing group in the regular expression. e_regex("content",r"start sys version: (\w+),\s*err: (\d+)",["version","error"]) -
Resultado:
content: start sys version: deficience, err: 2 error: 2 version: deficience
-
-
Exemplo 4: Usar um grupo de captura nomeado para extrair vários valores de um campo.
-
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:
content: start sys version: deficience, err: 2 error: 2 version: deficience
-
-
Exemplo 5: Usar um grupo de captura na expressão regular especificada para extrair o valor do campo dict, gerar dinamicamente um nome de campo para esse valor e reformatá-lo.
-
Log bruto:
dict: verify:123 -
Regra de transformação:
e_regex("dict",r"(\w+):(\d+)",{r"k_\1": r"v_\2"}) -
Resultado:
dict: verify:123 k_verify: v_123
-
-
Exemplo 6: Extrair um valor correspondente à expressão regular de um campo e agrupar o resultado 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:
msg:192.168.0.1 http://... 127.0.0.0 name:{"ip": "192.168.0.1"}
-
-
Exemplo 7: Usar a expressão regular especificada para extrair o valor do campo dict, gerar dinamicamente um nome de campo e reformatar o valor, agrupando depois o resultado 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:
dict:x:123, y:456, z:789 name:{"k_x": "v_123", "k_y": "v_456", "k_z": "v_789"}
-
-
Exemplo 8: Usar um grupo de captura para extrair vários valores correspondentes à expressão regular e agrupar o resultado 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:
content:start sys version: deficience, err: 2 name:{"version": "deficience", "error": "2"}
-
-
-
Referências
Esta função pode ser combinada com outras. Para mais informações, consulte Analisar logs de erro Java.
e_json
A função e_json opera em objetos JSON dentro de um campo especificado. Configure os parâmetros para expandir dados JSON, extrair dados via expressão JMESPath ou expandir os dados JSON já extraídos.
-
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 você usar a função e_json para analisar uma string que não segue a sintaxe JSON, a função não realizará a análise e retornará a string original.
-
Parâmetro
Tipo
Obrigatório
Descrição
key
String
Sim
Nome do campo de entrada. Se o campo especificado não existir, nenhuma operação será realizada. Para mais detalhes sobre como especificar nomes de campos especiais, consulte Tipos de eventos.
expand
Boolean
Não
Define se o campo de entrada deve ser expandido.
Se o parâmetro jmes não for configurado, o valor True será usado por padrão para o parâmetro expand. O valor True indica que o campo de entrada será expandido.
Se você configurar o parâmetro jmes, o valor False será aplicado por padrão ao parâmetro expand. O valor False indica que o campo de entrada não será expandido.
depth
Number
Não
Profundidade até a qual a função expande o campo de entrada. Valores válidos: 1 a 2000. Valor padrão: 100. O valor 1 significa que apenas o primeiro nível do campo será expandido.
prefix
String
Não
Prefixo a ser adicionado a um campo expandido.
suffix
String
Não
Sufixo a ser adicionado a um campo expandido.
fmt
String
Não
Método de formatação de um campo expandido. Valores válidos:
simple: Usa o nome do nó atual como nome do campo. Este é o valor padrão. O formato é
{prefix}{current}{suffix}.full: Combina o nome do nó atual com os nomes de todos os nós pai para formar o nome do campo. O formato é
{parent_list_str}{sep}{prefix}{current}{suffix}. O delimitador é definido pelo parâmetrosep. O delimitador padrão é o ponto (.).parent: Combina o nome do nó atual com o nome do nó pai mais próximo para formar o nome do campo. O formato é
{parent}{sep}{prefix}{current}{suffix}. O delimitador é definido pelo parâmetrosep. O delimitador padrão é o ponto (.).root: Combina o nome do nó atual com o nome do nó raiz para formar o nome do campo. O formato é
{parent_list[0]}{sep}{prefix}{current}{suffix}. O delimitador é definido pelo parâmetrosep. O delimitador padrão é o ponto (.).
sep
String
Não
Delimitador usado para separar nós pai e filho durante a formatação de dados pela função. Ao definir o parâmetro
fmtcomo full, parent ou root, configure obrigatoriamente este parâmetro. Valor padrão:..expand_array
Boolean
Não
Define se o campo de entrada deve ser expandido em um array. Valor padrão:
True, indicando que o campo de entrada será expandido em um array.fmt_array
String
Não
Método de formatação usado para expandir o campo de entrada em um array. O formato é
{parent_rlist[0]}_{index}. Também é possível usar até cinco dos seguintes placeholders para expandir o campo de entrada:parent_list,current,sep,prefixesuffix.include_node
String/ Number
Não
Lista de permissões de nomes de nós usada para filtragem. Por padrão, nomes de nós contendo dígitos, letras,
underscores (_), períodos (.) e hífens (-)são expandidos automaticamente.exclude_node
String
Não
Lista de bloqueios de nomes de nós usada para filtragem.
include_path
String
Não
Lista de permissões de caminhos de nós usada para filtragem.
exclude_path
String
Não
Lista de bloqueios de caminhos de nós usada para filtragem.
jmes
String
Não
Expressão JMESPath usada para converter valores de campo em objetos JSON e extrair um valor específico.
output
String
Não
Nome do campo retornado para o valor extraído através da expressão JMESPath.
jmes_ignore_none
Boolean
Não
Define se um campo deve ser ignorado caso seu valor não possa ser extraído pela expressão JMESPath. Valor padrão: True, indicando que o campo é ignorado quando a extração falha. Se você definir False para o parâmetro jmes_ignore_none, uma string vazia será retornada nessa situação.
mode
String
Não
Modo de sobrescrita de campos. Valor padrão: fill-auto. Para conhecer outros valores deste parâmetro, consulte Verificação de extração de campo e modos de sobrescrita.
-
Expansão e filtragem de campos JSON
Quando uma lista de permissões de nomes de nós é especificada, apenas os nomes incluídos nela são retornados. Por exemplo,
e_json("json_data_filed", ...., include_node=r'key\d+')define uma lista de permissões de nomes de nós via expressão regular.Ao especificar uma lista de bloqueios de nomes de nós, apenas os nomes incluídos nela deixam de ser retornados. Por exemplo,
e_json("json_data_filed", ...., exclude_node=r'key\d+')define uma lista de bloqueios de nomes de nós via expressão regular.As expressões regulares
include_patheexclue_pathservem para corresponder caminhos de nós desde o início. Pontos (.) separam os caminhos que correspondem às expressões regulares.
-
Filtragem baseada em JMESPath
Expressões JMESPath permitem selecionar e computar dados.
Selecionar uma lista de atributos de elementos de um caminho JSON específico:
e_json(..., jmes="cve.vendors[*].product",output="product").Concatenar atributos de elementos de um caminho JSON específico usando vírgulas (,):
e_json(..., jmes="join(',', cve.vendors[*].name)",output="vendors").Calcular o valor máximo de cada atributo para cada elemento em um caminho JSON específico:
e_json(..., jmes="max(words[*].score)",output="hot_word").Retornar uma string vazia se um caminho JSON especificado 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 abaixo mostram como utilizar parent_list e parent_rlist:
Log bruto:
data: { "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}-
parent_list ordena os nós pai da esquerda para a direita.
e_json("data", fmt='{parent_list[0]}-{parent_list[1]}#{current}')Resultado:
data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} data-k2#k3:200 data-k2#k5:300 -
parent_rlist ordena os nós pai da direita para a esquerda.
e_json("data", fmt='{parent_rlist[0]}-{parent_rlist[1]}#{current}')Resultado:
data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} k2-data#k3:200 k4-k2#k5:300
-
Retorna um log contendo novos valores de campo.
-
-
Exemplo 1: Expandir um campo.
-
Log bruto:
data: {"k1": 100, "k2": 200} -
Regra de transformação:
e_json("data",depth=1) -
Resultado:
data: {"k1": 100, "k2": 200} k1: 100 k2: 200
-
-
Exemplo 2: Adicionar prefixo e sufixo a um campo expandido.
-
Log bruto:
data: {"k1": 100, "k2": 200} -
Regra de transformação:
e_json("data", prefix="data_", suffix="_end") -
Resultado:
data: {"k1": 100, "k2": 200} data_k1_end: 100 data_k2_end: 200
-
-
Exemplo 3: Expandir um campo em diferentes formatos.
-
Log bruto:
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } -
Expandir um campo no formato 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 -
Expandir um campo no formato parent.
e_json("data", fmt='parent')data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 k2.k3: 200 k4.k5: 3000 -
Expandir um campo no formato 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: Configurar os parâmetros sep, prefix e suffix para extrair dados JSON.
-
Log bruto:
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } -
Regra de transformação:
e_json("data", fmt='parent', sep="@", prefix="__", suffix="__") -
Resultado:
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data@__k1__: 100 k2@__k3__: 200 k4@__k5__: 300
-
-
Exemplo 5: Configurar 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:
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: Extrair um objeto JSON usando a expressão JMESPath.
-
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:
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"]
-
-
-
Referências
Esta função pode ser combinada com outras. Para mais informações, consulte Transformar dados JSON complexos.
e_csv, e_psv e e_tsv
As funções e_csv, e_psv e e_tsv extraem vários campos de um campo de entrada especificado, usando um delimitador definido e nomes de campos predefinidos.
e_csv: usa vírgula (,) como delimitador padrão.
e_psv: usa barra vertical (|) como delimitador padrão.
e_tsv: usa tabulação (
\t) como delimitador padrão.
-
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âmetro
Tipo
Obrigatório
Descrição
Nome do campo de entrada
Arbitrário
Sim
Nome do campo de entrada. Se o campo especificado não existir, nenhuma operação será executada. Para mais detalhes sobre como especificar nomes de campos especiais, consulte Tipos de eventos.
Lista de campos de saída
Arbitrário
Sim
Nomes dos campos retornados após a separação do valor do campo de entrada pelo delimitador especificado.
Os nomes dos campos podem estar em uma lista de strings. Exemplo:
["error", "message", "result"].Caso os nomes dos campos não contenham vírgulas (,), use vírgulas como delimitadores para separar a string. Exemplo:
"error, message, result".Para mais detalhes sobre como especificar nomes de campos especiais, consulte Tipos de eventos.
sep
String
Não
Delimitador usado para separar o valor do campo de entrada. Especifique um único caractere como delimitador.
quote
String
Não
Aspas usadas para envolver um valor. Se um valor contiver um delimitador, configure este parâmetro.
restrict
Boolean
Não
Define se o modo restrito deve ser ativado. Valor padrão: False, indicando que o modo restrito está desativado. Se a quantidade de valores separados pelo delimitador no campo de entrada diferir da quantidade de nomes de campos de saída, a operação executada pela função variará conforme o modo.
Com o modo restrito ativado, a função não executa operações.
Com o modo restrito desativado, a função corresponde os campos especificados aos valores e atribui valores específicos aos campos.
mode
String
Não
Modo de sobrescrita de campos. Valor padrão: fill-auto. Para conhecer outros valores deste parâmetro, consulte Verificação de extração de campo e modos de sobrescrita.
Retorna um log contendo novos valores de campo.
-
Neste exemplo, usa-se a função
e_csv. As funçõese_psvee_tsvfuncionam de maneira semelhante à função e_csv.-
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=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&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=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&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=%E8%9B%8B%E8%8A%B1%E9%BE%99%E9%A1%BB%E9%9D%A2%E7%9A%84%E5%81%9A%E6%B3%95&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
-
-
Referências
Esta função pode ser combinada com outras. Para mais informações, consulte Analisar logs formatados em CSV.
e_kv
A função e_kv extrai pares chave-valor de vários campos de entrada usando aspas especificadas.
-
e_kv(Input field name or input field list, sep="=", quote='"', escape=False, prefix="", suffix="", mode="fill-auto") -
Parâmetro
Tipo
Obrigatório
Descrição
Nome do campo de entrada ou lista de campos de entrada
String ou lista de strings
Sim
Nome do campo de entrada ou nomes de vários campos de entrada. Para mais detalhes sobre como especificar nomes de campos especiais, consulte Tipos de eventos.
sep
String
Não
Delimitador usado para separar uma chave e seu valor em uma expressão regular. Valor padrão:
=. É possível especificar um ou mais caracteres como delimitador.NotaGrupos sem captura são permitidos em expressões regulares, mas grupos de captura não. Para mais informações sobre agrupamento, consulte Agrupamento.
quote
String
Não
Aspas usadas para envolver um valor. Valor padrão:
".NotaRecomenda-se configurar o parâmetro quote para envolver valores extraídos de pares chave-valor dinâmicos. Exemplos:
a="abc"eb="xyz". Sem a configuração do parâmetro quote, os valores extraídos poderão conter apenas os seguintes caracteres:letras, dígitos, underscores (_), hífens (-), pontos (.), sinais de porcentagem (%) e tis (~). Por exemplo, é possível extraira: ab12_-.%~eb: 123dea=ab12_-.%~|abc b=123.escape
Boolean
Não
Define se caracteres de escape devem ser extraídos do valor do campo de entrada. Valor padrão:
False, indicando que caracteres de escape não são extraídos. Por exemplo, o valorabc\do campokeyé extraído da expressãokey="abc\"xyz"por padrão. Se o parâmetroescapefor definido como True, o valor extraído seráabc"xyz.prefix
String
Não
Prefixo adicionado a um campo extraído.
suffix
String
Não
Sufixo adicionado a um campo extraído.
mode
String
Não
Modo de sobrescrita de campos. Valor padrão: fill-auto. Para conhecer outros valores deste parâmetro, consulte Verificação de extração de campo e modos de sobrescrita.
Retorna um log contendo novos valores de campo.
-
-
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 o valor de a2. Use a função e_regex() para extrair o valor de a2. 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 prefixo e sufixo aos campos extraídos.
-
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 extrair 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
-
-
-
Referências
Esta função pode ser combinada com outras. Para mais informações, consulte Extrair pares chave-valor dinâmicos de uma string.
e_kv_delimit
A função e_kv_delimit extrai pares chave-valor dos campos de entrada usando um delimitador especificado.
-
e_kv_delimit(Input field name or input field list, pair_sep=r"\s", kv_sep="=", prefix="", suffix="", mode="fill-auto") -
Parâmetro
Tipo
Obrigatório
Descrição
Nome do campo de entrada ou lista de campos de entrada
String ou lista de strings
Sim
Nome do campo de entrada ou nomes de vários campos de entrada. Para mais detalhes sobre como especificar nomes de campos especiais, consulte Tipos de eventos.
pair_sep
String
Não
Expressão regular usada para separar pares chave-valor. Valor padrão:
\s. Também é possível especificar\s\wouabc\s.NotaPara usar uma string na separação de pares chave-valor, recomenda-se utilizar str_replace ou regex_replace para converter a string em caracteres. Em seguida, utilize a função e_kv_delimit especificando esses caracteres como valor do parâmetro pair_sep para separar os pares chave-valor.
kv_sep
String
Não
Expressão regular usada para separar pares chave-valor. Valor padrão:
=. A expressão regular pode conter um ou mais caracteres.NotaGrupos sem captura são permitidos em expressões regulares, mas grupos de captura não. Para mais informações sobre agrupamento, consulte Agrupamento.
prefix
String
Não
Prefixo adicionado a um campo extraído.
suffix
String
Não
Sufixo adicionado a um campo extraído.
mode
String
Não
Modo de sobrescrita de campos. Valor padrão: fill-auto. Para conhecer outros valores deste parâmetro, consulte Verificação de extração de campo e modos de sobrescrita.
Retorna um log contendo novos valores de campo.
-
-
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=3e o valor de a2 estiver vazio, a função e_kv_delimit() não conseguirá extrair o valor de a2. Use a função e_regex() para extrair o valor de a2. 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 os delimitadores
&?.-
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.
-
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
A função e_syslogrfc calcula os valores dos campos facility e severity e retorna o valor do campo facilitylabel, que indica informações de nível. O cálculo baseia-se no valor do campo priority e no protocolo syslog especificado.
-
e_syslogrfc(key, rfc, fields_info=None, mode='overwrite') -
Parâmetro
Tipo
Obrigatório
Descrição
key
Arbitrário
Sim
Nome do campo de entrada. Insira um campo que indique
priority.rfc
String
Sim
Protocolo syslog utilizado. Os protocolos syslog são definidos em RFC. Valores válidos: SYSLOGRFC3164 e SYSLOGRFC5424.
fields_info
Dict
Não
key indica o nome do campo de entrada e value indica o nome do novo campo. Os seguintes campos podem ser renomeados. Os novos nomes podem ser modificados.
{"_severity_":"sev","_facility_":"fac","_severitylabel_":"sevlabel","_facilitylabel_":"faclabel"}mode
String
Não
Modo de sobrescrita de campos. Valor padrão: overwrite. Para conhecer outros valores deste parâmetro, consulte Verificação de extração de campo e modos de sobrescrita.
Retorna um log contendo novos campos e valores.
-
-
Exemplo 1: Extrair os valores dos campos facility e severity e retornar informações de nível com base no protocolo syslog definido na RFC 5424.
-
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 os valores dos campos facility e severity e retornar informações de nível com base no protocolo syslog definido na RFC 5424. Em seguida, renomeie os campos configurando o parâmetro fields_info.
-
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 _facility_: 1 _severity_: 5 _severity_label_: Notice: normal but significant condition _facility_label_: user-level messages
-
-
-
Referências
Esta função pode ser combinada com outras. Para mais informações, consulte Analisar dados no formato Syslog padrão.
e_anchor
A função e_anchor extrai strings seguindo as regras definidas em anchor_rules.
-
e_anchor(key,anchor_rules,fields,restrict=False,mode="overwrite") -
Parâmetro
Tipo
Obrigatório
Descrição
key
Arbitrário
Sim
Nome do campo.
anchor_rules
String
Sim
Regras usadas para extrair strings. Exemplos:
User = ; Severity = ;,. Asteriscos (*) indicam o conteúdo a ser extraído.Por padrão, um espaço é inserido antes de Value nos logs exibidos no formato Key : Value no console do Log Service. Ao configurar o parâmetro anchor_rules, remova o espaço padrão.
NotaAo especificar o campo de entrada, não utilize asteriscos (*) como prefixos ou sufixos.
fields
Arbitrário
Sim
Nomes dos campos de saída cujos valores são extraídos do valor do campo de entrada. Os nomes dos campos podem estar em uma lista de strings. Exemplo:
["user", "job", "result"]. Caso os nomes dos campos não contenham vírgulas (,), use vírgulas para separar a string. Exemplo:"user, job, result". Para mais detalhes sobre como especificar nomes de campos especiais, consulte Tipos de eventos. Nomes de campos especiais podem conter caracteres especiais, exceto asteriscos (*).Use um asterisco () para pular um campo. Por exemplo, apenas user e result são extraídos de
"user,,result". Para mais informações, consulte o Exemplo 10.restrict
Boolean
Não
Define se o modo restrito deve ser ativado. Valor padrão: False, indicando que o modo restrito está desativado. Se a quantidade de valores extraídos do campo de entrada diferir da quantidade de nomes de campos de saída, a operação executada pela função variará conforme o modo.
Com o modo restrito ativado, a função não executa operações.
Com o modo restrito desativado, a função corresponde os campos especificados aos valores e atribui valores específicos aos campos.
mode
String
Não
Valor padrão: overwrite. Para mais informações, consulte Verificação de extração de campo e modos de sobrescrita.
Retorna os dados extraídos.
-
-
Exemplo 1: Extrair valores de campos especificados de um log.
-
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 no formato 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 um log contendo 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 um log contendo o caractere de controle
\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 caracteres especiais.
To...Subject, que vem apósMESSAGE:, representa o conteúdo real do campo content.-
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 caracteres especiais e retornar o valor sem exibir o caractere de controle
\t.-
Log bruto:
content : I'm tabbed in -
Regra de transformação:
e_anchor("content","\tI'm * in","word") # You can also use the following transformation rule to copy the value of the content field. Remove the default space from the value. e_anchor("content"," I'm * in","word") -
Resultado:
content : I'm tabbed in word : tabbed
-
-
Exemplo 7: Extrair o campo content que contém caracteres especiais e retornar o valor exibindo o caractere de controle
\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 transformation rule: e_anchor("content"," I'm * in","word") -
Resultado:
content : \tI'm tabbed in word : tabbed
-
-
Exemplo 8: Extrair logs 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 logs 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 o valor de um campo e atribuir o valor extraído a outro campo.
-
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
-
-