在我之前的文章里,我有讲述很多有关使用机器学习来针对数据做异常监测的文章。你可以在 “开发者上手指南” 里的 “机器学习” 章节中找到。在今天的练习中,我将使用最新的 Elastic Stack 9.0.2 来展示如何在 Elasticsearch 中使用机器学习的方法来进行异常监测。很多人可能想问:为什么我们需要机器学习?我们知道针对我们全观测性:指标,日志及跟踪,我们可以采集大量的数据,但是其中的 95% 及以上的数据大多数可以称之为垃圾,因为它们不可能为我们提供任何的有价值的信息。只有当某些指标或者个体发生异常的时候,我们可以称之为事件。这也是我们在可观测性里非常关注的事件,比如一个指标突然增加,或者突然减少,或者某类的日志数量突然增加,这些都是对运维人员非常重要的信号。它们可以为运维人员提供有价值的信息并提前预防可能发生的事情。即便如此,我们的运维人员不可能一天24小时在机器旁不断地观看仪表盘来查看可能出现的异常事件。在这种情况下,我们可以通过机器学习的方法来代替我们人类来追踪这些事件。我们可以通过人工智能针对历史数据进行学习,并用学到的知识来针对数据进行检测及预测。当异常发生时,我们甚至可以充分利用告警机制来通知有关的运维人员,并积极干预可能出现的故障。这个就是机器学习的目的所在!

准备好试用异常检测了吗?请按照本教程操作:

  • 试用 Data Visualizer

  • 为 Kibana 示例数据创建异常检测作业

  • 利用结果识别数据中的潜在异常

在本教程结束时,你应该对机器学习有一个良好的了解,并希望能激发你使用它来检测自己数据中的异常。

需要更多背景信息?查看 Elasticsearch 入门介绍,了解术语并掌握 Elasticsearch 的基本工作原理。

安装

如果你还没有安装好自己的 Elasticsearch 及 Kibana,请参考如下的文章来进行安装:

  • 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch

  • Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana

在安装时,我们可以选择 Elastic Stack 8.x/9.x 的文章来进行安装。

启动白金试用

机器学习运行于机器学习节点。这项功能需要订阅才可以进行使用。更多订阅方面的知识,请参考 订阅 | Elastic Stack 产品和支持 | Elastic

在我们安装完 Elasticsearch 及 Kibana 后,我们可以按照如下的步骤来启动白金试用:

启动白金试用,直到你看到上面的页面显示的信息!

添加数据到 Elasticsearch

我们使用 Kibana 中自带的数据。按照如下的步骤来安装数据:

这样,我们就在 Elasticsearch 里创建了一个叫做 kibana_sample_data_logs 的索引:

探索 Kibana 中的数据

我们打开 Kibana,导航至 Machine Learning:

可选:你可以更改随机采样行为,这会影响 Data Visualizer 每个分片使用的文档数量。你可以使用自动随机采样,在准确性和速度之间取得平衡;也可以使用手动采样,自定义采样百分比;或者关闭该功能,使用完整数据集。Kibana 示例数据中的文档数量相对较少,所以你可以关闭随机采样。对于更大的数据集,请注意,使用较大的采样规模会增加查询运行时间并加重集群负载。

我们可以点击上图中的 clientip 字段来显示各个 IP 地址的分布:

我们点击 response.keyword 字段来查看各个响应代码的分布情况:

我们点击 url.keyword 字段来查看请求来自哪些地址:

对于数值字段,Data Visualizer 会提供关于最小值、中位数、最大值和最高值、不同值的数量以及它们的分布情况的信息。你可以使用分布图更好地了解数据中的数值是如何聚集的。例如:

提示:记下 @timestamp 字段中的日期范围。它们是相对于你添加示例数据的时间而言的,你稍后在教程中会需要这些信息。

现在你已经熟悉了 kibana_sample_data_logs 索引中的数据,你可以创建一些异常检测作业来分析它。

