配置 Winlogbeat编辑

winlogbeat.yml 配置文件中的 winlogbeat 部分指定了所有特定于 Winlogbeat 的选项。最重要的是,它包含要监视的事件日志列表。

以下是一个配置示例

winlogbeat.event_logs:
  - name: Application
    ignore_older: 72h
  - name: Security
  - name: System

配置选项编辑

您可以在 winlogbeat.yml 配置文件的 winlogbeat 部分中指定以下选项

registry_file编辑

Winlogbeat 用于在重新启动后恢复监视的信息存储的文件名。默认情况下,该文件存储在 Beat 启动目录中的 .winlogbeat.yml 中。当您以 Windows 服务的形式运行该进程时,建议将该值设置为 C:/ProgramData/winlogbeat/.winlogbeat.yml

winlogbeat.registry_file: C:/ProgramData/winlogbeat/.winlogbeat.yml

路径中的正斜杠 (/) 将自动更改为反斜杠 (\) 以实现 Windows 兼容性。您可以使用正斜杠或反斜杠。正斜杠在 YAML 中更容易使用,因为不需要对其进行转义。

registry_flush编辑

控制何时将注册表项写入磁盘(刷新)的超时值。当未写入的更新超过此值时,将触发写入磁盘操作。当 flush 设置为 0s 时,将在每批事件成功发布后将注册表写入磁盘。

默认值为 5s。

有效的时间单位是 nsusmssmh

winlogbeat.registry_flush: 5s

shutdown_timeout编辑

在关闭时等待所有事件发布的时间。默认情况下没有关闭超时,因此 Winlogbeat 会在不等待的情况下停止。当您重新启动它时,它将从每个事件日志中最后成功发布的事件恢复。

在某些情况下,您确实希望在退出之前等待发布队列清空,此时您将使用此选项。

有效的时间单位是 nsusmssmh

winlogbeat.shutdown_timeout: 30s

event_logs编辑

指定要监视哪些事件日志的条目列表(在 YAML 中称为字典)。列表中的每个条目定义一个要监视的事件日志以及要与该事件日志关联的任何信息(过滤器、标签等)。

winlogbeat.event_logs:
  - name: Application

event_logs.batch_read_size编辑

从 Windows API 中一次读取的事件日志记录的最大数量。默认批次大小为 100。大多数 Windows 版本在值大于 1024 时会返回错误。此选项仅在支持 Windows 事件日志 API 的操作系统(Microsoft Windows Vista 及更高版本)上可用。

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

event_logs.name编辑

要监视的事件日志的名称。event_logs 下的每个字典都必须具有一个 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

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

winlogbeat.event_logs:
  - name: Microsoft-Windows-Windows Firewall With Advanced Security/Firewall

要从存档的 .evtx 文件读取事件,您可以将 name 指定为该文件的绝对路径(不能是相对路径)。在 常见问题解答 中有一个完整的示例,说明如何从 .evtx 文件读取数据。

winlogbeat.event_logs:
  - name: 'C:\backup\sysmon-2019.08.evtx'

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

event_logs.id编辑

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

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

此值必须是唯一的。

winlogbeat.event_logs:
  - name: Application
    id: application-logs
    ignore_older: 168h

event_logs.ignore_older编辑

如果指定了此选项,Winlogbeat 将过滤掉比指定时间更早的事件。有效的时间单位是 "ns"、"us"(或 "µs")、"ms"、"s"、"m"、"h"。当您开始监视包含要忽略的较旧记录的事件日志时,此选项非常有用。此字段是可选的。

winlogbeat.event_logs:
  - name: Application
    ignore_older: 168h

event_logs.forwarded编辑

一个布尔标志,指示日志仅包含使用 Windows 事件收集器从远程主机收集的事件。对于 ForwardedEvents 日志,该值默认为 true,对于任何其他日志,该值默认为 false。此选项仅在支持 Windows 事件日志 API 的操作系统(Microsoft Windows Vista 及更高版本)上可用。

此设置允许 Winlogbeat 优化对已经渲染的转发事件的读取。当该值设为 true 时,Winlogbeat 不会尝试使用主机计算机的消息文件渲染事件。Windows 事件收集器订阅应配置为使用 "RenderedText" 格式(这是默认值),以确保事件是使用消息和描述进行分发的。

event_logs.event_id编辑

