log_reduce_full_fl()
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer
Die Funktion log_reduce_full_fl()
findet gängige Muster in halbstrukturierten Textspalten, z. B. Protokollzeilen, und gruppiert die Linien entsprechend den extrahierten Mustern. Der Algorithmus der Funktion und die meisten Parameter sind mit log_reduce_fl()identisch. log_reduce_fl()
Gibt jedoch eine Musterzusammenfassungstabelle aus, während diese Funktion eine vollständige Tabelle ausgibt, die das Muster und die Parameter pro Zeile enthält.
Voraussetzungen
- Das Python-Plug-In muss im Cluster aktiviert sein. Dies ist für die inline Python erforderlich, die in der Funktion verwendet wird.
- Das Python-Plug-In muss in der Datenbank aktiviert sein. Dies ist für die inline Python erforderlich, die in der Funktion verwendet wird.
Syntax
T |
log_reduce_full_fl(
invoke
reduce_col [,
pattern_col [,
parameters_col [,
use_logram [ ,
use_drain [ custom_regexes [,
,
custom_regexes_policy [ ,
Trennzeichen [ ,
similarity_th [ tree_depth [ ,
trigram_th [ ,
,
bigram_th ]]]]]]]]]]])
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Die folgende Parameterbeschreibung ist eine Zusammenfassung. Weitere Informationen finden Sie im Abschnitt "Weitere Informationen zum Algorithmus ".
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
reduce_col | string |
✔️ | Der Name der Zeichenfolgenspalte, auf die die Funktion angewendet wird. |
pattern_col | string |
✔️ | Der Name der Zeichenfolgenspalte, um das Muster aufzufüllen. |
parameters_col | string |
✔️ | Der Name der Zeichenfolgenspalte, um die Parameter des Musters aufzufüllen. |
use_logram | bool |
Aktivieren oder deaktivieren Sie den Logram-Algorithmus. Der Standardwert ist true . |
|
use_drain | bool |
Aktivieren oder deaktivieren Sie den Entwässerungsalgorithmus. Der Standardwert ist true . |
|
custom_regexes | dynamic |
Ein dynamisches Array, das Paare regulärer Ausdrücke und Ersetzungssymbole enthält, die in jeder Eingabezeile durchsucht und durch das entsprechende übereinstimmende Symbol ersetzt werden sollen. Der Standardwert ist dynamic([]) . Die Standardmäßige regex-Tabelle ersetzt Zahlen, IPs und GUIDs. |
|
custom_regexes_policy | string |
Entweder 'prepend', 'append' oder 'replace'. Steuert, ob custom_regexes den Standardeinstellungen vorangestellt/angefügt/ersetzt werden. Der Standardwert ist "prepend". | |
delimiters | dynamic |
Ein dynamisches Array, das Trennzeichenzeichenfolgen enthält. Der Standardwert ist dynamic([" "]) das Definieren des Leerzeichens als einziges Einzelnes Zeichentrennzeichen. |
|
similarity_th | real |
Ähnlichkeitsschwellenwert, der vom Entwässerungsalgorithmus verwendet wird. Das Erhöhen similarity_th führt zu verfeinerten Clustern. Der Standardwert ist 0,5. Wenn "Drain" deaktiviert ist, hat dieser Parameter keine Auswirkung. | |
tree_depth | int |
Das Erhöhen tree_depth verbessert die Laufzeit des Entwässerungsalgorithmus, kann jedoch die Genauigkeit verringern. Der Standardwert ist 4. Wenn "Drain" deaktiviert ist, hat dieser Parameter keine Auswirkung. | |
trigram_th | int |
Das Verringern trigram_th erhöht die Wahrscheinlichkeit, dass Logram Token durch Wildcards ersetzt. Der Standardwert ist 10. Wenn Logram deaktiviert ist, hat dieser Parameter keine Auswirkung. | |
bigram_th | int |
Das Verringern bigram_th erhöht die Wahrscheinlichkeit, dass Logram Token durch Wildcards ersetzt. Standardwert: 15. Wenn Logram deaktiviert ist, hat dieser Parameter keine Auswirkung. |
Funktionsdefinition
Sie können die Funktion definieren, indem Sie den Code entweder als abfragedefinierte Funktion einbetten oder wie folgt als gespeicherte Funktion in Ihrer Datenbank erstellen:
Definieren Sie die Funktion mithilfe der folgenden Let-Anweisung. Es sind keine Berechtigungen erforderlich.
Wichtig
Eine Let-Anweisung kann nicht alleine ausgeführt werden. Auf sie muss eine tabellarische Ausdrucksanweisung folgen. Informationen zum Ausführen eines funktionierenden Beispiels log_reduce_fl()
finden Sie unter Beispiel.
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.
Beispiel
Im folgenden Beispiel wird der Aufrufoperator verwendet, um die Funktion auszuführen.
Um eine abfragedefinierte Funktion zu verwenden, rufen Sie sie nach der definition der eingebetteten Funktion auf.
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 | Muster | Parameter |
---|---|---|
081110 | 215858 | 15485 INFO dfs. DataNode$PacketResponder: Empfangener Block blk_5080254298708411681 größe 67108864 von /10.251.43.21 081110 <NUM INFO><> dfs. DataNode$PacketResponder: Empfangener Block blk_<NUM> der Größe <NUM> von <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: Empfangen von Block blk_-7037346755429293022 src: /10.251.43.21:45933 dest: /10.251.43.21:50010 081110 <NUM INFO><> dfs. DataNode$DataXceiver: Empfangen von Block 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 für block blk_-7746692545918257727 beenden 081110 <NUM INFO><> dfs. DataNode$PacketResponder: PacketResponder <NUM> für block blk_<NUM> endating "{""parameter_0""": ""215858"", ""parameter_1"": ""15496"", ""parameter_2"": ""2"", ""parameter_3"": ""-7746692545918257727""}" |
081110 | 215858 | 15496 INFO dfs. DataNode$PacketResponder: Empfangener Block blk_-7746692545918257727 der Größe 67108864 von /10.251.107.227 081110 <NUM><INFO> dfs. DataNode$PacketResponder: Empfangener Block blk_<NUM> der Größe <ZAHL> von <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: Empfangen von Block blk_-8578644687709935034 src: /10.251.107.227:39600 dest: /10.251.107.227:50010 081110 <NUM NUM><INFO> dfs. DataNode$DataXceiver: Empfangen von Block 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: Empfangen von Block blk_722881101738646364 src: /10.251.75.79:58213 dest: /10.251.75.79:50010 081110 <NUM INFO><> dfs. DataNode$DataXceiver: Empfangen von Block blk_<NUM> src: <IP dest: <IP>> "{""parameter_0""": ""215858"", ""parameter_1"": ""15514"", ""parameter_2"": ""722881101738646364"", ""parameter_3"": ""/10.251.75.75.79:58213"", ""parameter_4"": ""/10.251.75.79:50010"}" |
081110 | 215858 | 15517 INFO dfs. DataNode$PacketResponder: PacketResponder 2 für block blk_-7110736255599716271 beenden 081110 <NUM INFO><> dfs. DataNode$PacketResponder: PacketResponder <NUM> für block blk_<NUM> endating "{""parameter_0""": ""215858"", ""parameter_1"": ""15517"", ""parameter_2"": ""2"", ""parameter_3"": ""-7110736255599716271""}" |
081110 | 215858 | 15517 INFO dfs. DataNode$PacketResponder: Empfangener Block blk_-7110736255599716271 der Größe 67108864 von /10.251.42.246 081110 <NUM><INFO> dfs. DataNode$PacketResponder: Empfangener Block blk_<NUM> der Größe <ZAHL> von <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: Empfangen von Block blk_7257432994295824826 src: /10.251.26.8:41803 dest: /10.251.26.8:50010 081110 <NUM INFO><> dfs. DataNode$DataXceiver: Empfangen von Block 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: Empfangen von Block blk_-7771332301119265281 src: /10.251.43.210:34258 dest: /10.251.43.210:50010 081110 <NUM INFO><> dfs. DataNode$DataXceiver: Empfangen von Block 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"}" |