winlog 输入

编辑

此功能处于 Beta 阶段,可能会发生变化。其设计和代码不如正式 GA 功能成熟,按“原样”提供,不提供任何担保。Beta 功能不受正式 GA 功能支持 SLA 的约束。

使用 winlog 输入读取 Windows 事件日志。它使用 Windows API 从一个事件日志中读取数据,根据用户配置的条件过滤事件,然后将事件数据发送到配置的输出。它会监视事件日志,以便及时发送新的事件数据。事件日志的读取位置会持久保存到磁盘,以便输入在重新启动后恢复。

winlog 输入可以捕获系统上运行的任何事件日志的事件数据。例如,您可以捕获以下事件:

  • 应用程序事件
  • 硬件事件
  • 安全事件
  • 系统事件

这是一个示例配置

- type: winlog
  name: Application
  ignore_older: 72h

配置选项

编辑

batch_read_size

编辑

从 Windows API 中一次批量读取的事件日志记录的最大数量。默认批量大小为 100。大多数 Windows 版本如果该值大于 1024 则会返回错误。 {vista_and_newer}

Filebeat 启动一个 goroutine(轻量级线程)来从每个单独的事件日志中读取数据。该 goroutine 使用 Windows API 读取一批事件日志记录,将任何处理器应用于事件,将它们发布到配置的输出,并在读取其他事件日志记录之前等待来自输出的确认。

name

编辑

要监视的事件日志的名称。它必须具有 name 字段,除了使用自定义 XML 查询的那些日志。通道是从事件源传输事件到事件日志的命名事件流。大多数通道都与特定的事件发布者绑定。您可以使用 Windows Vista 或更高版本上的 PowerShell Get-WinEvent cmdlet 获取可用事件日志的列表。以下是该命令输出的示例

PS C:\> Get-WinEvent -ListLog * | Format-List -Property LogName
LogName : Application
LogName : HardwareEvents
LogName : Internet Explorer
LogName : Key Management Service
LogName : Security
LogName : System
LogName : Windows PowerShell
LogName : ForwardedEvents
LogName : Microsoft-Management-UI/Admin
LogName : Microsoft-Rdms-UI/Admin
LogName : Microsoft-Rdms-UI/Operational
LogName : Microsoft-Windows-Windows Firewall With Advanced Security/Firewall
...

如果 Get-WinEvent 不可用,则可以使用 Get-EventLog cmdlet 代替。

PS C:\Users\vagrant> Get-EventLog *

  Max(K) Retain OverflowAction        Entries Log
  ------ ------ --------------        ------- ---
  20,480      0 OverwriteAsNeeded          75 Application
  20,480      0 OverwriteAsNeeded           0 HardwareEvents
     512      7 OverwriteOlder              0 Internet Explorer
  20,480      0 OverwriteAsNeeded           0 Key Management Service
  20,480      0 OverwriteAsNeeded       1,609 Security
  20,480      0 OverwriteAsNeeded       1,184 System
  15,360      0 OverwriteAsNeeded         464 Windows PowerShell

您必须在配置文件中指定通道的完整名称。

- type: winlog
  name: Microsoft-Windows-Windows Firewall With Advanced Security/Firewall

要从存档的 .evtx 文件中读取事件,您可以将 name 指定为文件的绝对路径(不能是相对路径)。

- type: winlog
  name: 'C:\backup\sysmon-2019.08.evtx'
  no_more_events: stop

name 密钥不能与自定义 XML 查询一起使用。

事件日志的唯一标识符。使用自定义 XML 查询时,此密钥是必需的。

它用于在注册表文件中唯一标识事件日志读取器。如果多个事件日志被设置为监视相同的通道或文件,这将非常有用。如果没有提供 ID,则将使用 name 值。

此值必须唯一。

- type: winlog
  name: Application
  id: application-logs
  ignore_older: 168h

ignore_older

编辑