事件 ID 的白名单和黑名单。该值是一个逗号分隔的列表。可接受的值是单个要包含的事件 ID(例如 4624)、要包含的事件 ID 范围(例如 4700-4800)以及单个要排除的事件 ID(例如 -4735)。此选项仅在支持 Windows 事件日志 API 的操作系统(Microsoft Windows Vista 及更高版本)上可用。

winlogbeat.event_logs:
  - name: Security
    event_id: 4624, 4625, 4700-4800, -4735

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

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

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

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

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

event_logs.language编辑

将以其渲染事件的语言 ID。无论系统语言是什么,语言都将被强制使用。可以在 此处找到语言 ID 的完整列表。它默认为 0,表示使用系统语言。

winlogbeat.event_logs:
  - name: Security
    event_id: 4624, 4625, 4700-4800, -4735
    language: 0x0409 # en-US

event_logs.level编辑

要包含的事件级别的列表。该值是一个逗号分隔的级别列表。此选项仅在支持 Windows 事件日志 API 的操作系统(Microsoft Windows Vista 及更高版本)上可用。

级别

critical, crit

1

error, err

2

warning, warn

3

information, info

0 或 4

verbose

5

winlogbeat.event_logs:
  - name: Security
    level: critical, error, warning

event_logs.provider编辑

要包含的提供者(源名称)列表。该值是一个 YAML 列表。此选项仅在支持 Windows 事件日志 API 的操作系统(Microsoft Windows Vista 及更高版本)上可用。

winlogbeat.event_logs:
  - 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

event_logs.xml_query编辑

提供一个自定义 XML 查询。此选项与 nameevent_idignore_olderlevelprovider 选项互斥。这些选项应直接包含在 XML 查询中。此外,必须提供 id。自定义 XML 查询提供了比 Winlogbeat 中的更简单的查询选项更多的灵活性以及高级选项。此选项仅在支持 Windows 事件日志 API 的操作系统(Microsoft Windows Vista 及更高版本)上可用。

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

winlogbeat.event_logs:
  - 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。

event_logs.include_xml编辑

一个布尔选项,控制是否在 Winlogbeat 发送的数据中包含事件的原始 XML 表示。默认值为 false。此选项仅在支持 Windows 事件日志 API 的操作系统(Microsoft Windows Vista 及更高版本)上可用。

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

示例

winlogbeat.event_logs:
  - name: Microsoft-Windows-Windows Defender/Operational
    include_xml: true

event_logs.tagsedit

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

示例

winlogbeat.event_logs:
  - name: CustomLog
    tags: ["web"]

event_logs.fieldsedit

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

winlogbeat.event_logs:
  - name: CustomLog
    fields:
      customer_id: 51415432

event_logs.fields_under_rootedit

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

event_logs.processorsedit

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

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

event_logs.indexedit

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

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

event_logs.keep_nulledit

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

event_logs.no_more_eventsedit

当事件日志读取器收到来自 Windows 的信号时,它应该采取的操作,表明没有更多事件要读取。它可以 wait 以便写入更多事件(默认行为),也可以 stop。当所有单个事件日志读取器都停止时,整个 Winlogbeat 进程将停止。此选项仅在支持 Windows 事件日志 API 的操作系统(Microsoft Windows Vista 及更高版本)上可用。

no_more_events 设置为 stop 在从存档的事件日志文件读取时很有用,在这些文件中您希望读取整个文件然后退出。在 FAQ 中有一个关于如何从 .evtx 文件读取的完整示例。

event_logs.apiedit

这将选择用于从 Windows API 读取事件的事件日志读取器实现。您只应在测试实验性功能时设置此选项。当值为 wineventlog-experimental 时,Winlogbeat 将使用 实验性 实现替换默认的事件日志读取器。我们正在评估此实现,以查看它是否可以提高性能并降低 CPU 使用率。此选项仅在支持 Windows 事件日志 API 的操作系统(Microsoft Windows Vista 及更高版本)上可用。

winlogbeat.event_logs:
  - name: ForwardedEvents
    api: wineventlog-experimental

事件之间存在一些显着差异

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

overwrite_pipelinesedit

默认情况下,如果已经存在具有相同 ID 的管道,则不会更新 Ingest 管道。如果启用此选项,Winlogbeat 将在每次建立新的 Elasticsearch 连接时覆盖管道。

默认值为 false