log_reduce_full_fl()
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer
A função log_reduce_full_fl()
encontra padrões comuns em colunas textuais semiestruturadas, como linhas de log, e agrupa as linhas de acordo com os padrões extraídos. O algoritmo da função e a maioria dos parâmetros são idênticos a log_reduce_fl(). No entanto, log_reduce_fl()
gera uma tabela de resumo de padrões, enquanto essa função gera uma tabela completa contendo o padrão e os parâmetros por cada linha.
Pré-requisitos
- O plug-in Python deve ser habilitado no cluster. Isso é necessário para o Python embutido usado na função.
- O plug-in Python deve estar habilitado no banco de dados. Isso é necessário para o Python embutido usado na função.
Sintaxe
T |
invoke
log_reduce_full_fl(
reduce_col [,
pattern_col [,
parameters_col [ ,
use_logram [,
use_drain [,
custom_regexes [,
custom_regexes_policy [,
delimitadores [ ,
similarity_th [ ,
tree_depth [ ,
trigram_th [,
bigram_th ]]]]]]]]]]])
Saiba mais sobre as convenções de sintaxe.
Parâmetros
A descrição dos parâmetros a seguir é um resumo. Para obter mais informações, consulte Mais sobre a seção de algoritmo .
Nome | Digitar | Obrigatória | Descrição |
---|---|---|---|
reduce_col | string |
✔️ | O nome da coluna de cadeia de caracteres à qual a função é aplicada. |
pattern_col | string |
✔️ | O nome da coluna de cadeia de caracteres para preencher o padrão. |
parameters_col | string |
✔️ | O nome da coluna de cadeia de caracteres para preencher os parâmetros do padrão. |
use_logram | bool |
Ative ou desative o algoritmo Logram. O valor padrão é true . |
|
use_drain | bool |
Ative ou desative o algoritmo Drenar. O valor padrão é true . |
|
custom_regexes | dynamic |
Uma matriz dinâmica contendo pares de símbolos de expressão regular e substituição a serem pesquisados em cada linha de entrada e substituídos por seus respectivos símbolos correspondentes. O valor padrão é dynamic([]) . A tabela regex padrão substitui números, IPs e GUIDs. |
|
custom_regexes_policy | string |
Ou 'preceder', 'anexar' ou 'substituir'. Controla se custom_regexes são anexadas/anexadas/substituem as padrão. O valor padrão é 'prepend'. | |
delimiters | dynamic |
Uma matriz dinâmica que contém cadeias de caracteres delimitadoras. O valor padrão é dynamic([" "]) , definindo o espaço como o único delimitador de caractere único. |
|
similarity_th | real |
Limite de similaridade, usado pelo algoritmo Drenar. Aumentar similarity_th resulta em clusters mais refinados. O valor padrão é 0,5. Se Drenar estiver desabilitado, esse parâmetro não terá efeito. | |
tree_depth | int |
Aumentar o tree_depth melhora o tempo de execução do algoritmo Drain, mas pode reduzir sua precisão. O valor padrão é 4. Se Drenar estiver desabilitado, esse parâmetro não terá efeito. | |
trigram_th | int |
Diminuir o trigram_th aumenta as chances de o Logram substituir tokens por curingas. O valor padrão é 10. Se o Logram estiver desabilitado, esse parâmetro não terá efeito. | |
bigram_th | int |
Diminuir o bigram_th aumenta as chances de Logram substituir tokens por curingas. O valor padrão é 15. Se o Logram estiver desabilitado, esse parâmetro não terá efeito. |
Definição de função
Você pode definir a função inserindo seu código como uma função definida por consulta ou criando-a como uma função armazenada em seu banco de dados, da seguinte maneira:
Defina a função usando a instrução let a seguir. Nenhuma permissão é necessária.
Importante
Uma instrução let não pode ser executada sozinha. Ele deve ser seguido por uma instrução de expressão tabular. Para executar um exemplo funcional de log_reduce_fl()
, consulte Exemplo.
let log_reduce_full_fl=(tbl:(*), reduce_col:string, pattern_col:string, parameters_col:string,
use_logram:bool=True, use_drain:bool=True, custom_regexes: dynamic = dynamic([]), custom_regexes_policy: string = 'prepend',
delimiters:dynamic = dynamic(' '), similarity_th:double=0.5, tree_depth:int = 4, trigram_th:int=10, bigram_th:int=15)
{
let default_regex_table = pack_array('(/|)([0-9]+\\.){3}[0-9]+(:[0-9]+|)(:|)', '<IP>',
'([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})', '<GUID>',
'(?<=[^A-Za-z0-9])(\\-?\\+?\\d+)(?=[^A-Za-z0-9])|[0-9]+$', '<NUM>');
let kwargs = bag_pack('reduced_column', reduce_col, 'delimiters', delimiters,'output_column', pattern_col, 'parameters_column', parameters_col,
'trigram_th', trigram_th, 'bigram_th', bigram_th, 'default_regexes', default_regex_table,
'custom_regexes', custom_regexes, 'custom_regexes_policy', custom_regexes_policy, 'tree_depth', tree_depth, 'similarity_th', similarity_th,
'use_drain', use_drain, 'use_logram', use_logram, 'save_regex_tuples_in_output', True, 'regex_tuples_column', 'RegexesColumn',
'output_type', 'full');
let code = ```if 1:
from log_cluster import log_reduce
result = log_reduce.log_reduce(df, kargs)
```;
tbl
| evaluate python(typeof(*), code, kwargs)
};
// Write your query to use the function here.
Exemplo
O exemplo a seguir usa o operador invoke para executar a função.
Para usar uma função definida por consulta, invoque-a após a definição da função inserida.
let log_reduce_full_fl=(tbl:(*), reduce_col:string, pattern_col:string, parameters_col:string,
use_logram:bool=True, use_drain:bool=True, custom_regexes: dynamic = dynamic([]), custom_regexes_policy: string = 'prepend',
delimiters:dynamic = dynamic(' '), similarity_th:double=0.5, tree_depth:int = 4, trigram_th:int=10, bigram_th:int=15)
{
let default_regex_table = pack_array('(/|)([0-9]+\\.){3}[0-9]+(:[0-9]+|)(:|)', '<IP>',
'([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})', '<GUID>',
'(?<=[^A-Za-z0-9])(\\-?\\+?\\d+)(?=[^A-Za-z0-9])|[0-9]+$', '<NUM>');
let kwargs = bag_pack('reduced_column', reduce_col, 'delimiters', delimiters,'output_column', pattern_col, 'parameters_column', parameters_col,
'trigram_th', trigram_th, 'bigram_th', bigram_th, 'default_regexes', default_regex_table,
'custom_regexes', custom_regexes, 'custom_regexes_policy', custom_regexes_policy, 'tree_depth', tree_depth, 'similarity_th', similarity_th,
'use_drain', use_drain, 'use_logram', use_logram, 'save_regex_tuples_in_output', True, 'regex_tuples_column', 'RegexesColumn',
'output_type', 'full');
let code = ```if 1:
from log_cluster import log_reduce
result = log_reduce.log_reduce(df, kargs)
```;
tbl
| evaluate python(typeof(*), code, kwargs)
};
//
// Finding common patterns in HDFS logs, a commonly used benchmark for log parsing
//
HDFS_log
| take 100000
| extend Patterns="", Parameters=""
| invoke log_reduce_full_fl(reduce_col="data", pattern_col="Patterns", parameters_col="Parameters")
| take 10
Saída
data | Padrões | Parâmetros |
---|---|---|
081110 | 215858 | 15485 INFO dfs. DataNode$PacketResponder: Recebeu blk_5080254298708411681 de bloco de tamanho 67108864 de /10.251.43.21 081110 <NUM><NUM> INFO dfs. DataNode$PacketResponder: Bloco recebido blk_<NUM> de tamanho <NUM> do <IP> "{""parameter_0"": ""215858""", ""parameter_1"": ""15485"", ""parameter_2"": ""5080254298708411681"", ""parameter_3"": "67108864"", ""parameter_4"": ""/10.251.43.21""}" |
081110 | 215858 | 15494 INFO dfs. DataNode$DataXceiver: Bloco de recebimento blk_-7037346755429293022 src: /10.251.43.21:45933 dest: /10.251.43.21:50010 081110 <NUM><NUM> INFO dfs. DataNode$DataXceiver: Bloco de recebimento blk_<NUM> src: <IP> dest: <IP> "{""parameter_0"": ""215858"", ""parameter_1"": ""15494"", ""parameter_2"": ""-7037346755429293022"", ""parameter_3"": ""/10.251.43.21:45933"", ""parameter_4"": ""/10.251.43.21:50010""}" |
081110 | 215858 | 15496 INFO dfs. DataNode$PacketResponder: PacketResponder 2 para o bloco blk_-7746692545918257727 terminando 081110 <NUM><NUM> INFO dfs. DataNode$PacketResponder: NUM do PacketResponder <para o bloco blk_<NUM> terminando "{""parameter_0"": ""215858"", ""parameter_1"": ""15496"", ""parameter_2"": ""2"", ""parameter_3"": "-7746692545918257727""}"> |
081110 | 215858 | 15496 INFO dfs. DataNode$PacketResponder: Bloco recebido blk_-7746692545918257727 de tamanho 67108864 de /10.251.107.227 081110 <NUM><NUM> INFO dfs. DataNode$PacketResponder: Bloco recebido blk_<NUM> de tamanho <NUM> do <IP> "{""parameter_0"": ""215858"", ""parameter_1"": ""15496"", ""parameter_2"": ""-7746692545918257727"", ""parameter_3"": "67108864"", ""parameter_4"": ""/10.251.107.227""}" |
081110 | 215858 | 15511 INFO dfs. DataNode$DataXceiver: Bloco de recebimento blk_-8578644687709935034 src: /10.251.107.227:39600 dest: /10.251.107.227:50010 081110 <NUM><NUM> INFO dfs. DataNode$DataXceiver: Bloco de recebimento blk_<NUM> src: <IP> dest: <IP> "{""parameter_0"": "215858""", ""parameter_1"": ""15511"", ""parameter_2"": ""-8578644687709935034"", ""parameter_3"": ""/10.251.107.227:39600"", ""parameter_4"": ""/10.251.107.227:50010""}" |
081110 | 215858 | 15514 INFO dfs. DataNode$DataXceiver: Bloco de recebimento blk_722881101738646364 src: /10.251.75.79:58213 dest: /10.251.75.79:50010 081110 <NUM><NUM> INFO dfs. DataNode$DataXceiver: Bloco de recebimento blk_<NUM> src: <IP> dest: <IP> "{""parameter_0"": "215858"", ""parameter_1"": ""15514"", ""parameter_2"": ""722881101738646364"", ""parameter_3"": ""/10.251.75.79:58213"", ""parameter_4"": ""/10.251.75.79:50010""}" |
081110 | 215858 | 15517 INFO dfs. DataNode$PacketResponder: PacketResponder 2 para o bloco blk_-7110736255599716271 terminando 081110 <NUM><NUM> INFO dfs. DataNode$PacketResponder: NUM do PacketResponder <para o bloco blk_<NUM> terminando "{""parameter_0"": "215858"", ""parameter_1"": ""15517"", ""parameter_2"": ""2"", ""parameter_3"": "-7110736255599716271""}"> |
081110 | 215858 | 15517 INFO dfs. DataNode$PacketResponder: Bloco recebido blk_-7110736255599716271 de tamanho 67108864 de /10.251.42.246 081110 <NUM><NUM> INFO dfs. DataNode$PacketResponder: Bloco recebido blk_<NUM> de tamanho <NUM> do <IP> "{""parameter_0"": ""215858"", ""parameter_1"": ""15517"", ""parameter_2"": ""-7110736255599716271"", ""parameter_3"": "67108864"", ""parameter_4"": ""/10.251.42.246""}" |
081110 | 215858 | 15533 INFO dfs. DataNode$DataXceiver: Bloco de recebimento blk_7257432994295824826 src: /10.251.26.8:41803 dest: /10.251.26.8:50010 081110 <NUM><NUM> INFO dfs. DataNode$DataXceiver: Bloco de recebimento blk_<NUM> src: <IP> dest: <IP> "{""parameter_0"": ""215858"", ""parameter_1"": ""15533"", ""parameter_2"": "7257432994295824826"", ""parameter_3"": ""/10.251.26.8:41803"", ""parameter_4"": ""/10.251.26.8:50010""}" |
081110 | 215858 | 15533 INFO dfs. DataNode$DataXceiver: Bloco de recebimento blk_-7771332301119265281 src: /10.251.43.210:34258 dest: /10.251.43.210:50010 081110 <NUM><NUM> INFO dfs. DataNode$DataXceiver: Bloco de recebimento blk_<NUM> src: <IP> dest: <IP> "{""parameter_0"": "215858"", ""parameter_1"": ""15533"", ""parameter_2"": ""-7771332301119265281"", ""parameter_3"": ""/10.251.43.210:34258"", ""parameter_4"": ""/10.251.43.210:50010""}" |