You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求nxLog-ce配置中解析IIS服务器日志的正确正则表达式

IIS日志解析与nxLog-ce配置修复

问题概述

在Windows 11环境下,使用nxLog-ce读取IIS日志并发送至远程rsyslog服务器时,出现以下问题:

  • 初始正则匹配失败,导致rsyslog接收的日志中无Method、UriStem等自定义字段
  • 更换正则后,rsyslog能识别字段,但所有字段值均为null

问题原因

  1. 初始正则缺陷:使用[^ ]+匹配所有字段,但IIS日志中的UserAgent字段包含转义空格(+),[^ ]+会在第一个实际空格处停止匹配,导致整个正则表达式匹配失败,if条件不生效,无法生成自定义字段。
  2. 第二次正则缺陷:未正确设置捕获组,虽然正则能匹配日志行,但没有捕获到对应字段的值,因此映射后字段为null。

正确配置方案

以下是适配IIS W3C日志格式的nxLog-ce Input配置,包含正确的正则表达式和字段映射:

#sending iis server logs
<Input iis>
     Module      im_file
     File        "C:\inetpub\logs\LogFiles\W3SVC1\u_ex*.log"  # 通配符匹配所有日期的日志文件
     SavePos     True  # 记录读取位置,避免重复读取
     InputType   LineBased
     ReadFromLast False
     <Exec>
        # 匹配IIS标准W3C日志字段,针对UserAgent的特殊格式做适配
        if $raw_event =~ /^(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (\S+) (.+?) (\S+) (\S+) (\S+) (\S+) (\S+)/ {
            $EventTime = parsedate($1);       # 转换为nxLog标准时间字段
            $ClientIP = $2;                   # 客户端IP
            $Method = $3;                     # 请求方法(GET/POST等)
            $UriStem = $4;                    # 请求URI路径
            $UriQuery = $5;                   # 查询字符串
            $ServerPort = $6;                 # 服务器端口
            $UserName = $7;                   # 用户名
            $ClientIP2 = $8;                  # 客户端IP(备用字段)
            $UserAgent = $9;                  # 用户代理(适配转义空格格式)
            $Referer = $10;                   # 引用页
            $Status = $11;                    # HTTP状态码
            $SubStatus = $12;                 # HTTP子状态码
            $Win32Status = $13;               # Win32状态码
            $TimeTaken = $14;                 # 请求响应时间
            delete($raw_event);               # 移除原始事件,减少日志体积
        }
     </Exec>
</Input>

关键说明

  • 正则适配:使用(.+?)匹配UserAgent字段,该模式会匹配到下一个空格分隔的字段(即Referer前的-),兼容包含+转义空格的UserAgent内容。
  • 字段命名:将捕获组映射为语义化的字段名,便于rsyslog端识别和处理。
  • 日志文件匹配:用u_ex*.log通配符替代单个日期的日志文件,自动读取所有新生成的IIS日志。
  • 读取优化:设置SavePos True,nxLog会记录已读取的日志位置,避免服务重启后重复发送历史日志。

额外注意事项

  • 确认IIS日志的字段顺序与示例一致,若IIS配置了不同的日志字段,需对应调整正则的捕获组顺序。
  • 可通过nxlog -v命令启动服务,查看调试日志,验证正则匹配是否正常。
  • 确保nxLog服务账号拥有IIS日志目录的读取权限,否则会出现日志读取失败的情况。
  • rsyslog端需配置JSON解析模板,才能正确提取nxLog发送的自定义字段。

内容的提问来源于stack exchange,提问作者Ankur Gangwar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 04:49:57