附录 J:计数函数
编辑附录 J:计数函数
编辑当存储桶中的事件数出现异常时,计数函数会检测到异常。
如果您的数据是稀疏的,并且您想忽略存储桶计数为零的情况,请使用 non_zero_count
函数。
使用 distinct_count
函数来确定一个字段中不同值的数量何时不寻常,而不是总计数。
如果要监视异常高的事件速率,请使用高侧函数。如果要查看事件速率的下降,请使用低侧函数。
机器学习功能包括以下计数函数
Count、high_count、low_count
编辑当存储桶中的事件数出现异常时,count
函数会检测到异常。
当存储桶中的事件计数异常高时,high_count
函数会检测到异常。
当存储桶中的事件计数异常低时,low_count
函数会检测到异常。
这些函数支持以下属性
-
by_field_name
(可选) -
over_field_name
(可选) -
partition_field_name
(可选)
有关这些属性的更多信息,请参阅创建异常检测作业 API。
示例 1:使用计数函数分析事件。
PUT _ml/anomaly_detectors/example1 { "analysis_config": { "detectors": [{ "function" : "count" }] }, "data_description": { "time_field":"timestamp", "time_format": "epoch_ms" } }
此示例可能是最简单的分析。它识别事件总计数高于或低于通常水平的时间段。
当您在异常检测作业的检测器中使用此函数时,它会对事件速率进行建模,并检测事件速率何时与过去的行为相比异常。
示例 2:使用 high_count 函数分析错误。
PUT _ml/anomaly_detectors/example2 { "analysis_config": { "detectors": [{ "function" : "high_count", "by_field_name" : "error_code", "over_field_name": "user" }] }, "data_description": { "time_field":"timestamp", "time_format": "epoch_ms" } }
如果您在异常检测作业的检测器中使用此 high_count
函数,它将为每个错误代码建模事件速率。它会检测与其他用户相比生成异常高错误代码计数的用户。
示例 3:使用 low_count 函数分析状态代码。
PUT _ml/anomaly_detectors/example3 { "analysis_config": { "detectors": [{ "function" : "low_count", "by_field_name" : "status_code" }] }, "data_description": { "time_field":"timestamp", "time_format": "epoch_ms" } }
在此示例中,该函数会检测状态代码的事件计数何时低于通常水平。
当您在异常检测作业的检测器中使用此函数时,它会对每个状态代码的事件速率进行建模,并检测状态代码何时与过去的行为相比计数异常低。
示例 4:使用计数函数分析聚合数据。
PUT _ml/anomaly_detectors/example4 { "analysis_config": { "summary_count_field_name" : "events_per_min", "detectors": [{ "function" : "count" }] }, "data_description": { "time_field":"timestamp", "time_format": "epoch_ms" } }
如果您正在分析聚合的 events_per_min
字段,请不要使用求和函数(例如,sum(events_per_min)
)。相反,请使用计数函数和 summary_count_field_name
属性。有关更多信息,请参阅为了更快的性能聚合数据。
Non_zero_count、high_non_zero_count、low_non_zero_count
编辑当存储桶中的事件数出现异常时,non_zero_count
函数会检测到异常,但它会忽略存储桶计数为零的情况。如果已知您的数据是稀疏的或存在间隙,并且这些间隙并不重要,请使用此函数。
当存储桶中的事件数异常高时,high_non_zero_count
函数会检测到异常,并且它会忽略存储桶计数为零的情况。
当存储桶中的事件数异常低时,low_non_zero_count
函数会检测到异常,并且它会忽略存储桶计数为零的情况。
这些函数支持以下属性
-
by_field_name
(可选) -
partition_field_name
(可选)
有关这些属性的更多信息,请参阅创建异常检测作业 API。
例如,如果您有以下每个存储桶的事件数
1,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,43,31,0,0,0,0,0,0,0,0,0,0,0,0,2,1
non_zero_count
函数仅对以下数据建模
1,22,2,43,31,2,1
示例 5:使用 high_non_zero_count 函数分析签名。
PUT _ml/anomaly_detectors/example5 { "analysis_config": { "detectors": [{ "function" : "high_non_zero_count", "by_field_name" : "signaturename" }] }, "data_description": { "time_field":"timestamp", "time_format": "epoch_ms" } }
如果您在异常检测作业的检测器中使用此 high_non_zero_count
函数,它将为 signaturename
字段建模事件计数。它会忽略计数为零的任何存储桶,并检测 signaturename
值何时与其过去的行为相比具有异常高的事件计数。
对于 non_zero_count
、high_non_zero_count
和 low_non_zero_count
函数,不支持总体分析(使用 over_field_name
属性值)。如果您想进行总体分析并且您的数据是稀疏的,请使用为这种情况优化的 count
函数。
Distinct_count、high_distinct_count、low_distinct_count
编辑当一个字段中不同值的数量不寻常时,distinct_count
函数会检测到异常。
当一个字段中不同值的数量异常高时,high_distinct_count
函数会检测到异常。
当一个字段中不同值的数量异常低时,low_distinct_count
函数会检测到异常。
这些函数支持以下属性
-
field_name
(必需) -
by_field_name
(可选) -
over_field_name
(可选) -
partition_field_name
(可选)
有关这些属性的更多信息,请参阅创建异常检测作业 API。
示例 6:使用 distinct_count 函数分析用户。
PUT _ml/anomaly_detectors/example6 { "analysis_config": { "detectors": [{ "function" : "distinct_count", "field_name" : "user" }] }, "data_description": { "time_field":"timestamp", "time_format": "epoch_ms" } }
此 distinct_count
函数会检测系统何时有异常多的登录用户。当您在异常检测作业的检测器中使用此函数时,它会对用户的不同计数进行建模。它还会检测与过去相比,不同用户的数量何时不寻常。
示例 7:使用 high_distinct_count 函数分析端口。
PUT _ml/anomaly_detectors/example7 { "analysis_config": { "detectors": [{ "function" : "high_distinct_count", "field_name" : "dst_port", "over_field_name": "src_ip" }] }, "data_description": { "time_field":"timestamp", "time_format": "epoch_ms" } }
此示例检测端口扫描实例。当您在异常检测作业的检测器中使用此函数时,它会对端口的不同计数进行建模。它还会检测与其他 src_ip
值相比,连接到异常多不同 dst_ports
值的 src_ip
值。