Elasticsearch 9.3.0 日志分类
(适配 Serverless & Stack 部署模式)
一、功能概述
应用日志事件通常是非结构化的,且包含大量可变数据(如时间戳、请求ID、IP地址等)。但多数日志消息的核心模式是相同或高度相似的,通过日志分类可将数百万条日志精简为少数类别,大幅提升问题排查效率。
日志分类的核心入口是「Categories(分类)」页面,它无需人工手动识别相似日志,而是基于日志消息的格式和静态内容自动分组,帮助你快速采取行动。
二、核心概念补充:Serverless vs Stack 部署
原文提到的两种部署模式,在 ES 9.3.0 中对日志分类功能的支持略有差异:
-
Serverless(无服务器模式):由 Elastic 完全托管的弹性部署,资源按需伸缩,日志分类功能默认启用,无需手动配置 ML 节点;
-
Stack(标准部署模式) :包括自托管集群或 Elastic Cloud 标准部署,需确保集群中有至少一个 ML 节点(Machine Learning 节点),且需手动配置权限后使用。
三、权限与安全深度说明
3.1 所需权限
日志分类依赖机器学习异常检测作业,因此需在 Kibana 中配置以下权限:
-
必须权限 :拥有 Kibana 「Machine Learning」功能的 所有特性权限 (Feature Privileges),包括
create_job、view_job、start_stop_job等; -
空间级权限 :在 Kibana 空间(Space)内拥有机器学习功能「完全访问」或「只读访问」权限的用户,可查看该空间内所有可见的异常检测作业结果------即使他们没有源索引的访问权限。
3.2 安全注意事项
异常检测作业的结果可能会从源索引中传播包含敏感信息的字段值(如用户ID、内部IP、业务参数等)到结果页面。因此:
-
需严格控制机器学习功能的访问权限;
-
建议对包含敏感信息的索引配置「字段级安全」(Field-level Security),限制敏感字段进入 ML 作业。
四、创建日志分类 ML 作业(ES 9.3.0 详细步骤)
4.1 作业原理
ML 作业的核心逻辑是:
-
提取静态部分 :识别日志消息中的固定文本(如错误模板
Failed to process request),将可变部分(如request_id: 123)标记为占位符; -
聚类相似消息:基于静态部分的相似度将日志聚类;
-
生成类别 :为每个聚类生成类别名称(保留静态部分,可变部分用
{}占位); -
异常检测:实时监控每个类别的消息计数,检测异常突增。
4.2 step-by-step 操作步骤
-
打开 Categories 页面:
-
方式1:在 Kibana 顶部全局搜索框输入
Logs / Categories,直接进入; -
方式2:通过导航路径
Observability > Logs > Categories进入。
-
-
确认启用 ML 分类:
首次进入时会弹出提示框,点击「Use machine learning」确认创建日志速率分类作业。
-
选择分析时间范围:
-
默认配置:分析过去4周 的日志,且作业持续无限期运行(实时分析新日志);
-
自定义配置:可点击时间选择器,指定特定的开始/结束时间(如仅分析过去1天的日志),或关闭「Indefinite」选项设置作业停止时间。
-
-
添加目标日志索引:
-
默认配置:ML 作业会分析所有匹配
logs sources高级设置中索引模式的日志索引; -
自定义索引:
-
点击「Add indices」下拉框,手动选择要分析的索引(如
logs-elastic.agent-*); -
若需修改默认索引模式,打开「Advanced Settings」:
-
全局搜索
Advanced Settings,或导航到Stack Management > Kibana > Advanced Settings; -
搜索
xpack.logsUi.logSources,修改默认的索引模式列表(如添加custom-logs-*)。
-
-
-
-
创建并运行作业:
点击「Create ML job」按钮,系统会自动创建并启动作业。
- 注意:作业启动后需等待2-5分钟(取决于日志量)让 ML 模型收集并分析数据,期间可在「Machine Learning > Anomaly Detection」页面查看作业状态。
五、结果保留配置(ES 9.2+ 专属)
5.1 默认配置
日志分类 ML 作业的结果默认保留 120天,到期后自动清理。
5.2 自定义保留期
可通过两种方式修改 results_retention_days 配置:
-
方式1:Kibana ML 界面:
-
进入
Machine Learning > Anomaly Detection,找到日志分类作业(作业名通常以logs-ui-categorization-开头); -
点击作业右侧的「Edit」,在「Results retention」字段修改天数,保存后生效。
-
-
方式2:ES API(推荐):
发送以下请求(替换 <job_id> 为你的作业ID):
HTTP
POST _ml/anomaly_detectors/<job_id>/_update
{
"results_retention_days": 30
}
六、分析日志分类结果
6.1 页面基础功能
-
可通过顶部「Indices」下拉框筛选特定索引的分类结果;
-
支持按「message count」「maximum anomaly score」排序。
6.2 类别行字段详解
| 字段名 | 详细说明 |
|---|---|
| message count | 该类别下的日志总条数,可快速识别高频问题(如 count 最高的类别通常是核心错误)。 |
| trend | 趋势柱状图,显示该类别日志随时间的数量变化------若突然出现峰值,可能表示问题爆发。 |
| category name | 从日志文本生成的类别名,静态部分保留,可变部分用 {} 占位(如 Connection refused to {host}:{port}),可直接看出问题类型。 |
| datasets | 该类别出现的数据集名称(对应 Elastic Agent 的 data_stream.dataset 字段),帮助定位问题来源模块。 |
| maximum anomaly score | 最高异常分数(范围0-100): - 0-50:正常波动; - 50-75:中等异常; - >75:高异常(需重点关注)。 |
6.3 深入分析操作
-
查看示例日志:点击类别行末尾的箭头,展开查看该类别的1条示例日志;
-
View in Discover:跳转到 Discover 页面,可查看该类别的所有日志,并进行过滤、聚合分析;
-
View in context:查看某条示例日志的「上下文日志」(即该日志前后10条日志),帮助还原问题发生的完整链路。
七、ES 9.3.0 优化建议
-
作业资源优化:创建作业前先清理无关索引,避免分析过期日志,减少 ML 节点资源消耗;
-
异常监控配置:为高异常分数(>75)的类别配置「告警规则」(通过 Kibana Alerting),及时收到问题通知;
-
分类结果复用:可将类别名称作为新字段添加到日志中(通过 Ingest Pipeline),用于后续的 Dashboard 可视化;
-
定期清理作业:若不再需要实时分析,可停止 ML 作业,释放资源。