如何使用Power Query中的Log Parser(或其他)转换IIS日志?

时间:2016-05-19 17:44:37

标签: azure powerquery logparser excel-2016 iis-logs

Power Query / Excel 2016具有从Azure存储等位置提取数据的强大功能,甚至可以将blob文件扩展为文本数据行。但IIS日志文件并不容易解析(例如有头记录和注释)所以我想使用像Log Parser这样的其他东西进行解析并将带有iis日志的blob转换为带列的数据行我可以过滤和转动等等。我将如何进行此操作,或者是否有任何我可以使用的库已经完成了?

5 个答案:

答案 0 :(得分:2)

我实际上想到的另一个解决方案是Power Query,用于分析IIS日志:Azure Log Analytics - https://azure.microsoft.com/fr-fr/services/log-analytics/ 它功能更强大,并且具有IIS日志的本机处理功能。

答案 1 :(得分:1)

Power Query可以读取任何二进制日志格式......如果您编写代码来定义二进制格式。

M库参考http://pqreference.azurewebsites.net/PowerQueryFormulaReferenceAugust2015.pdf中有关如何使用BinaryFormat库的示例:

  

17.1示例考虑一种假设的文件格式,其中包含一个32位无符号整数,后跟该点数。每个点

     

是由两个16位有符号整数值(x和y)组成的记录。   文件中的所有整数都使用Big Endian字节顺序。在观看时   十六进制,示例文件可能如下所示:

00 00 00 02 // number of points (2)
00 03 00 04 // point (x=3, y=4)
00 05 00 06 // point (x=5, y=6)
     

可以使用二进制格式函数读取此文件格式,如   如下:

let
    fileContents = #binary({
        0x00, 0x00, 0x00, 0x02,
        0x00, 0x03, 0x00, 0x04,
        0x00, 0x05, 0x00, 0x06
    }),
    pointFormat = BinaryFormat.Record([
        x = BinaryFormat.SignedInteger16,
        y = BinaryFormat.SignedInteger16
    ]),
    fileFormat = BinaryFormat.Choice(
        BinaryFormat.UnsignedInteger32,
        (count) => BinaryFormat.List(pointFormat, count))
in
    fileFormat(fileContents) 
// {
// [x = 3, y = 4],
// [x = 5, y = 6]
// }

您可能同意使用自定义构建的库会更好。

答案 2 :(得分:1)

如果您没有使用Azure或其他付费日志分析服务,可以尝试使用PowerBI桌面仪表板进行IIS日志分析。我们可以使用LogParser将IIS日志转换为CSV,然后加载到PowerBI。可以在下面找到更多详细信息。

Power BI Desktop Dashboard for IIS Log Analysis - [Video] - Step by step instructions to prepare IIS Logs files and loading into PBI

答案 3 :(得分:0)

好的,这是您可能期望的答案:Azure数据工厂(https://azure.microsoft.com/en-us/documentation/services/data-factory/)是云中的强大ETL。您将能够以非常简单的方式将Azure日志从Azure存储转换为您自己的Azure存储表格式。然后,您可以直接从Power Query轻松访问表。

答案 4 :(得分:0)

IIS日志对Power Query来说并不是一个太大的挑战。我的方法是将IIS日志文件作为单个文本列加载(PQ往往希望自动为您分割)。将生成的Source步骤编辑为以下内容:

= Csv.Document(File.Contents("C:\inetpub\logs\LogFiles\W3SVC1\u_ex160523.log"),[Encoding=1252, QuoteStyle=QuoteStyle.None])

从那里我将删除前3个标题行,将“#Fields:”替换为无任何删除,然后按空格拆分并使用第一行作为标题。

进一步过滤以消除任何进一步的标题行,你可能就在那里。