将ETW日志转发至Splunk接收器的最简方案及相关问题咨询
解决Splunk UF转发Windows内核级ETL事件的可行方案
一、排查现有ETW插件的问题
- TA_ETW:确认UF上
local/inputs.conf中[etw://xxx]配置已开启(disabled = 0),指定的ETW会话名称与logman创建的一致,且UF进程拥有管理员权限(内核级ETW会话需要高权限)。同时检查目标索引在接收器端是否存在,数据路由规则是否正确。 - Splunk-ETW:先手动运行插件附带的PowerShell采集脚本,确认能输出合法的JSON事件。再检查UF的
inputs.conf中脚本路径是否正确(如[script://.\bin\powershell.exe -ExecutionPolicy Bypass -File .\bin\ETWCollector.ps1]),并确保UF的PowerShell执行策略允许运行未签名脚本。
二、无需开发的替代方案
- 监控转换后的JSON/XML文件:既然已能将ETL转成标准格式,直接在UF的
inputs.conf中添加[monitor://C:\your\converted\logs\*.json],指定自定义sourcetype=kernel_etl,并在props.conf中配置对应格式解析规则。只需保证logman定期生成并转换ETL到该目录即可。 - ETW事件转Windows事件日志:修改logman命令,将ETW会话输出直接写入Windows事件日志,而非ETL文件。例如:
logman create trace KernelTrace -ow -rt -p Microsoft-Windows-Kernel-Process -o "C:\Windows\System32\winevt\Logs\KernelEvents.evtx" -ets。之后用UF的[WinEventLog://...]配置直接监控该事件日志,无需处理ETL文件。
三、logman相关C#开发的难度
logman本身是命令行工具,C#中更高效的方式是直接调用.NET的System.Diagnostics.Tracing命名空间或Windows原生ETW API:
- 基础采集:用
EventListener类监听指定内核ETW提供者,几行代码就能实现事件捕获,难度极低; - 高级控制:若需自定义会话、过滤特定事件,需调用
StartTrace等原生API,这部分需要熟悉ETW会话机制,1-2天即可完成基础采集程序,再通过Splunk HEC(HTTP事件收集器)发送事件,比开发Splunk插件更快捷。
四、快速验证步骤
- 测试Splunk HEC可用性:用curl发送测试JSON到HEC端点,确认接收器能接收;
- 用PowerShell脚本批量发送转换后的JSON事件到HEC,验证数据能正常入库;
- 若验证通过,将脚本配置为UF的scripted input,定期执行采集。
内容的提问来源于stack exchange,提问作者Aka
相关产品推荐
相关产品推荐

