《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.16. Machine learning ——3.5.16.3.Anomaly detection(3) https://developer.aliyun.com/article/1227221
6. job 类型简介
single metric job、Multi metric job、population job 是 Kibana抽象出来的几种常用类型,并非机器学习 job 分出来的类型,从 API 就可以清晰的看到,并没有 type 字段区分 job 类型,是通过配置参数的方式调整成用户预期的分析 job。
主要用途:
l Single metric:对一个索引字段进行数据分析。
l Multi metric:对多个索引字段分别进行数据分析,可根据字段分组切片。
l Population:群体分析,用于检测行为不同于指定群体中的其他实体的对象。
l Advanced:高级用法,对一个或多个索引字段执行数据分析,可包含多个检测器,且能通过JSON 编辑没有在 Kibana 中可视化的配置。
7. 使用 API 创建 Multi metric job
通过 API 创建 Multi metric job,指定 jobId、bucket_span、detectors、time_field、
by_field_name、influencers。
PUT _ml/anomaly_detectors/second_detector { "description": "multi metric detector", "analysis_config": { "bucket_span": "15m", "detectors": [ { "detector_description": "Sum of volume", "function": "sum", "field_name": "volume", "by_field_name":"label.keyword" }, { "detector_description": "max of volume", "function": "max", "field_name": "volume", "by_field_name":"label.keyword" }, { "detector_description": "max of high", "function": "max", "field_name": "high", "by_field_name":"label.keyword" } ], "influencers":["label.keyword","symbol"] }, "data_description": { "time_field": "date", "time_format": "epoch_ms" } }
可以发现和 single metric job 十分类似,只是 Multi metric job 使用了多个 detectors,对多个字段进行检测,并且按照 label.keyword 字段进行拆分,在该 job 中添加了 label.keyword 、symbol 这两个影响者。
同样的,需要为该 job 创建一个 datafeed,保证 job 出于 open 状态,并开启 datafeed 的 task。
# 创建datafeed,通过job_id绑定机器学习job PUT _ml/datafeeds/second-datafeed { "job_id": "second_detector", "indexes": [ "zmc-test1" ], "scroll_size": 1000 } # 开启datafeed,将数据传输给job(需要保证job是open状态) POST _ml/datafeeds/second-datafeed/_start?start=1970-01-02T10:00:00Z&end=2021-09-10T00:00:00Z
8. 使用 API 创建 population job
通过 API 创建 population job,可以看到与上述2种 job 的创建所使用的参数基本非常类似。over_field_name 表示以 label 字段的数据为总体的基准,对 field_name 指定的 change 字段进行分析。
这里还补充了一些可选参数,model_memory_limit 指定了该 job 的内存限制, model_snapshot_retention_days 指定了 snapshot 的保存时间,allow_lazy_open 指定了内存不足的情况下 job 是否可以 open(默认 false,不允许 open,如果为 true 则表示允许 open,等待内存充足的时候再执行),results_index_name 指定了 job 结果存入的索引的后缀名。
PUT _ml/anomaly_detectors/population_v2_detector { "description": "population detector", "analysis_config": { "bucket_span": "15m", "detectors": [ { "detector_description": "mean(change) over \"label.keyword\",这是一个群体分析j ob", "function": "mean", "field_name": "change", "over_field_name": "label.keyword", "detector_index": 0 } ], "influencers": [ "label.keyword" ] }, "analysis_limits": { "model_memory_limit": "1024mb", "categorization_examples_limit": 4 }, "data_description": { "time_field": "date", "time_format": "epoch_ms" }, "model_snapshot_retention_days": 1, "results_index_name": "shared", "allow_lazy_open": false }
为 population_v2_detector 这个 job 绑定一个 datafeed,该 datafeed 可以获取 zmc-test1 索引中的所有数据,可以通过 query 语句进行调整。
# 创建datafeed PUT _ml/datafeeds/population-v2-datafeed { "job_id": "population_v2_detector", "indexes": [ "zmc-test1" ], "scroll_size": 1000, "query": { "bool": { "must": [ { "match_all": {} } ] } }, "chunking_config": { "mode": "auto" }, "delayed_data_check_config": { "enabled": true } } # 开启datafeed任务,将数据传输到job POST _ml/datafeeds/population-v2-datafeed/_start?start=1970-01-02T10:00:00Z&end=2021-09-10T00:00:00Z
9. 使用 Kibana 创建 Multi metric job、population job
1、大多步骤与 single metric job 创建方式一致,不再赘述。
2、Multi metric job,指标属性选取演示。
还可以在后续步骤中选择 label 字段进行切片,分组后逐一分析。
3、population job,指标属性选取演示。
10. 查看机器学习分析结果
该过程即查询 .ml-anomalies-shared 索引中的数据,ES 提供了语义更加清晰的 API。
1、按照 bucket 返回异常检测 job 的结果。
GET _ml/anomaly_detectors/first_detectors/results/buckets { "anomaly_score": 80, "start": "1547078400000" }
2、可以通过 Kibana 的可视化页面查看结果和预测。