配置 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。如果值大于1024,大多数Windows版本都会返回错误。此选项仅在支持Windows事件日志API(Microsoft Windows Vista及更高版本)的操作系统上可用。

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

event_logs.name

编辑

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

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将记录如下所示的类似警告,并将继续处理来自其他事件日志的数据。

警告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

编辑

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

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

示例

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

event_logs.tags

编辑

Beat包含在每个已发布事件的tags字段中的标签列表。标签使在Kibana中选择特定事件或在Logstash中应用条件过滤变得容易。这些标签将附加到通用配置中指定的标签列表中。

示例

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

event_logs.fields

编辑

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

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

event_logs.fields_under_root

编辑

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

event_logs.processors

编辑

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

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

event_logs.index

编辑

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

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

event_logs.keep_null

编辑

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

event_logs.no_more_events

编辑

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

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

event_logs.api

编辑

这将选择用于从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_pipelines

编辑

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

默认值为`false`。