一、专业术语规范
| 英文原文 | 标准译法 | 补充说明 |
|---|---|---|
| Log Anomalies | 日志异常检测 | 功能模块标准名称,非直译"日志异常" |
| Anomaly Detection Job | 异常检测作业 | Elastic ML官方标准译法,区别于普通任务 |
| Log Rate | 日志吞吐速率(简称日志速率) | 指单位时间内的日志条目写入数量 |
| Partition | 逻辑分区 | 本文特指按字段值对日志做的业务分组,非索引分片/分区 |
| Elastic Common Schema (ECS) | Elastic 通用模式 | Elastic官方日志字段标准化规范 |
| Kibana Feature Privileges | Kibana 功能权限 | Kibana空间级别的功能访问控制体系 |
| Source Indices | 源索引 | 待检测日志所在的原始业务索引 |
| Anomaly Explorer | 异常探查器 | Elastic ML内置的异常详情根因分析页面 |
| Serverless | Elastic Cloud 无服务器版本 | 全托管按需付费的Elastic Cloud服务 |
| Stack | Elastic Stack 自托管版本 | 本地/私有云自行部署的Elastic技术栈 |
二、详解
按「功能概述→权限安全→操作步骤→可视化详解→进阶操作」的业务逻辑介绍。
1. 日志异常检测功能概述
当机器学习(ML)的异常检测特性启用后,你可通过「日志异常检测」页面,检测并排查日志异常,以及异常发生的日志逻辑分区。该功能可无需大量人工介入即可快速识别异常行为------告别手动抽样日志数据、计算吞吐速率、判断速率是否符合预期的重复工作。
该功能会自动高亮日志吞吐速率超出预期阈值范围的时段,标记为潜在异常。典型异常场景示例:
-
日志速率大幅下跌:可能意味着某基础设施组件停止响应,导致业务请求处理量骤降;
-
日志速率突发飙升:可能预示着DDoS攻击,需进一步对请求来源IP地址开展溯源排查。
你也可以直接在「机器学习」应用中查看日志异常检测的全量结果。
【版本覆盖】本功能同时支持 Elastic Cloud Serverless无服务器版本 与 Elastic Stack自托管版本
2. 权限要求与安全注意事项
【核心说明】本功能完全依赖机器学习异常检测作业实现,相关权限与安全规则如下:
-
作业创建权限 :要创建异常检测作业,你必须拥有Kibana「机器学习」功能的全部权限。
-
结果查看权限 :在Kibana空间内,拥有机器学习功能完整权限或只读权限的用户,均可查看该空间内所有可见的异常检测作业结果------即使用户没有该作业源索引的访问权限。
-
安全风险提示:必须严格管控机器学习功能的访问权限;异常检测作业的结果中,可能会包含从源索引同步过来的、含敏感信息的字段值,存在数据泄露风险。
3. 启用日志速率分析与异常检测
本节为创建「自动检测日志条目吞吐速率异常」的机器学习作业的完整操作步骤:
-
进入功能页面:从Kibana导航栏进入「其他工具 → 日志异常检测」,或通过全局搜索框搜索「日志异常检测」进入;进入后,系统会引导你创建用于日志速率分析的机器学习作业。
-
选择分析时间范围:为机器学习分析设定检测的时间窗口(建议至少包含7天的正常业务日志,用于算法学习基线行为)。
-
配置待检测索引:添加包含待检测日志的索引。默认情况下,机器学习会分析所有匹配「日志源高级设置」中配置的索引模式的日志索引内的消息数据;你可通过导航栏或全局搜索框进入「高级设置」,修改日志源的默认索引模式。
-
创建并启动作业:点击「创建ML作业」,系统会自动创建并启动异常检测作业。机器学习算法需要数分钟时间采集并学习基线数据,作业完成数据处理后,即可查看检测结果。
【9.2+版本专属特性(9.3.0完全兼容)】
日志异常检测机器学习作业的结果默认保留120天,可通过修改results_retention_days配置项调整保留时长。
4. 异常检测图表详解
「异常图表」提供了全局、带颜色分级的日志条目吞吐速率可视化,默认按Elastic通用模式(ECS)规范的 event.dataset 字段值做逻辑分区展示。该图表可帮助你快速定位每个分区日志速率的突增/突降情况。
4.1 数据筛选与交互操作
若你的日志逻辑分区数量较多,可通过以下方式筛选数据:
-
鼠标悬停在某一时间范围,可查看该时段内每个分区的实时日志速率;
-
点击或悬停在分区名称上,可实现该分区数据的显示、隐藏或高亮突出。
4.2 图表元素与异常判定规则
图表会标记出检测到异常的时间范围:
-
灰色区域:日志速率的正常基线范围(算法学习到的预期值区间);
-
彩色叠加区域:异常时段,叠加在正常基线之上展示。
当某一时段被标记为异常,说明机器学习算法检测到了异常的日志速率行为,触发原因包括:
-
日志速率显著高于日常基线;
-
日志速率显著低于日常基线;
-
检测到其他异常行为:例如日志速率在预期阈值内,但未出现符合业务规律的正常波动(如业务高峰时段无速率增长)。
4.3 异常等级与评分规则
-
异常等级色阶:时段内的异常严重程度按色阶分级,从高到低依次为:红色(严重)→ 橙色(高风险)→ 黄色(中风险)→ 蓝色(预警);
-
异常评分:每个逻辑分区都有独立的异常图表,异常评分范围为0(无异常)~ 100(严重异常),评分越高代表异常置信度与严重程度越高。
5. 异常深度分析操作
如需对异常做更精细的根因分析,可点击「在机器学习中查看异常」,系统会自动跳转到机器学习模块的「异常探查器」页面,查看该异常的全量详情、关联特征与根因分析数据。
三、深度技术分析
1. 功能底层技术原理
Elastic Stack 9.3.0的日志速率异常检测,是基于Elastic ML的时间序列异常检测能力,专门针对日志计数型数据优化的算法实现,核心技术细节如下:
-
基线建模算法 :采用对数泊松分布建模,完美适配日志条目计数型数据的离散分布特性;同时结合STL时间序列分解,剥离日志速率的趋势、日/周级业务周期、季节因素,精准学习业务正常基线,避免把常规业务高峰/低谷误判为异常。
-
分区检测逻辑 :默认按
event.dataset字段分区,是因为该字段是ECS规范的核心字段,用于标识日志的数据集来源(如nginx.access、system.syslog),按该字段分区可实现不同业务模块、不同组件的日志速率独立建模,避免不同基线的数据源互相干扰,大幅提升检测准确率。 -
异常评分计算:0-100的异常评分,是基于算法计算的异常分数归一化后的结果,核心是通过「实际速率与预期基线的偏差程度、偏差持续时长、历史出现频率」三个维度综合计算置信度;9.3.0版本中,评分≥75为高风险异常,≥95为严重异常,会触发红色标记。
-
9.3.0版本专属优化:针对低吞吐日志场景(单分区日日志量<1000条)做了算法适配,降低了误报率;同时提升了对慢渐变异常(如日志速率逐步下跌,而非突发)的检测能力。
2. 功能启用前置条件
(1)Elastic Stack 9.3.0 自托管版本前置要求
-
集群配置 :必须开启X-Pack机器学习功能,
elasticsearch.yml核心配置如下(9.3.0默认开启,若手动关闭需改回):YAMLxpack.ml.enabled: true xpack.ml.max_machine_memory_percent: 30 # ML节点最大内存占比,生产环境建议不低于30% -
节点要求 :集群中必须有至少1个具备
ml角色的节点,用于运行机器学习作业;生产环境建议使用专用ML节点,避免与数据节点、协调节点混部,影响集群性能。 -
许可证要求:需要Elastic Platinum(白金版)或Enterprise(企业版)许可证,基础版、黄金版不包含该高级异常检测功能。
-
Kibana配置 :
kibana.yml中需开启机器学习功能,xpack.ml.enabled: true(9.3.0默认开启)。
(2)Elastic Cloud Serverless版本前置要求
无额外配置,Serverless版本默认开启机器学习功能,按作业运行时长与计算资源按需计费,无需手动配置ML节点,开箱即用。
3. 权限配置深度拆解
9.3.0版本中,日志异常检测功能的权限分为3个层级,最小化权限配置与风险说明如下:
| 操作场景 | 所需集群权限 | 所需Kibana空间权限 | 所需索引权限 |
|---|---|---|---|
| 创建异常检测作业 | manage_ml、monitor |
机器学习功能 → 全部权限 | 源索引的read、view_index_metadata权限 |
| 查看异常检测结果 | monitor_ml |
机器学习功能 → 只读权限 | 无需源索引的任何权限(核心安全风险点) |
| 管理作业启停/删除 | manage_ml |
机器学习功能 → 全部权限 | 无需源索引权限 |
【安全风险深度展开】原文提到的"只读用户可查看作业结果,哪怕没有源索引权限",核心风险是:若源索引中包含身份证、手机号、密钥等敏感数据,作业在检测过程中会把相关字段值同步到ML系统索引(.ml-anomalies-*)中,只读用户可通过ML结果页面直接获取这些敏感数据,绕过源索引的权限管控。 |
【9.3.0规避方案】
-
创建作业时,通过「字段过滤」仅选择必要的字段,排除所有敏感字段;
-
为ML功能配置独立的Kibana空间,严格管控空间成员;
-
通过文档级安全(DLS)限制ML作业可访问的源索引数据范围。
4. 核心配置项全量详解
(1)results_retention_days(9.2+专属,9.3.0完全兼容)
-
作用:控制日志异常检测作业的结果数据保留时长,默认120天,过期数据会自动清理。
-
配置方法1:创建作业时通过Kibana UI配置
进入「日志异常检测」页面,创建作业时展开「高级选项」,找到「结果保留天数」,输入自定义数值后创建即可。
-
配置方法2:通过API修改已有作业
HTTPPOST _ml/anomaly_detectors/<你的作业ID>/_update { "results_retention_days": 180 # 自定义保留天数,如180天 } -
注意事项:9.3.0中该配置最小值为1天,无最大值限制,需根据集群存储容量规划,避免
.ml-anomalies-*系统索引占用过多磁盘空间。
(2)日志源默认索引模式配置
原文提到的「日志源高级设置」,对应的Kibana高级设置项为logs:default_source,默认值为logs-*,filebeat-*,winlogbeat-*,匹配ECS规范的日志索引模式;你可在Kibana「Stack Management → 高级设置 → 日志」中修改该配置,自定义默认的待检测日志索引范围。
(3)自定义分区字段配置
9.3.0版本支持自定义日志分区字段,无需强制使用event.dataset,创建作业时展开「高级选项」,在「分区字段」中选择目标字段即可,建议满足以下条件:
-
字段为keyword类型,基数适中(建议10-1000个枚举值),避免基数过高导致作业内存占用飙升、性能下降;
-
字段符合业务逻辑,能按业务模块、组件、服务等维度拆分日志,确保每个分区的日志速率有独立的基线规律。
5. Serverless与Stack版本核心差异
| 对比维度 | Elastic Stack 9.3.0 自托管版本 | Elastic Cloud Serverless 无服务器版本 |
|---|---|---|
| 部署运维 | 需自行部署集群、配置ML节点、维护集群稳定性 | 全托管,无需关注底层节点与运维,开箱即用 |
| 计费模式 | 一次性许可证订阅,无额外作业运行费用 | 按需计费,按作业的计算资源使用量、运行时长、结果存储量收费 |
| 资源限制 | 受限于集群ML节点的CPU、内存配置,需手动扩展 | 无固定资源限制,平台自动弹性扩缩容,适配大流量检测场景 |
| 权限管控 | 可通过RBAC精细化控制集群、索引、Kibana功能权限 | 基于Cloud组织与项目权限管控,功能权限与自托管版本一致 |
| 数据存储 | 结果存储在自有集群的.ml-anomalies-*索引,可完全自主管控 |
结果存储在Elastic Cloud托管存储中,按存储量计费 |
6. 异常场景与排查思路拓展
| 异常类型 | 典型表现 | 核心根因排查方向 |
|---|---|---|
| 速率突发飙升 | 红色/橙色异常,短时间内日志速率翻倍增长 | 业务故障导致报错日志暴增、爬虫/攻击流量、业务促销活动流量突增、日志采集配置错误导致重复上报 |
| 速率持续下跌 | 黄色/橙色异常,日志速率逐步下降至0 | 日志采集Agent(Filebeat)故障、服务器宕机、网络中断、业务进程退出、磁盘满导致日志无法写入 |
| 周期规律缺失 | 蓝色/黄色预警,速率在阈值内但无正常周期波动 | 业务监控系统故障、定时任务未执行、用户流量入口异常、日志采集时间戳配置错误 |
| 单分区异常、全局正常 | 仅单个event.dataset分区出现异常,其他分区无波动 |
对应业务模块/组件单独故障,无需排查全局基础设施 |
四、9.3.0版本优化与最佳实践
1. 作业创建核心最佳实践
-
时间范围选择 :建议至少选择14天的全量业务日志作为训练数据,覆盖完整的周级业务周期(工作日/周末规律),避免基线学习不充分导致误报;
-
索引拆分原则:避免一次性添加全量日志索引,建议按业务线、环境(生产/测试)拆分创建独立作业,减少单个作业的计算压力,提升检测准确率;
-
分区字段优化 :优先使用ECS规范字段(
event.dataset、service.name、host.name),禁止使用基数过高的字段(如trace.id、client.ip),否则会导致作业内存占用过高、运行缓慢; -
合规留存规划 :生产环境建议将
results_retention_days设置为180天,满足等保2.0日志留存要求,同时定期清理过期数据,避免磁盘空间占用过高。
2. 误报优化方案
9.3.0版本中,若出现大量误报,可通过以下方式优化:
-
扩充训练数据:增加基线学习的时间范围,覆盖更多业务场景(如大促、变更窗口),让算法学习到完整的正常行为模式;
-
配置异常排除规则:在ML作业中添加计划任务排除,比如固定的业务变更窗口、定时备份时段,避免把常规操作误判为异常;
-
调整检测灵敏度:创建作业时,在高级选项中调整「异常阈值」,降低灵敏度可减少误报,提升灵敏度可提高对弱异常的检出率;
-
拆分作业分区:若多个业务模块的日志基线差异过大,拆分成多个独立作业,避免不同基线的数据源互相干扰。
3. 进阶联动用法
-
与告警功能联动:在Kibana「Alerting」中创建告警规则,当异常评分≥75时,自动触发钉钉/企业微信/邮件告警,实现异常的实时通知;
-
与可观测性联动:结合APM、基础设施监控数据,当日志异常触发时,自动关联对应服务的性能指标、链路追踪数据,实现根因的快速定位;
-
与安全分析联动:结合Elastic Security,当日志速率异常(如认证失败日志暴增)时,自动触发安全检测规则,实现攻击行为的实时拦截。
4. 9.3.0版本避坑指南
-
作业创建失败 :若提示"无权限访问源索引",需确认当前用户拥有源索引的
read和view_index_metadata权限;若提示"无ML节点可用",需确认集群中已配置ml角色的节点,且xpack.ml.enabled已开启; -
检测结果无数据 :确认源索引的时间字段为
@timestamp(ECS规范默认字段),若使用自定义时间字段,需在创建作业时指定时间字段,否则算法无法正确解析时间序列; -
作业运行卡顿:若分区字段基数过高(>10000),会导致作业内存占用过高、运行缓慢,建议拆分作业或更换低基数的分区字段;
-
敏感数据泄露:严格管控ML功能的访问权限,创建作业时过滤敏感字段,避免敏感数据同步到ML结果索引中。