【问题标题】:Query IIS logs with extra fields using LogParser使用 LogParser 查询带有额外字段的 IIS 日志
【发布时间】:2016-09-04 06:04:26
【问题描述】:

我有带有额外字段“foo”的 IIS 日志。

#Fields: foo date s-sitename ...
foo1 2009-02-15 W3SVC1 ...
foo2 2009-02-15 W3SVC1 ...

结果所有 LogParser 查询都被破坏了:

logparser -i:IISW3C  "SELECT c-ip, s-ip FROM my.log"

Statistics:
-----------
Elements processed: 0
Elements output:    0
Execution time:     0.00 seconds

是否可以将这些额外的字段告知 LogParser,以便它可以解析 IIS 文件?

【问题讨论】:

    标签: iis logparser


    【解决方案1】:

    尝试 W3C 格式 (-i:W3C)。

    如果这不起作用并且这是一次性分析,您可以创建一个脚本来删除该列。如果这是一项持续的活动,您可能需要考虑使用标准格式,或者至少将额外字段移到末尾。

    顺便说一下,LogParser 确实支持custom input formats

    【讨论】:

    • Log Parser W3C 格式与“X-Forwarded-For”标头一起用于测试负载均衡器“粘性”
    • 还要确保自定义字段存在于您正在查询的所有日志文件中。否则你仍然会得到同样的错误。即使只有少数文件没有它。
    • W3C 格式不支持用于增量日志处理的检查点,这可能会破坏交易。
    【解决方案2】:

    使用选项 -iHeaderFile 定义您自己的字段。 logparser -h 将证明额外的信息

    【讨论】:

    • 从我在文档中找到的 iHeaderFile 仅适用于 TSV 和 CSV 输入格式。
    • @bkqc :即使字段由空格而不是制表符分隔,您也可以将 TSV 解析器与 IIS 日志文件一起使用。也只需定义 iSeparatornSep 属性。由于我的 IIS 日志文件包含 14 个字段,我自己使用以下选项来解析它们: -iSeparator:space -fixedSep:OFF -headerRow:OFF -iHeaderFile:MyCustomPath -nFields:14 -lineFilter:-# -iTsFormat:yyyy-MM-dd hh:mm:ss
    【解决方案3】:

    不了解 LogParser,但如果您不成功,您可以尝试 splunk,它似乎可以轻松处理不同的日志格式。

    【讨论】:

      【解决方案4】:

      这很容易做到!

      只需在字符串周围使用 TRIM 函数。这样,您可以在日志解析器查询中键入任何您想要的字符串作为自定义额外字段。

      参考:http://logparserplus.com/Functions#function_TRIM

      例如,我在此查询中执行此操作(用于检索平均和最大时间):

      logparser -i:IISW3C -rtp:-1 -o:NAT -headers:OFF -iw:ON "SELECT TRIM('my-website-custom-extra-column-name.com') AS siteName, TRIM('foo-bar-custom-extra-column-name') AS fooBar, AVG(time-taken) As AverageTimeTaken, MAX(time-taken) As MaxTimeTaken, COUNT(*) As Hits, TO_LOWERCASE(cs-uri-stem) As Uri FROM C:\inetpub\yourwebsite.com\ex*.log TO c:\myOutputParsedLog.txt WHERE (Extract_Extension(To_Lowercase(cs-uri-stem)) IN ('aspx')) GROUP BY TO_LOWERCASE(cs-uri-stem) ORDER BY AverageTimeTaken DESC"
      

      【讨论】:

      • 我尝试使用 TRIM 但我仍然收到以下错误。是否需要设置其他任何内容才能使其正常工作? @Parse 错误:“在#Fields 指令中找到未知字段 MyCustomField 在文件“\\server\share\LogFiles\W3SVC37\ex200924_x.log”的标题中找不到“#Fields”指令。第 5 到 22178 行已被忽略”跨度>
      • @bkqc 我很抱歉:我的原始答案与这篇文章无关它只允许在结果中添加任意列!关于您的问题,如果您需要使用已经存在的额外列解析源日志文件,最好的办法是摆脱 -i:IISW3C 并使用 -i:TSV 代替。然后,您必须指定 iHeaderFilenFields 属性,以便解析引擎知道需要哪些列。这符合您的需要,因为您可以在 Header 文件中指定任何列名 :-) 在 Log Parser 附带的文档帮助中查找这些关键字。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 2015-07-20
      • 2022-12-15
      相关资源
      最近更新 更多