如果指定此选项,则输入会过滤比指定时间段更旧的事件。有效的时间单位为“ns”、“us”(或“µs”、“ms”、“s”、“m”、“h”。当您开始监视包含您想要忽略的旧记录的事件日志时,此选项非常有用。此字段是可选的。

- type: winlog
  name: Application
  ignore_older: 168h

forwarded

编辑

一个布尔标志,指示日志是否仅包含使用 Windows 事件收集器从远程主机收集的事件。对于 ForwardedEvents 日志,该值默认为 true,对于任何其他日志,该值默认为 false。 {vista_and_newer}

此设置允许 Filebeat 优化对已呈现的转发事件的读取。当该值为 true 时,Filebeat 不会尝试使用主机计算机上的消息文件呈现事件。应将 Windows 事件收集器订阅配置为使用“RenderedText”格式(这是默认设置),以确保事件与消息和描述一起分发。

event_id

编辑

事件 ID 的允许列表和阻止列表。该值是一个逗号分隔的列表。可接受的值是包含的单个事件 ID(例如 4624)、包含的事件 ID 范围(例如 4700-4800)和要排除的单个事件 ID(例如 -4735)。 {vista_and_newer}

- type: winlog
  name: Security
  event_id: 4624, 4625, 4700-4800, -4735

如果您指定了超过 22 个查询条件(事件 ID 或事件 ID 范围),则某些版本的 Windows 会阻止 Filebeat 读取事件日志,因为查询系统存在限制。如果发生这种情况,Filebeat 将记录如下所示的类似警告,并将继续处理来自其他事件日志的数据。

WARN EventLog[Application] Open() 错误。不会从此来源读取任何事件。指定的查询无效。

在某些情况下,限制可能低于 22 个条件。例如,使用范围和单个事件 ID 的混合,以及 ignore older 等其他参数,会导致限制为 21 个条件。

如果您有超过 22 个条件,则可以通过使用 drop_event[drop-event] 处理器在 Filebeat 从 Windows 收到事件后执行过滤来解决此 Windows 限制。以下所示的过滤器等效于 event_id: 903, 1024, 4624,但可以扩展到超过 22 个事件 ID。

- type: winlog
  name: Security
  processors:
    - drop_event.when.not.or:
      - equals.winlog.event_id: 903
      - equals.winlog.event_id: 1024
      - equals.winlog.event_id: 4624

language

编辑

事件将以其呈现的语言 ID。无论系统语言如何,都将强制使用该语言。完整的语言 ID 列表可以在 此处找到。默认为 0,表示使用系统语言。

- type: winlog
  name: Security
  event_id: 4624, 4625, 4700-4800, -4735
  language: 0x0409 # en-US

level

编辑

要包含的事件级别的列表。该值是级别的逗号分隔列表。 {vista_and_newer}

级别

critical, crit

1

error, err

2

warning, warn

3

information, info

0 或 4

verbose

5

- type: winlog
  name: Security
  level: critical, error, warning

provider

编辑

要包含的提供程序(源名称)列表。该值是 YAML 列表。 {vista_and_newer}

- type: winlog
  name: Application
  provider:
    - Application Error
    - Application Hang
    - Windows Error Reporting
    - EMET

您可以使用 PowerShell 获取与日志关联的提供程序列表。以下是一个示例,显示与安全日志关联的提供程序。

PS C:\> (Get-WinEvent -ListLog Security).ProviderNames
DS
LSA
SC Manager
Security
Security Account Manager
ServiceModel 4.0.0.0
Spooler
TCP/IP
VSSAudit
Microsoft-Windows-Security-Auditing
Microsoft-Windows-Eventlog

xml_query

编辑

提供自定义 XML 查询。此选项与 nameevent_idignore_olderlevelprovider 选项互斥。这些选项应直接包含在 XML 查询中。此外,必须提供 id。自定义 XML 查询提供了比 Filebeat 中更简单的查询选项更大的灵活性和高级选项。 {vista_and_newer}

以下配置将从多个通道收集 DHCP 服务器事件

- type: winlog
  id: dhcp-server-logs
  xml_query: >
    <QueryList>
      <Query Id="0" Path="DhcpAdminEvents">
        <Select Path="DhcpAdminEvents">*</Select>
        <Select Path="Microsoft-Windows-Dhcp-Server/FilterNotifications">*</Select>
        <Select Path="Microsoft-Windows-Dhcp-Server/Operational">*</Select>
      </Query>
    </QueryList>

也可以使用 Windows 事件查看器中的自定义视图创建 XML 查询。可以使用图形界面创建查询,并可以从 XML 选项卡检索相应的 XML。

include_xml

编辑

控制是否在 Filebeat 发送的数据中包含事件的原始 XML 表示的布尔选项。默认为 false。 {vista_and_newer}

事件的 XML 表示对于故障排除很有用。可以将 Filebeat 报告的字段中的数据与 XML 中的数据进行比较,以诊断问题。

示例

- type: winlog
  name: Microsoft-Windows-Windows Defender/Operational
  include_xml: true

tags

编辑

Beat 在每个发布事件的 tags 字段中包含的标签列表。标签可以轻松地在 Kibana 中选择特定事件或在 Logstash 中应用条件过滤。这些标签将附加到常规配置中指定的标签列表中。

示例

- type: winlog
  name: CustomLog
  tags: ["web"]

fields

编辑

您可以指定的可选字段,以向输出添加其他信息。例如,您可以添加可用于过滤事件数据的字段。字段可以是标量值、数组、字典或这些的任何嵌套组合。默认情况下,您在此处指定的字段将在输出文档中的 fields 子字典下分组。要将自定义字段存储为顶级字段,请将 fields_under_root 选项设置为 true。如果在常规配置中声明了重复字段,则其值将被此处声明的值覆盖。

- type: winlog
  name: CustomLog
  fields:
    customer_id: 51415432

fields_under_root

编辑

如果将此选项设置为 true,则自定义 fields 将作为输出文档中的顶级字段存储,而不是在 fields 子字典下分组。如果自定义字段名称与 Filebeat 添加的其他字段名称冲突,则自定义字段会覆盖其他字段。

processors

编辑

应用于事件日志生成的数据的处理器列表。

有关在配置中指定处理器的信息,请参见 处理器

index

编辑

如果存在,此格式化字符串将覆盖此事件日志中事件的索引(对于 Elasticsearch 输出),或设置事件元数据的 raw_index 字段(对于其他输出)。此字符串只能引用代理名称和版本以及事件时间戳;要访问动态字段,请使用 output.elasticsearch.index 或处理器。

示例值:"%{[agent.name]}-myindex-%{+yyyy.MM.dd}" 可能会扩展为 "filebeat-myindex-2019.12.13"

keep_null

编辑

如果将此选项设置为 true,则输出文档中将发布值为 null 的字段。默认情况下,keep_null 设置为 false

no_more_events

编辑

当事件日志读取器从 Windows 接收信号指示没有更多事件可读时,应采取的操作。它可以 wait 以等待写入更多事件(默认行为),也可以 stop。当所有单个事件日志读取器都停止时,Filebeat 整体进程将停止。 {vista_and_newer}

no_more_events 设置为 stop 在读取存档事件日志文件时很有用,在这种情况下,您希望读取整个文件然后退出。

这将选择用于从 Windows API 读取事件的事件日志读取器实现。仅在测试实验性功能时才应设置此选项。当值设置为 wineventlog-experimental 时,Filebeat 将使用 实验性 实现替换默认事件日志读取器。我们正在评估此实现,以查看它是否可以提高性能并降低 CPU 使用率。 {vista_and_newer}

- type: winlog
  name: ForwardedEvents
  api: wineventlog-experimental

事件有一些显著差异

  • 以前在 winlog.user_data 下包含数据的事件现在将在 winlog.event_data 下包含数据。
  • 设置 include_xml: true 没有效果。