news 2026/9/22 18:38:26

在 Logstash 中使用 Winlogbeat 模块:加载并接入 Ingest Pipeline 解析 Windows 日志

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 Logstash 中使用 Winlogbeat 模块:加载并接入 Ingest Pipeline 解析 Windows 日志
  • 数据工程
  • 后端

【免费下载链接】logstash

Logstash - transport and process your logs, events, or other data

项目地址:https://gitcode.com/gh_mirrors/lo/logstash
点击查看免费下载

Logstash 与 Winlogbeat 模块的集成并不需要复杂的 Logstash 过滤器重写:Winlogbeat 自带的每个模块都内置了完整的解析逻辑(ingest node pipelines、Elasticsearch 模板、输入配置与 Kibana 仪表盘),你只需要把 pipeline 加载进 Elasticsearch,再让 Logstash 的 elasticsearch 输出按事件元数据%{[@metadata][pipeline]}动态选择对应 pipeline 即可。读完本文,你将掌握从winlogbeat setup --pipelines到 Logstash 管线配置的完整接入流程,并能处理数据流(data streams)与 Kafka 中间链路等实际场景。

Winlogbeat 模块与 fileset 结构

Winlogbeat 随发行版预置了一批模块(modules),例如 security、sysmon、powershell 等,它们封装了从各类 Windows 日志提供方采集、解析、丰富和可视化数据所需的全部配置。每个 Winlogbeat 模块由一个或多个 fileset 组成,而每个 fileset 包含:

  • ingest node pipelines:在 Elasticsearch 侧完成日志解析与字段丰富;
  • Elasticsearch 模板(index templates):定义索引映射;
  • Winlogbeat 输入配置:指定采集的 Windows 事件日志通道(如 Security、System);
  • Kibana 仪表盘:提供开箱即用的可视化。

这种"模块即配置包"的设计意味着:解析逻辑默认由 Elastic Stack 的 ingest node 承担,而不是在 Logstash 中通过 grok 过滤器手工实现。你可以把 Winlogbeat 模块与 Logstash 结合使用,但需要额外的几步设置,最简单的方式就是使用 Winlogbeat 提供的 ingest pipelines 完成解析

两种解析路径:ingest pipeline 还是 Logstash 侧解析

把 Winlogbeat(或 Filebeat)模块数据接入 Logstash 时,存在两条可行的解析路径:

  1. 使用 ingest pipelines(推荐,本文主题):在 Elasticsearch 侧加载模块自带的 ingest pipeline,Logstash 只负责传输,不做 grok/date 等解析。Logstash 配置极其轻量,且字段结构与官方模块保持一致。
  2. Logstash 侧自行解析:跳过 pipeline 加载步骤,在 Logstash 配置中用 grok、date、geoip 等过滤器完成等价解析。这种方式不需要 ingest node,但需要手工维护解析规则。

仓库中 docs/static/filebeat_modules/system/pipeline.conf 与 docs/static/filebeat_modules/nginx/pipeline.conf 就是后一种路径的参考实现:它们用 grok 匹配 sshd/sudo/useradd 或 nginx access/error 日志,用 date 过滤纠正时间戳,用 geoip 丰富 IP 信息,并输出到elasticsearch。作为对比,如果采用 ingest pipeline 方案,这些解析工作全部下沉到 Elasticsearch 的 ingest node,Logstash 管线只需下面介绍的两段式配置。

第一步:把 ingest pipelines 加载进 Elasticsearch

在安装了 Winlogbeat 的系统上,运行带--pipelines选项的setup命令,为指定模块加载 ingest pipelines。例如,以下命令加载 security 与 sysmon 两个模块的 ingest pipelines:

winlogbeat setup --pipelines --modules security,sysmon

这一步必须能连上 Elasticsearch,因为 Winlogbeat 需要把 ingest pipelines 真正写入 Elasticsearch。如果你的 Winlogbeat 配置了其他输出(比如直接输出到 Logstash),可以临时禁用当前 output、临时启用 elasticsearch output,执行完 setup 命令后再恢复原配置。

补充说明:setup 加载的 pipelines 会以winlogbeat-<module>之类的命名注册到 Elasticsearch 的_ingest/pipelineAPI 中;后续 Winlogbeat 采集事件时,会在事件的[@metadata][pipeline]字段里写入应当使用的 pipeline 名(如winlogbeat-security),Logstash 正是依赖这个元数据做动态路由。

第二步:配置 Logstash 按元数据选择 pipeline

在安装了 Logstash 的系统上,创建一个 Logstash pipeline 配置:从某个 Logstash 输入(例如 beats 或 Kafka)读取数据,发送到 elasticsearch 输出;在 elasticsearch 输出中把pipeline选项设为%{[@metadata][pipeline]},即可使用此前加载的 ingest pipelines。

下面是一个从 Beats 输入读取数据、按 Winlogbeat 模块 ingest pipelines 解析的完整示例:

