Freigeben über


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"}"