log_reduce_full_fl()
La funzione log_reduce_full_fl()
trova modelli comuni in colonne testuali semistrutturate, ad esempio linee di log e raggruppa le righe in base ai modelli estratti. L'algoritmo della funzione e la maggior parte dei parametri sono identici a log_reduce_fl(). Restituisce tuttavia log_reduce_fl()
una tabella di riepilogo dei criteri, mentre questa funzione restituisce una tabella completa contenente il criterio e i parametri per ogni riga.
Prerequisiti
- Il plug-in Python deve essere abilitato nel cluster. Questa operazione è necessaria per Python inline usato nella funzione .
- Il plug-in Python deve essere abilitato nel database. Questa operazione è necessaria per Python inline usato nella funzione .
Sintassi
T|
invoke
log_reduce_full_fl(
reduce_col [,
pattern_col [,
parameters_col [use_logram [,
use_drain [,
custom_regexes [,
custom_regexes_policy,
,
[delimitatori [,
similarity_th [,
tree_depth [trigram_th [,
,
bigram_th ]]]]]]]]]]])
Altre informazioni sulle convenzioni di sintassi.
Parametri
La descrizione dei parametri seguente è un riepilogo. Per altre informazioni, vedere Altre informazioni sulla sezione algoritmo .
Nome | Tipo | Obbligatoria | Descrizione |
---|---|---|---|
reduce_col | string |
✔️ | Nome della colonna stringa a cui viene applicata la funzione. |
pattern_col | string |
✔️ | Nome della colonna stringa per popolare il modello. |
parameters_col | string |
✔️ | Nome della colonna stringa per popolare i parametri del modello. |
use_logram | bool |
Abilitare o disabilitare l'algoritmo Logram. Il valore predefinito è true . |
|
use_drain | bool |
Abilitare o disabilitare l'algoritmo Drain. Il valore predefinito è true . |
|
custom_regexes | dynamic |
Matrice dinamica contenente coppie di simboli di espressione regolare e di sostituzione da cercare in ogni riga di input e sostituita con il rispettivo simbolo corrispondente. Il valore predefinito è dynamic([]) . La tabella regex predefinita sostituisce numeri, INDIRIZZI IP e GUID. |
|
custom_regexes_policy | string |
'prepend', 'append' o 'replace'. Controlla se custom_regexes sono anteporte/accodate/sostituisci quelle predefinite. Il valore predefinito è 'prepend'. | |
Delimitatori | dynamic |
Matrice dinamica contenente stringhe delimitatori. Il valore predefinito è dynamic([" "]) , definendo lo spazio come unico delimitatore di caratteri singolo. |
|
similarity_th | real |
Soglia di somiglianza, utilizzata dall'algoritmo Drain. Aumentando similarity_th si ottengono cluster più perfezionati. Il valore predefinito è 0,5. Se Drain è disabilitato, questo parametro non ha alcun effetto. | |
tree_depth | int |
L'aumento tree_depth migliora il runtime dell'algoritmo Drain, ma potrebbe ridurne l'accuratezza. Il valore predefinito è 4. Se Drain è disabilitato, questo parametro non ha alcun effetto. | |
trigram_th | int |
La diminuzione trigram_th aumenta le probabilità di sostituzione dei token con caratteri jolly. Il valore predefinito è 10. Se Logram è disabilitato, questo parametro non ha alcun effetto. | |
bigram_th | int |
Riducendo bigram_th aumentano le probabilità di sostituzione dei token con caratteri jolly. Il valore predefinito è 15. Se Logram è disabilitato, questo parametro non ha alcun effetto. |
Definizione di funzione
È possibile definire la funzione incorporando il codice come funzione definita da query o creandola come funzione archiviata nel database, come indicato di seguito:
Definire la funzione usando l'istruzione let seguente. Non sono necessarie autorizzazioni.
Importante
Un'istruzione let non può essere eseguita autonomamente. Deve essere seguita da un'istruzione di espressione tabulare. Per eseguire un esempio funzionante di log_reduce_fl()
, vedere Esempio.
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.
Esempio
Nell'esempio seguente viene utilizzato l'operatore invoke per eseguire la funzione .
Per usare una funzione definita da query, richiamarla dopo la definizione della funzione incorporata.
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
Output
data | Modelli | Parametri |
---|---|---|
081110 | 215858 | 15485 INFO dfs. DataNode$PacketResponder: blocco ricevuto blk_5080254298708411681 di dimensioni 67108864 da /10.251.43.21 081110 <NUM NUM><> INFO dfs. DataNode$PacketResponder: blocco ricevuto blk_<NUM> di dimensioni <NUM> da <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: ricezione blocco blk_-7037346755429293022 src: /10.251.43.21:45933 dest: /10.251.43.21:50010 081110 <NUM NUM><> INFO dfs. DataNode$DataXceiver: ricezione del blocco 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 per il blocco blk_-7746692545918257727 terminando 081110 <NUM NUM><> INFO dfs. DataNode$PacketResponder: PacketResponder <NUM> for block blk_<NUM> terminating "{"""parameter_0"": ""215858"", ""parameter_1""": ""15496"", ""parameter_2"": ""2"", ""parameter_3"": ""-7746692545918257727"""}" |
081110 | 215858 | 15496 INFO dfs. DataNode$PacketResponder: blocco ricevuto blk_-7746692545918257727 di dimensioni 67108864 da /10.251.107.227 081110 <NUM NUM><> INFO dfs. DataNode$PacketResponder: blocco ricevuto blk_<NUM> di dimensioni <NUM> da <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: ricezione blocco blk_-8578644687709935034 src: /10.251.107.227:39600 dest: /10.251.107.227:50010 081110 <NUM INFO NUM><> dfs. DataNode$DataXceiver: ricezione del blocco 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: blocco di ricezione blk_722881101738646364 src: /10.251.75.79:58213 dest: /10.251.75.79:50010 081110 <NUM NUM><> INFO dfs. DataNode$DataXceiver: Ricezione del blocco 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 per il blocco blk_-7110736255599716271 che termina 081110 <NUM NUM><> INFO dfs. DataNode$PacketResponder: PacketResponder <NUM> per il blocco blk_<NUM> terminating "{""parameter_0"": ""215858"", ""parameter_1"":"15517"", ""parameter_2"": ""2"", ""parameter_3"": ""-7110736255599716271"""}" |
081110 | 215858 | 15517 INFO dfs. DataNode$PacketResponder: blocco ricevuto blk_-7110736255599716271 di dimensioni 67108864 da /10.251.42.246 081110 <NUM NUM><> INFO dfs. DataNode$PacketResponder: blocco ricevuto blk_<NUM> di dimensioni <NUM> da <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: blocco di ricezione blk_7257432994295824826 src: /10.251.26.8:41803 dest: /10.251.26.8:50010 081110 <NUM NUM><> INFO dfs. DataNode$DataXceiver: ricezione del blocco 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: blocco di ricezione blk_-7771332301119265281 src: /10.251.43.210:34258 dest: /10.251.43.210:50010 081110 <NUM INFO NUM><> dfs. DataNode$DataXceiver: blocco di ricezione 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""}" |
Questa funzionalità non è supportata.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per