log_reduce_train_fl()

适用于:✅Azure 数据资源管理器

函数 log_reduce_train_fl() 在半结构化文本列(例如日志行)中查找通用模式,并根据提取的模式对这些行进行聚类。 该函数的算法和大部分参数与 log_reduce_fl() 相同,但与会输出模式汇总表的 log_reduce_fl() 不同,该函数会输出序列化模型。 函数 log_reduce_predict_fl()/log_reduce_predict_full_fl() 可以使用该模型预测新日志行的匹配模式。

先决条件

  • 必须在群集上启用 Python 插件。 这是函数中使用的内联 Python 所必需的。

语法

T | invoke log_reduce_train_fl(reduce_col, model_name [, use_logram [, use_drain [, custom_regexes [, custom_regexes_policy [, delimiters [, similarity_th [, tree_depth [, trigram_th [, bigram_th ]]]]]]]]])

详细了解语法约定

参数

以下参数说明是摘要。 有关详细信息,请参阅有关算法的详细信息部分。

名称 类型​​ 必需 说明
reduce_col string ✔️ 函数所应用到的字符串列的名称。
model_name string ✔️ 输出模型的名称。
use_logram bool 启用或禁用 Logram 算法。 默认值为 true
use_drain bool 启用或禁用 Drain 算法。 默认值为 true
custom_regexes dynamic 一个动态数组,其中包含要在每个输入行中搜索的正则表达式和替换符号对,这些符号将替换为各自匹配的符号。 默认值为 dynamic([])。 默认正则表达式表替换数字、IP 和 GUID。
custom_regexes_policy string “prepend”、“append”或“replace”。 控制 custom_regexes 是在前面附加、在后面追加还是替换默认项。 默认值为“prepend”。
delimiters dynamic 包含分隔符字符串的动态数组。 默认值为 dynamic([" "]),即,将空格定义为唯一一个字符分隔符。
similarity_th real Drain 算法使用的相似性阈值。 增大 similarity_th 会产生更精细的数据库。 默认值为 0.5。 如果禁用了 Drain,则此参数不起作用。
tree_depth int 增大 tree_depth 可以改进 Drain 算法的运行时间,但可能会降低其准确度。 默认值为 4。 如果禁用了 Drain,则此参数不起作用。
trigram_th int 减小 trigram_th 会增大 Logram 用通配符替换标记的可能性。 默认值为 10。 如果禁用了 Logram,则此参数不起作用。
bigram_th int 减小 bigram_th 会增大 Logram 用通配符替换标记的可能性。 默认值为 15。 如果禁用了 Logram,则此参数不起作用。

函数定义

可以通过将函数的代码嵌入为查询定义的函数,或将其创建为数据库中的存储函数来定义函数,如下所示:

使用以下 let 语句定义函数。 不需要任何权限。

重要

let 语句不能独立运行。 它必须后跟一个表格表达式语句。 若要运行 log_reduce_fl() 的工作示例,请参阅示例

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.

示例

以下示例使用 invoke 运算符运行函数。

若要使用查询定义的函数,请在嵌入的函数定义后调用它。

//
// 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")

输出

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