input { beats { port => 5044 } } output { if [@metadata][pipeline] { elasticsearch { hosts => "https://061ab24010a2482e9d64729fdb0fd93a.us-east-1.aws.found.io:9243" manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}" <1> action => "create" <2> pipeline => "%{[@metadata][pipeline]}" <3> user => "elastic" password => "secret" } } else { elasticsearch { hosts => "https://061ab24010a2482e9d64729fdb0fd93a.us-east-1.aws.found.io:9243" manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}" <1> action => "create" user => "elastic" password => "secret" } } }
  • <1> 如果你在配置中禁用了数据流(data streams),请把index设为%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}。数据流默认启用。
  • <2> 如果禁用了数据流,可以移除该设置,或按需改为其他值。
  • <3> 该设置让 Logstash 根据事件中携带的元数据自动选择正确的 ingest pipeline。

关键点拆解:

  • pipeline => "%{[@metadata][pipeline]}":这是整套方案的核心。Winlogbeat 模块采集时会在元数据中标记应使用的 ingest pipeline(如 security 模块对应winlogbeat-security),Logstash 在 elasticsearch 输出时把这个字段值作为 pipeline 名传给 Elasticsearch 的_ingest执行。
  • manage_template => false:索引模板由 Winlogbeat setup 步骤负责加载,Logstash 不应再覆盖管理模板,避免与模块自带的模板冲突。
  • if [@metadata][pipeline]条件分支:对未携带 pipeline 元数据的事件(如自定义输入),走不带pipeline设置的输出分支,防止向 Elasticsearch 传递空 pipeline 名。

变体:中间加一层 Kafka

原文档明确指出输入可以是 beats 或 Kafka 等。当 Winlogbeat 与 Logstash 之间隔着 Kafka 时,配置方式同理,只是把输入换成 Kafka input。仓库中 docs/reference/use-filebeat-modules-kafka.md 给出了 Filebeat 场景的完整示例,Winlogbeat 可完全照搬:

input { kafka { bootstrap_servers => "myhost:9092" topics => ["filebeat"] codec => json } } output { if [@metadata][pipeline] { elasticsearch { hosts => "https://myEShost:9200" manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" pipeline => "%{[@metadata][pipeline]}" user => "elastic" password => "secret" } } else { elasticsearch { hosts => "https://myEShost:9200" manage_template => false index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" user => "elastic" password => "secret" } } }

Kafka 链路下,Winlogbeat 侧需要把输出从 elasticsearch 切换为 Kafka output(在winlogbeat.yml中注释掉 elasticsearch output、启用 Kafka output,topic 固定为与 Logstash Kafka input 的topics一致),并确保 JSON codec 输出以便 Logstash 侧还原字段。Logstash 侧启动方式不变:

bin/logstash -f mypipeline.conf

数据写入 Elasticsearch 后,可在 Kibana 中打开 Winlogbeat 模块对应的仪表盘查看 Windows 安全事件、Sysmon 事件等可视化结果。

相关文档与仓库依据

  • 本文主题文档:docs/reference/working-with-winlogbeat-modules.md
  • 通用方案说明(Filebeat 版):docs/reference/use-ingest-pipelines.md、docs/reference/working-with-filebeat-modules.md
  • Kafka 中间链路完整示例:docs/reference/use-filebeat-modules-kafka.md
  • Logstash 侧自行解析的对照实现:docs/static/filebeat_modules/system/pipeline.conf、docs/static/filebeat_modules/nginx/pipeline.conf

小结

把 Winlogbeat 模块接入 Logstash 的本质是职责分工:Winlogbeat 负责采集并在元数据中标注 pipeline,Elasticsearch ingest node 负责解析,Logstash 只做动态路由与写入。只要完成"setup 加载 pipelines + elasticsearch 输出配置pipeline => "%{[@metadata][pipeline]}"+manage_template => false"这三件事,就能用最少的 Logstash 配置获得与官方模块完全一致的字段结构和可视化体验。

  • 数据工程
  • 后端

【免费下载链接】logstash

Logstash - transport and process your logs, events, or other data

项目地址:https://gitcode.com/gh_mirrors/lo/logstash
点击查看免费下载

相关推荐

上一篇:LizzieYzy终极指南:免费开源围棋AI分析工具如何提升你的棋力300%
下一篇:Zotero茉莉花插件终极指南:3步快速搞定中文文献元数据管理

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/22 18:36:10

WinSW 贡献指南:环境准备、源码构建与测试验证全流程

WinSW 贡献指南&#xff1a;环境准备、源码构建与测试验证全流程 【免费下载链接】winsw A wrapper executable that can run any executable as a Windows service, in a permissive license. 项目地址: https://gitcode.com/gh_mirrors/wi/winsw WinSW&#xff08;Win…

作者头像 李华
网站建设 2026/9/22 12:42:31

RK3588上FFmpeg+MPP实现H.265转H.264硬件加速

1. 为什么在RK3588上做视频转码绕不开MPP先聊一个很多人踩过的坑&#xff1a;拿到RK3588开发板&#xff0c;装好Ubuntu&#xff0c;兴致勃勃跑了一条常见的FFmpeg命令想把H.265视频转成H.264&#xff0c;结果发现CPU占用直接拉满&#xff0c;4K视频转码速度惨不忍睹&#xff0c…

作者头像 李华
网站建设 2026/9/22 12:32:11

缓存命中账不平?Base URL 填 TaoToken 通道再核 Output Token

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/22 11:21:54

cgroup v2实战指南:runc如何精细管控容器CPU、内存与PID资源

cgroup v2实战指南&#xff1a;runc如何精细管控容器CPU、内存与PID资源 【免费下载链接】runc CLI tool for spawning and running containers according to the OCI specification 项目地址: https://gitcode.com/gh_mirrors/ru/runc runc 是依据 OCI 规范启动和运行容…

作者头像 李华