如何解析Kibana中已索引数据log字段内的非结构化日志
Elastic Stack日志
log字段结构化解析落地方案 一、新增数据入索引自动解析配置
Aptible托管版Elastic Stack只要开放Kibana基础管理权限,方案可直接落地,无平台特殊限制。你日志里的log字段是标准Nginx默认访问日志格式,无需手写复杂正则,用Elastic原生能力即可实现自动解析,优先选Ingest Pipeline方案,无需调整现有采集链路:
- 配置Ingest Pipeline
- 进入Kibana左侧菜单栏
Stack Management>Ingest Pipelines,点击创建新管道 - 添加第一个处理器,类型选
Grok:- 「Field」项填写
log - 「Patterns」项直接填入预置模式
%{COMBINEDAPACHELOG},该模式可自动匹配你提供的日志样例,拆分出客户端IP、请求时间、请求方法、请求路径、HTTP协议版本、响应状态码、响应体大小、请求来源、UA标识所有核心字段 - 勾选
Ignore failure选项,避免个别格式异常的日志阻断整体写入流程
- 「Field」项填写
- (可选)添加第二个处理器,类型选
Date:- 「Field」项填写grok拆分出的
timestamp字段,配置对应时间格式,将日志真实产生时间同步到@timestamp字段,替换当前默认的日志采集上报时间
- 「Field」项填写grok拆分出的
- 保存管道,自定义一个易识别的管道名称
- 进入Kibana左侧菜单栏
- 绑定管道到索引模板
- 进入
Stack Management>Index Management>Index Templates,找到匹配logstash-*的索引模板 - 编辑模板,在索引配置项中添加如下配置,替换为你刚才创建的管道名:
{ "index.default_pipeline": "你的自定义管道名称" } - 保存模板后,所有后续新写入的日志都会在入索引时自动完成
log字段解析,拆分出的结构化字段会直接存入文档
- 进入
如果你的账号有Logstash配置权限,也可以直接在Logstash的filter段添加对应grok规则做采集层解析,效果和Ingest Pipeline方案一致。
二、存量已索引数据二次结构化处理
已经写入索引的历史数据,可通过_update_by_query接口配合已创建的Ingest Pipeline做批量重处理,无需重新导入数据:
- 进入Kibana左侧菜单栏
Dev Tools控制台 - 执行如下批量更新命令,替换对应索引范围和管道名称:
POST logstash-2022.*/_update_by_query?conflicts=proceed&pipeline=你的自定义管道名称 { "query": { "bool": { "must_not": { "exists": { "field": "clientip" } } } } }
- 参数说明:
conflicts=proceed:遇到文档版本冲突时自动跳过,不中断批量任务- 查询条件通过判断是否存在grok拆分出的
clientip字段,筛选出未做过解析的文档,避免重复处理 - 如果待处理数据量超过100GB,可在请求路径后追加
slices=auto&wait_for_completion=false参数,让任务后台异步执行,无需等待控制台同步返回结果
- 等待任务执行完成后,存量日志的
log字段就会全部被拆分为独立结构化字段,可直接在Kibana中用于检索、可视化。
注意:如果操作时提示权限不足,联系Aptible平台管理员开通对应索引的管理、写入权限即可,不需要调整现有Elastic Stack部署架构。
内容的提问来源于stack exchange,提问作者jake.csc
相关产品推荐
相关产品推荐

