Freigeben über


log_reduce_train_fl()

Gilt für: ✅Microsoft Fabric✅Azure Data Explorer

Die Funktion log_reduce_train_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, aber im Gegensatz zu log_reduce_fl(), die eine Musterzusammenfassungstabelle ausgibt, gibt diese Funktion das serialisierte Modell aus. Das Modell kann von der Funktion log_reduce_predict_fl()/log_reduce_predict_full_fl() verwendet werden, um das übereinstimmende Muster für neue Protokolllinien vorherzusagen.

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_train_fl(| invokereduce_col , model_name [, 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.
model_name string ✔️ Der Name des Ausgabemodells.
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 optimierten Datenbanken. 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_train_fl=(tbl:(*), reduce_col:string, model_name: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', 'LogReduce', 'parameters_column', '', 
                          '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', 'model');
    let code = ```if 1:
        from log_cluster import log_reduce
        result = log_reduce.log_reduce(df, kargs)
    ```;
    tbl
    | extend LogReduce=''
    | evaluate python(typeof(model:string), code, kwargs)
    | project name=model_name, timestamp=now(), model
};
// 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.

//
// Finding common patterns in HDFS logs, export and store the trained model in ML_Models table
//
.set-or-append ML_Models <|
//
let log_reduce_train_fl=(tbl:(*), reduce_col:string, model_name: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', 'LogReduce', 'parameters_column', '', 
                          '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', 'model');
    let code = ```if 1:
        from log_cluster import log_reduce
        result = log_reduce.log_reduce(df, kargs)
    ```;
    tbl
    | extend LogReduce=''
    | evaluate python(typeof(model:string), code, kwargs)
    | project name=model_name, timestamp=now(), model
};
HDFS_log_100k
| take 100000
| invoke log_reduce_train_fl(reduce_col="data", model_name="HDFS_100K")

Output

ExtentId OriginalSize ExtentSize CompressedSize IndexSize RowCount
3734a525-cc08-44b9-a992-72de97b32414 10383 11546 10,834 712 1