Share via


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|invokelog_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.