提示:你可以在异常检测向导中查看可选字段的统计信息。侧边弹出窗口中显示的字段统计信息提供了更有意义的上下文,帮助你选择相关字段。

在 Kibana 中创建示例异常检测作业

重要:此页面上的结果可能与你在使用示例数据集时实际获得的值不同。这种行为是预期的,因为数据集中的数据点可能会随着时间而变化。

Kibana 示例数据集包含一些预配置的异常检测作业供你试用。你可以使用以下任一方法来添加这些作业:

方法一:

方法二:

向导会创建三个 job 和三个 datafeeds。

Datafeeds, buckets, 及 detectors

Datafeeds从 Elasticsearch 中检索时间序列数据,并将其提供给异常检测作业进行分析。

job 使用 bucket 将时间序列划分为批次进行处理。例如,三个示例 Web 日志 job 都使用 1 小时的 bucket span。

每个异常检测作业包含一个或多个 detector,它们定义了执行的分析类型(例如 max、average 或 rare 分析函数)以及要分析的字段。一些分析函数用于查找单个异常数据点。例如,max 会识别一个 bucket 中出现的最大值。其他函数则在整个 bucket 范围内执行聚合操作。例如,mean 会计算 bucket 中所有数据点的平均值。

更多信息请参见 Datafeeds、Buckets 和 Function reference。

如果你想查看所有作业和数据提要的配置详情,可以在 Machine Learning > Anomaly Detection > Jobs 页面查看。或者,你也可以在 GitHub 上查看配置文件。不过为了本教程的目的,以下是每个作业目标的简要概述:

  • low_request_rate 使用 low_count 函数查找异常低的请求速率

  • response_code_rates 使用 count 函数,并按 response.keyword 值分区分析,以查找按 HTTP 响应代码分类的异常事件速率

  • url_scanning 使用 high_distinct_count 函数,对 clientip 字段进行群体分析,以发现访问异常高不同 URL 数量的客户端 IP

下一步是查看结果,了解这些作业生成了哪些类型的洞见!

查看异常检测结果

在数据提要启动且异常检测作业处理了一些数据后,你可以在 Kibana 中查看结果。

提示:根据你机器的性能,可能需要等待几秒钟,机器学习分析才能生成初步结果。

机器学习功能会分析输入的数据流,建立其行为模型,并根据每个作业中的 detector 进行分析。当事件偏离模型时,该事件被识别为异常。你可以立即看到所有三个作业都发现了异常,这些异常在每个作业的泳道中以红色方块显示。

在 Kibana 中,有两个工具可以用来查看异常检测作业的结果:Anomaly ExplorerSingle Metric Viewer。你可以点击左上角的图标在这两个工具之间切换。你也可以编辑作业选择,查看不同子集的异常检测作业。

单指标作业结果

其中一个示例作业(low_request_rate)是单指标异常检测作业。它只有一个使用 low_count 函数的 detector 和有限的作业属性。如果你想判断网站请求速率何时显著下降,可以使用类似这样的作业。

让我们在 Single Metric Viewer 中先看这个简单的作业:

  • 在 Machine Learning 中选择 Jobs 标签,查看异常检测作业列表。

  • 点击 low_request_rate 作业 Actions 列中的图表图标,在 Single Metric Viewer 中查看结果。

  • 使用日期选择器的相对模式,选择起始日期为一周前,结束日期为一个月后,以覆盖大部分被分析的数据点。

该视图包含一个图表,显示实际值和预期值随时间的变化。只有当作业启用了 model_plot_config 时才可用。它只能显示单个时间序列。

图表中的蓝线代表实际数据值。蓝色阴影区域代表预期值的范围。上下界之间的区域是模型最可能的值,置信水平为 95%。也就是说,有 95% 的概率实际值会落在该范围内。如果值超出该区域,通常会被识别为异常。

如果你从数据开始滑动时间选择器到结束,可以看到模型随着处理更多数据而不断改进。开始时,预期值范围较宽,模型还未捕捉到数据的周期性。但它会快速学习并开始反映数据中的模式。

