Power Query / Excel 2016 具有强大的能力,可以从 Azure 存储等位置提取数据,甚至可以将 blob 文件扩展为文本数据行。但是 IIS 日志文件解析起来并不简单(例如,有标题记录和注释),所以我想使用 Log Parser 之类的其他东西来进行解析并将我的带有 iis 日志的 blob 转换为具有我可以过滤的列的数据行和等等。我将如何去做,或者有没有我可以使用的库已经完成了?
5 回答
我实际上想到了另一种解决方案,而不是 Power Query 来分析 IIS 日志:Azure Log Analytics - https://azure.microsoft.com/fr-fr/services/log-analytics/ 它更强大,并且它具有对 IIS 的本机处理日志。
如果您没有 Azure 或其他付费日志分析服务,您可以尝试使用 PowerBI 桌面仪表板进行 IIS 日志分析。我们可以使用 LogParser 将 IIS 日志转换为 CSV,然后加载到 PowerBI。更多细节可以在下面找到。
用于 IIS 日志分析的 Power BI Desktop 仪表板 - [视频] - 准备 IIS 日志文件并加载到 PBI 的分步说明
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] // }
您可能同意使用定制的库会更好。
好的,这就是您可能期望的答案:Azure 数据工厂 ( https://azure.microsoft.com/en-us/documentation/services/data-factory/ ) 是云中的强大 ETL。您将能够以一种非常简单的方式将您的 IIS 日志从 Azure 存储转换为您自己在 Azure 存储表中的格式。然后,您可以直接从 Power Query 轻松访问这些表。
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:”替换为什么都没有删除它,然后用空格分割并使用第一行作为标题。
多一点过滤以摆脱任何进一步的标题行,您可能就在那里。