ETW 输入
Windows 事件跟踪 是内置于 Windows 操作系统中的强大日志记录和跟踪机制。它提供了应用程序和系统行为、性能问题和运行时诊断的详细视图。跟踪事件包含一个事件标头和提供程序定义的数据,用于描述应用程序或操作的当前状态。您可以使用这些事件来调试应用程序并执行容量和性能分析。
ETW 输入可以以三种不同的方式与 ETW 交互:它可以创建一个新会话来捕获用户模式提供程序的事件,连接到现有会话以收集正在进行的事件数据,或者从预先录制的 .etl 文件中读取事件。此功能使模块能够适应不同的场景,例如实时事件监控或分析历史数据。
此输入当前支持基于清单的、MOF(经典)和 TraceLogging 提供程序,但不支持 WPP 提供程序。在此您可以找到有关可用提供程序类型的更多信息。
它已在 Filebeat 支持的 Windows 版本(从 Windows 10 和 Windows Server 2016 开始)中进行了测试。此外,控制事件跟踪会话需要管理员权限。
配置示例
按名称从提供程序读取
filebeat.inputs:
- type: etw
id: etw-dnsserver
enabled: true
provider.name: Microsoft-Windows-DNSServer
session_name: DNSServer-Analytical
trace_level: verbose
match_any_keyword: 0x8000000000000000
match_all_keyword: 0
按 GUID 从提供程序读取
filebeat.inputs:
- type: etw
id: etw-dnsserver
enabled: true
provider.guid: {EB79061A-A566-4698-9119-3ED2807060E7}
session_name: DNSServer-Analytical
trace_level: verbose
match_any_keyword: 0x8000000000000000
match_all_keyword: 0
从现有会话读取
filebeat.inputs:
- type: etw
enabled: true
id: etw-dnsserver-session
session: UAL_Usermode_Provider
从 .etl 文件读取
filebeat.inputs:
- type: etw
enabled: true
id: etw-dnsserver-session
file: "C\Windows\System32\Winevt\Logs\Logfile.etl"
上述示例是互斥的,选项 provider.name
、provider.guid
、session
和 file
不能同时存在。然而,其中一个必须存在是强制要求。
多个提供程序示例
filebeat.inputs:
- type: etw
id: etw-dnsserver
enabled: true
provider.name: Microsoft-Windows-DNSServer
session_name: DNSServer-Analytical
trace_level: verbose
match_any_keyword: 0xffffffffffffffff
match_all_keyword: 0
- type: etw
id: etw-security
enabled: true
provider.name: Microsoft-Windows-Security-Auditing
session_name: Security-Auditing
trace_level: warning
match_any_keyword: 0xfffffffffffffff
match_all_keyword: 0
etw
输入支持以下配置选项以及后面描述的常用选项。
指定用于读取 ETW 事件的 .etl 文件路径。此文件格式通常用于存储 ETW 事件日志。
标识 ETW 提供程序的 GUID。要查看可用的提供程序,请使用命令 logman query providers
。
指定 ETW 提供程序的名称。可用的提供程序可以使用命令 logman query providers
列出。
当指定提供程序时,会创建一个新会话。这控制了它将创建的新 ETW 会话的名称。如果未指定,会话将使用以 Elastic- 为前缀的提供程序 ID 命名。
根据严重性定义事件的过滤级别。有效选项包括 critical、error、warning、information 和 verbose。
一个 8 字节的位掩码,用于根据关键字匹配从特定提供程序子组件过滤事件。任何匹配的关键字都将使事件得以写入。默认值为 0xffffffffffffffff
,因此它匹配所有可用的关键字。
运行 logman query providers "<provider.name>"
命令可以列出特定提供程序的可用关键字。
与 MatchAnyKeyword 类似,此 8 字节位掩码过滤匹配所有指定关键字位的事件。默认值为 0
,以允许所有事件通过。
运行 logman query providers "<provider.name>"
命令可以列出特定提供程序的可用关键字。
指定要从中读取的现有 ETW 会话的名称。现有会话可以使用命令 logman query -ets
列出。
所有输入都支持以下配置选项。
使用 enabled
选项来启用和禁用输入。默认情况下,enabled 设置为 true。
Filebeat 在每个已发布事件的 tags
字段中包含的标签列表。标签使得在 Kibana 中选择特定事件或在 Logstash 中应用条件过滤变得容易。这些标签将被附加到通用配置中指定的标签列表。
示例
filebeat.inputs:
- type: etw
. . .
tags: ["json"]
可选字段,您可以指定这些字段以向输出添加附加信息。例如,您可以添加可用于过滤日志数据的字段。字段可以是标量值、数组、字典或它们的任何嵌套组合。默认情况下,您在此处指定的字段将在输出文档中分组到 fields
子字典下。要将自定义字段存储为顶级字段,请将 fields_under_root
选项设置为 true。如果在通用配置中声明了重复字段,则其值将被此处声明的值覆盖。
filebeat.inputs:
- type: etw
. . .
fields:
app_id: query_engine_12
如果此选项设置为 true,则自定义 fields 将作为顶级字段存储在输出文档中,而不是分组到 fields
子字典下。如果自定义字段名称与 Filebeat 添加的其他字段名称冲突,则自定义字段将覆盖其他字段。
要应用于输入数据的处理器列表。
有关如何在配置中指定处理器的信息,请参阅 Processors。
为此输入生成的事件设置的 ingest pipeline ID。
pipeline ID 也可以在 Elasticsearch 输出中配置,但此选项通常会使配置文件更简单。如果在输入和输出中都配置了 pipeline,则使用输入中的选项。
pipeline
始终会转换为小写。如果 pipeline: Foo-Bar
,则 Elasticsearch 中的 pipeline 名称需要定义为 foo-bar
。
如果此选项设置为 true,则值为 null
的字段将发布到输出文档中。默认情况下,keep_null
设置为 false
。
如果存在,此格式化字符串将覆盖此输入事件的索引(对于 elasticsearch 输出),或设置事件元数据的 raw_index
字段(对于其他输出)。此字符串只能引用代理名称、版本和事件时间戳;要访问动态字段,请使用 output.elasticsearch.index
或处理器。
示例值:"%{[agent.name]}-myindex-%{+yyyy.MM.dd}"
可能扩展为 "filebeat-myindex-2019.11.01"
。
默认情况下,所有事件都包含 host.name
。可以将此选项设置为 true
以禁用将此字段添加到所有事件。默认值为 false
。
此输入在HTTP 监控端点下公开指标。这些指标在 /inputs/
路径下公开。它们可用于观察输入的活动。
必须为输入分配唯一的 id
才能公开指标。
指标 | 描述 |
---|---|
session |
ETW 会话的名称。 |
received_events_total |
接收到的事件总数。 |
discarded_events_total |
丢弃的事件总数。 |
errors_total |
错误总数。 |
source_lag_time |
时间戳事件创建和读取之间差异的直方图。 |
arrival_period |
事件通知回调之间经过时间的直方图。 |
processing_time |
事件通知回调和发布到内部队列之间经过时间的直方图。 |
直方图指标是在前 1024 个事件上聚合的。