Anomaly scores

任何超出模型预测范围的数据点都会被标记为异常。为了提供合理的结果视图,每个 bucket 时间间隔都会计算一个异常得分。异常得分的范围是 0 到 100,表示相对于之前观察到的异常,该异常的重要性。高异常得分的值以红色显示,低得分的值以蓝色表示。异常得分高的时间间隔非常重要,需要进一步调查。

将时间选择器滑动到包含红色异常数据点的时间段。如果你将鼠标悬停在该点上,可以看到更多信息。

注意:你可能会注意到时间序列中的一个高峰,但它没有被标记为异常,因为这个作业只检测低计数异常。

对于每个异常,你可以在查看器的 Anomalies 部分看到关键细节,如时间、实际值和预期(“typical/典型”)值,以及它们的概率。例如:

在 Actions 列中,有更多选项,比如 Raw data,会为相关文档在 Discover 中生成查询。你也可以在操作菜单中通过自定义 URLs 添加更多链接。

默认情况下,表格包含时间线上所选区间内所有严重性达到 “warning” 及以上的异常。例如,如果你只关注严重异常,可以更改此表的严重性阈值。

Anomaly explanation 部分提供每个异常的更多洞见,如异常类型和影响,方便你解读作业结果。

你还可以在 Single Metric Viewer 中通过拖选一段时间来添加注释,并写入描述。注释是指特定时间段内的事件备注,既可以由用户创建,也可以由异常检测作业自动生成,用于反映模型变化和重要事件。

识别出异常后,下一步通常是尝试确定这些情况的背景。例如,是否有其他因素导致了问题?异常是否局限于特定的应用或服务器?你可以通过叠加更多作业或创建多指标作业开始排查这些情况。

高级或多指标作业结果

从概念上讲,多指标异常检测作业相当于运行多个独立的单指标作业。但将它们捆绑在一个多指标作业中,你可以看到所有指标和实体的总体得分以及共享的影响因素。因此,多指标作业比许多独立单指标作业扩展性更好。当检测器间存在共享影响因素时,它们还能提供更好的结果。

Influencers

创建异常检测作业时,你可以指定一些字段作为影响因素(influencers)。这些字段包含可能影响或导致异常的对象或信息。response_code_rates 和 url_scanning 作业中都有影响因素。

最佳实践是不选择太多影响因素。一般来说,选三个以内就足够了。选太多会让结果复杂难懂,且会增加分析开销。更多详情请参见 Influencers。

你还可以配置异常检测作业,根据分类字段将单个时间序列拆分成多个时间序列。例如,response_code_rates 作业有一个 detector,根据 response.keyword 拆分数据,然后使用 count 函数判断事件数量是否异常。如果你想按响应代码查看高低请求率,可以使用这样的作业。

我们先在 Anomaly Explorer 中查看 response_code_rates 作业:

  • 在 Machine Learning 中选择 Jobs 标签,查看异常检测作业列表。

  • 点击 response_code_rates 作业行中的图标,打开 Anomaly Explorer 查看结果。

  • 对于该作业,你可以选择为每个 client IP 或响应代码显示单独的泳道。例如:

因为该作业使用 response.keyword 作为分区字段,分析会针对该字段的每个不同值分别建立独立的基线。通过按实体查看时间模式,你可能会发现合并视图中隐藏的异常。

在异常时间线下方,有一个包含注释的区域。你可以使用注释部分右侧的选择器来筛选事件类型。

在 Anomaly Explorer 左侧,有一个列表显示该时间段内所有检测到异常的主要影响因素(influencers)。该列表包括最大异常得分,这些得分是在所有 detector 的每个 bucket 中,为每个影响因素汇总的。此外,还显示了每个影响因素的异常得分总和。你可以利用这个列表帮助缩小可能的原因,关注最异常的实体。

点击泳道中的某个区段,可以获取该时间段内异常的更多信息。例如,点击 response.keyword 值为 404 的泳道中的红色区段:

