Win2012日志怎么发给日志服务器?核心答案是:用Windows自带的事件转发(WEF)走WinRM协议,或者用NXLog、Winlogbeat这类工具推送到统一的日志采集端,具体选哪种取决于你的日志服务器是Windows还是Linux。
很多朋友拿到一台Windows Server 2012,第一反应是“日志不就存在事件查看器里嘛,干嘛还要往外发”,等到等保测评、安全审计或者排障时候需要翻集中日志,才意识到日志分散在每台机器上是件多痛苦的事,把Win2012的日志实时送给日志服务器,不只是为了合规,更关键的是让安全人员能在同一块屏上看到所有机器的动静。
为什么Win2012日志转发要提前规划
Windows Server 2012虽然已经停止主流支持,但国内相当一部分企业的内网里,它还在跑着关键业务,这些机器往往既有域控、文件服务器,也有数据库节点,日志类型大致分三种:系统日志、安全日志、应用程序日志,安全日志里记录登录成功失败、特权调用,是审计的重点。
规划转发方案时,建议先想清楚三件事:日志服务器是什么操作系统、传输链路要不要加密、本地日志保留策略怎么定,很多人在第一步就栽了跟头以为把Win2012的事件日志直接“指向”日志服务器就行,实际上Windows Server 2012没有内置syslog转发能力,它原生支持的是Windows事件转发(WEF),走的是WinRM协议,而日志服务器如果是Linux上的Rsyslog或者Logstash,就需要额外装代理,这两种路径千万别混着理解。
Win2012日志怎么发给日志服务器:两种主流办法对比
先给出一张对比表,帮你看清楚方向再动手。
| 方案 | 传输协议 | 适用日志服务器 | 优点 | 缺点 |
|---|---|---|---|---|
| Windows事件转发(WEF) | WinRM(HTTP/SOAP) | 另一台Windows服务器 | 无需装第三方客户端,微软原生 | 配置复杂,跨平台采集困难 |
| NXLog / Snare | Syslog(UDP/TCP/TLS) | Linux或Windows日志平台 | 兼容性好,几乎所有平台都认 | 需安装代理,免费版功能受限 |
| Winlogbeat | Beats协议/Logstash | ELK、自建采集端 | 与Elastic生态无缝集成 | 需要维护Elasticsearch集群 |
行业共识认为:如果日志服务器是Windows域环境内的机器,优先用WEF,如果日志服务器是Linux或商业SIEM平台,NXLog和Snare反而是最省事的路径。
从国内中小企业的实际场景来看,很多数据中心的日志服务器其实就是一台装了Linux系统的虚拟机,跑着Rsyslog做简单汇聚,这种情况下用NXLog把Win2012的安全日志转成syslog格式推出去,几行配置就能搞定,运维成本低。
Windows Server 2012日志转发到日志服务器:WEF事件转发实操
如果你的日志服务器是一台Windows机器,想用原生的方式把Win2012日志收上来,WEF是标准做法,它分两个角色:源计算机(转发方)和收集器(日志服务器),下面这套步骤适用于同一域内或者配置了信任关系的机器。
第一步:在Win2012上启用WinRM
以管理员身份打开PowerShell,执行:
winrm quickconfig
这条命令会自动启动WinRM服务,并放行5985端口(HTTP),如果是工作组环境,还需要手动设置:
winrm set winrm/config/service/auth @{Basic="true"}
winrm set winrm/config/service @{AllowUnencrypted="true"}
注意,AllowUnencrypted设为true只建议在隔离测试环境里用,生产环境建议用HTTPS(5986端口)走证书加密。
第二步:在日志服务器上创建订阅
在收集器上打开“事件查看器”,右键“订阅”选择“创建订阅”,订阅名称随便写,Win2012-Security”,类型选“转发事件”,选择计算机时,输入Win2012的机器名,点击“选择事件”筛选你要的事件ID。
第三步:设置转发器的日志转发服务
在Win2012上,把“Windows Event Collector”服务的启动类型改成“自动”,并启动它,检查一下Windows防火墙,确保入站规则里允许“Windows 远程管理”。
这套配置做完,Win2012产生的符合条件的日志会在几秒钟内被推送到日志服务器,如果没生效,多半是WinRM服务没起来或防火墙把5985端口挡了,需要提醒的是,域环境下通常不用额外配权限,但工作组或跨域环境下,要在收集器上给来源计算机的机器账号授予“读事件日志”权限。
混合环境Win2012日志发送到日志服务器:NXLog与Winlogbeat
如果你的日志服务器是Linux,或者团队已经在用ELK,那别折腾WEF了,直接用日志采集代理更省心。
用NXLog把Win2012日志推给Rsyslog
NXLog有一个社区版,功能基本够用,在Win2012上装好NXLog后,修改配置文件 C:\Program Files\nxlog\conf\nxlog.conf,核心配置如下:
<Input in>
Module im_msvistalog
<QueryXML>
<QueryList>
<Query Id="0">
<Select Path="Security"></Select>
</Query>
</QueryList>
</QueryXML>
</Input>
<Output out>
Module om_tcp
Host 192.168.1.100
Port 514
</Output>
<Route r>
Path in -> out
</Route>
这段配置的意思是:读取安全日志的全部事件,通过TCP 514端口发给日志服务器,改完配置后用 net stop nxlog && net start nxlog 重启服务就能看到日志往服务器端跑了。
用Winlogbeat对接Elasticsearch
Winlogbeat是Elastic官方Beat家族里的Windows日志采集器,下载解压后修改 winlogbeat.yml:
winlogbeat.event_logs:
- name: Security
ignore_older: 72h
output.logstash:
hosts: ["192.168.1.200:5044"]
然后执行安装服务命令:
.\install-service-winlogbeat.ps1
Start-Service winlogbeat
Winlogbeat的好处是自动记录读取位置,重启不丢日志,维护时也方便在Kibana里直接检索。业内专家指出,在等保整改项目中,用Winlogbeat对接企业已有的日志审计平台,是近几年很常见的落地方案。
Win2012日志服务器配置完成后,常见报错怎么排查
配置过程中总有几个绕不开的坑,我挑三个最常见的来说。
订阅状态一直显示“错误”
如果订阅创建后状态为“错误”,先去收集器的事件查看器里看“Forwarded Events”日志,确认是否有事件进来,再检查源计算机的WinRM服务,多数情况下是源机器上的防火墙没有放行HTTP 5985端口,执行命令验证:
Test-NetConnection -ComputerName 日志服务器IP -Port 5985
日志转发出去后延迟很大
延迟问题通常出在订阅筛选条件上,如果筛选太宽泛,比如直接选“所有事件”,CPU会被持续占用,建议在订阅的查询里只勾选612、4624、4625、4720等关键审计事件ID,减少无意义传输。
源计算机列表里看不到Win2012
把Win2012手动输入订阅的计算机列表时,如果系统提示“找不到计算机”,先确认DNS解析是否正常,工作组环境下还要在源机器上执行:
wevtutil e Microsoft-Windows-Forwarder/Forwarding
看事件ID 105是否存在,这个事件记录着与收集器的连接状态。
日志转发前后,本地日志保留策略怎么变
很多运维担心:日志发给日志服务器之后,Win2012本地日志越来越大怎么办?两者并不冲突,转发只是把事件复制一份推出去,并不删除本地日志,建议顺手做一次日志清理策略:在Win2012上用Wevtutil设置最大日志大小和保留天数。
wevtutil sl Security /ms:1073741824 /rt:true /ab:true
这条命令把安全日志上限设置为1GB,满了之后自动覆盖旧事件,保留策略看业务需求,内网审计环境保留90天是业内较常见的做法。
Win2012日志怎么发给日志服务器的常见Q&A
很多人在实施过程中会反复问同一个问题:Win2012日志怎么发给日志服务器最稳定?下面把几个高频疑问集中说透。
事件转发和syslog转发能同时启用吗?
能,WEF和NXLog走的是不同协议,互相不干扰,有些环境下两套都跑,WEF用于微软内部审计工具读取,syslog用于对接安全运营平台,只是要注意CPU和内存占用会相应增加。
不装任何软件,日志能直接发到Linux服务器上吗?
不能,Windows Server 2012没有原生syslog客户端,想发给Linux日志服务器必须借助NXLog、Snare这类第三方工具,反过来Linux原生就能通过rsyslog发日志给Windows,这是因为Windows没有监听syslog的服务,所以这条路在Windows端也走不通。
日志服务器上收到的日志时间比实际时间晚8小时,怎么处理?
这是时区问题,NXLog采集时默认显示的是Windows本地时间,而Linux服务器通常按UTC处理,在NXLog配置文件里加一行设置时区偏移:
define TIME_ZONE +08:00
或者在上游日志服务器统一做时间标准化,建议在采集段就统一为UTC存储,展示时再转换,Winlogbeat则默认输出UTC时间,直接对接ELK不会有这个问题。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/727314.html


