配置 Winlogbeat
编辑配置 Winlogbeat
编辑winlogbeat
部分的 winlogbeat.yml
配置文件指定了所有特定于 Winlogbeat 的选项。最重要的是,它包含要监视的事件日志列表。
这是一个示例配置
winlogbeat.event_logs: - name: Application ignore_older: 72h - name: Security - name: System
配置选项
编辑您可以在 winlogbeat.yml
配置文件的 winlogbeat
部分中指定以下选项
registry_file
编辑Winlogbeat 在其中存储用于在重启后恢复监控的信息的文件名。默认情况下,该文件以 .winlogbeat.yml
的形式存储在 Beat 启动的目录中。当您以 Windows 服务形式运行该进程时,建议您将该值设置为 C:/ProgramData/winlogbeat/.winlogbeat.yml
。
winlogbeat.registry_file: C:/ProgramData/winlogbeat/.winlogbeat.yml
路径中的正斜杠 (/) 会自动更改为反斜杠 (\),以实现 Windows 兼容性。您可以使用正斜杠或反斜杠。正斜杠在 YAML 中更容易使用,因为无需转义它们。
registry_flush
编辑控制何时将注册表条目写入磁盘(刷新)的超时值。当未写入的更新超过此值时,会触发写入磁盘。当刷新设置为 0 秒时,注册表会在每批事件成功发布后写入磁盘。
默认值为 5 秒。
有效的时间单位为 ns
、us
、ms
、s
、m
、h
。
winlogbeat.registry_flush: 5s
shutdown_timeout
编辑关闭时等待所有事件发布的时间量。默认情况下,没有关闭超时,因此 Winlogbeat 将在不等待的情况下停止。当您重新启动它时,它将从每个事件日志中最后成功发布的事件恢复。
在某些用例中,您希望在退出之前等待发布队列清空,这时您会使用此选项。
有效的时间单位为 ns
、us
、ms
、s
、m
、h
。
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'
名称键不能与自定义 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)以及排除的事件 ID 范围(例如 -4701-4710)。此选项仅在支持 Windows 事件日志 API 的操作系统(Microsoft Windows Vista 及更高版本)上可用。
winlogbeat.event_logs: - name: Security event_id: 4624, 4625, 4700-4800, -4735, -4701-4710
如果您指定超过 22 个查询条件(事件 ID 或事件 ID 范围),某些版本的 Windows 会因查询系统的限制而阻止 Winlogbeat 读取事件日志。如果发生这种情况,Winlogbeat 将记录如下所示的类似警告,并且它将继续处理来自其他事件日志的数据。
WARN EventLog[Application] Open() 错误。将不会从此源读取任何事件。指定的查询无效。
在某些情况下,限制可能低于 22 个条件。例如,混合使用范围和单个事件 ID,以及其他参数(例如 ignore older
),会导致限制为 21 个条件。
如果您有超过 22 个条件,您可以使用 drop_event[drop-event] 处理器来解决此 Windows 限制,以便在 Winlogbeat 从 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 及更高版本)上可用。
级别 | 值 |
---|---|
严重,crit |
1 |
错误,err |
2 |
警告,warn |
3 |
信息,info |
0 或 4 |
详细 |
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 查询。此选项与 name
、event_id
、ignore_older
、level
和 provider
选项互斥。这些选项应直接包含在 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
子字典下。如果自定义字段名称与 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
。