为展示目的。在我的数据中,没有出现 404

你可以看到异常发生的具体时间。如果作业中有多个 detector 或指标,你还能看到是哪个捕捉到了异常。你还可以通过点击操作菜单中的“ View Series” 按钮,切换到 Single Metric Viewer 查看该时间序列。

图表下方有一个表格,提供更多信息,比如典型值和实际值,以及促成异常的影响因素。例如:

如果你的作业有多个 detector,表格会汇总异常,显示每个 detector 和实体(即 “found for” 列中显示的字段值)中严重性最高的异常。要查看所有异常且不进行汇总,可以将 Interval 设置为“Show all”。

在此示例数据中,404 响应代码的激增受特定客户端影响。类似情况可能表明该客户端正在访问异常页面或扫描你的网站,试图访问异常的 URL。这种异常行为值得进一步调查。

提示:你在 Anomaly Explorer 每个部分看到的异常得分可能会有些差异。这是因为每个作业都会生成 bucket 结果、influencer 结果和 record 结果,每种结果都会计算异常得分。异常时间线使用的是 bucket 级别的异常得分,主要影响因素列表使用的是 influencer 级别的异常得分,异常列表使用的是 record 级别的异常得分。

群体作业结果

最后一个示例作业(url_scanning)是一个群体异常检测作业。正如我们在 response_code_rates 作业结果中看到的,有一些客户端似乎正在访问异常数量多的 URL。url_scanning 示例作业提供了另一种方法来调查此类问题。它有一个 detector,使用 high_distinct_count 函数作用于 url.keyword 字段,以检测该字段中异常多的唯一值数量。然后,它会分析这种行为是否在以 clientip 字段定义的客户端群体中表现出差异。

如果你在 Anomaly Explorer 中查看 url_scanning 异常检测作业的结果,会发现其图表格式有所不同。例如:

在这个例子中,每个 client IP 的指标是相对于同一 bucket 中其他 client IP 来分析的,我们再次看到 IP 为 30.156.16.164 的客户端行为异常。

如果你还想尝试另一个群体异常检测作业的例子,可以添加示例电子商务订单数据集。它的 high_sum_total_sales 作业用于判断哪些客户在某个时间 bucket 中的购买金额相对于其他客户而言异常。在这个示例中,有两个客户被发现存在异常事件:

创建预测

除了检测数据中的异常行为,你还可以使用机器学习功能来预测未来的行为。

在 Kibana 中创建预测的方法如下:

1)在 Single Metric Viewer 中查看你的作业结果(例如 low_request_rate 作业)。在 Anomaly Detection 页面中点击 Actions 列的 View series 按钮即可进入该视图。

2)点击 Forecast。

3)指定预测的持续时间。该值表示从最后一个被处理的记录开始,向未来预测多远。你必须使用时间单位。在这个例子中,持续时间是一周(1w):

4)在 Single Metric Viewer 中查看预测结果:

图表中的黄色线表示预测的数据值。黄色阴影区域表示预测值的上下边界,也反映了预测的置信度。注意,随着预测时间越长,边界通常会变宽(也就是说置信度降低),当置信度过低时,预测将停止。

5)可选:将预测结果与实际数据进行对比。

随着作业处理更多数据,你可以再次点击 Forecast 按钮,选择将某个预测结果叠加在实际数据上进行查看。图表中将同时显示:实际数据值、期望值的上下边界、异常点、预测数据值,以及预测值的上下边界。这种实际数据与预测数据的组合可以帮助你判断机器学习功能对未来行为的预测能力。

如果你想在 Kibana 示例数据上查看这种对比效果(该数据集文档数量有限),可以在创建预测前重置作业并只分析部分数据。例如,在 Kibana 的 Job Management 页面重置一个异常检测作业,或使用 reset anomaly detection jobs API。重新启动该作业的数据提要时,选择一个位于示例数据中段的日期作为搜索结束日期。默认情况下,数据提要在到达该日期时停止,异常检测作业也会关闭。此时创建预测。然后,你可以重新启动数据提要,处理剩余数据,从而生成如上述所示的结果。

提示:Kibana 示例数据集的时间戳是相对于你添加数据集的时间生成的,不过其中一些日期位于未来。因此,在本教程中,当你重新启动数据提要时,不要使用 “No end time (Real-time search)” 选项。请指定合适的结束日期,以便立刻处理全部数据。

现在你已经看到使用示例数据创建预测是多么简单,可以考虑在你自己的数据中想要预测哪些类型的事件。想了解更多信息和思路,请参阅 Forecast future behavior

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913000.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913000.shtml
英文地址,请注明出处:http://en.pswp.cn/news/913000.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARuler3.1.3 | 高级版测量应用,利用AR技术测量所有

ARuler是一款非常便捷的测量应用程序,专为需要精确测量的用户设计。它不仅具备强大的3D测量功能,还利用增强现实(AR)技术,为用户提供多种测量选项,包括角度、长度、宽度、高度、面积和体积等。无论是日常生…

MapReduce分布式计算框架:从原理到实战

大家好!今天我们来聊聊大数据处理领域的一个重要框架——MapReduce。作为Google提出的经典分布式计算模型,MapReduce极大地简化了海量数据的处理流程。无论你是大数据新手还是有一定经验的开发者,这篇文章都会让你对MapReduce有更深入的理解。…

Redis 7 及更高版本的脚本化方案

一、背景与动机 传统的 Redis 脚本机制依赖于客户端加载 EVAL 脚本,存在以下局限: 网络与编译开销 每次调用都要传输脚本源码或重新加载 SHA1。缓存失效风险 重启、主从切换、SCRIPT FLUSH 后脚本缓存丢失,事务易失败。调试与运维困难 SHA1…

Java项目:基于SSM框架实现的云端学习管理系统【ssm+B/S架构+源码+数据库+毕业论文】

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对课程学习信息管理混乱,出错率高,信息安全性差…

【压力测试之_Jmeter链接Oracle数据库链接】

Oracle数据库链接 欢迎来到挖坑避坑课堂链接数据库 欢迎来到挖坑避坑课堂 之前性能测试都是业务之类的,数据库压测很少涉及,就会出现很多各式各样的问题,首要问题就是Jmeter链接数据库的问题,本篇主要讲解Jmeter链接Oracle数据库…

Appium与Appium Inspector配置教程

一、连接设备 首先将手机的开发者模式打开,不同手机的开启方法不同,这里演示的测试机为vivoS1,其他机型的开启方法大家可以自行AI搜索。 1.手机授权 (1)点击手机的【设置】选项 (2)打开手机…

【web出海】深度拆解 FLUX.1 kontext:这不仅是AI绘画的革命,更是 MicroSaaS 创业者的黄金机遇

前言 近日,Black Forest Labs 发布的 FLUX.1 Kontext 模型在AI圈掀起了波澜。它不仅仅是又一个文生图工具,其独特的“在情境中(in-context)”编辑、惊人的角色一致性、精准的局部修改和强大的文字渲染能力,标志着一个技…

Git 安装闭坑指南(仅 Windows 环境)

💻 Git 安装闭坑指南(仅 Windows 环境) 适用人群:刚开始用 Git 的 Windows 用户;重新配置开发环境的程序员;不想踩坑的团队小伙伴 目标:快速、稳定地安装 Git,在各种常见场景下避免“…

2025年4月SCI-吕佩尔狐优化算法Rüppell’s fox optimizer-附Matlab免费代码

引言 本期介绍一种新的元启发式算法——吕佩尔狐优化算法Rppell’s fox optimizer,RFO。RFO的灵感来自于吕佩尔狐狸在白天和晚上自然而聪明的集体觅食行为。优化器利用吕佩尔狐敏锐的视觉、听觉和嗅觉对其各种主要觅食活动进行数学模拟,在优化过程中兼顾…

SwiftUI 中的模糊效果详解:.blur、.material、UIVisualEffectView

模糊效果(Blur Effect)是 iOS 用户界面设计的重要组成部分,它被广泛应用于系统控制中心、通知背景、弹窗蒙版等场景,营造出“毛玻璃”的视觉层次感。 本文将深入解析 SwiftUI 中实现模糊效果的三种主流方式:.blur(radi…

Euler2203安装.NetCore6.0环境操作步骤

# 1. 下载.NET二进制包 wget https://download.visualstudio.microsoft.com/download/pr/xxxx/dotnet-sdk-6.0.xxx-linux-x64.tar.gz把dotnet-sdk-6.0.428-linux-x64.tar.gz放到一个目录里面# 2. 创建安装目录sudo mkdir -p /usr/share/dotnetsudo tar -zxf dotnet-sdk-6.0.428…

解决安装SunloginClient问题记录(Ubuntu 24.04.2)

成功安装流程(Ubuntu 24.04.2) 1. 首次尝试安装(失败,缺少依赖) sudo dpkg -i ./SunloginClient_15.2.0.63064_amd64.deb sudo apt-get install -f # 修复依赖(此时提示缺少 libgconf-2-4) …

wordpress安装教程

一、安装软件 1、apache sudo apt install apache2 -y 2、mysql sudo apt install mysql-server -y 3、PHP及其扩展 sudo apt install php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip php-fpm -y 重启ap…

C#,VB.NET从JSON数据里提取数组中的对象节点值

在VB.NET中,若要从 JSON 数据里提取Data.DataList数组中的CategoryId,并将其转换为VB.NET数组,可借助Json.NET(Newtonsoft.Json)库来实现。下面为你详细介绍具体的实现步骤和代码示例: 一、实现 JSON 到数…

Flutter 进阶:实现带圆角的 CircularProgressIndicator

在 Flutter 中,我们经常使用 CircularProgressIndicator 来展示加载进度。但是你是否注意到:它的进度端始终是“平头”的(直角)? 这在一些 UI 设计中并不美观,特别是想实现类似 Apple 健身环那样“前端圆清…

解决CentOS7下载docker-compose出现没有可用软件包问题

1 问题描述 今天在使用虚拟机CentOS 7系统安装docker-compose时,用的是aliyun镜像,出现没有可用软件包的问题,这就说明不是因为网络,而是因为aliyun镜像没有该软件包。 2 解决办法 这里推荐最稳定的解决办法,去docker-…

基于SpringBoot+Vue的酒类仓储管理系统

文档包含用例图、系统架构图、系统功能结构图、实体属性图、总体e-r图。一.系统开发工具与环境搭建1.系统设计开发工具后端使用Java编程语言的Spring boot框架项目架构:B/S架构运行环境:win10/win11、jdk17前端:技术:框架Vue.js&a…

月付物理服务器租用平台-青蛙云

青蛙云物理服务器租用服务概述 青蛙云是一家提供物理服务器租用服务的平台,支持月付、年付等灵活付费方式,物理服务器适合企业或个人用户的高性能计算需求。其服务覆盖多地区机房,提供多种配置选项,支持定制化需求。 核心优势 …

基于二分类方法和安全系数方法使用comsol with matlab蒙特卡洛模拟实现边坡失效概率计算——随机变量模型

基于二分类方法和安全系数方法使用comsol with matlab蒙特卡洛模拟实现边坡失效概率计算——随机变量模型 模型和全部代码下载随机变量模拟加载comsol模型蒙特卡洛模拟(分类模型)蒙特卡洛模拟(安全系数模型)内聚力和内摩擦角随机变量分布二分类稳定性1000次运行结果失效概率…

机器学习-02(深度学习的基本概念)

机器学习的步骤 1.定义带有未知参数的函数 线性模型(linear models)具有较大的限制(Model Bias) y b wx 无论如何更改b或者w,其只会呈现出一条直线,不能满足更加复杂的现实情况。 我们可以将复杂的函…