1

Power Query / Excel 2016 具有强大的能力,可以从 Azure 存储等位置提取数据,甚至可以将 blob 文件扩展为文本数据行。但是 IIS 日志文件解析起来并不简单(例如,有标题记录和注释),所以我想使用 Log Parser 之类的其他东西来进行解析并将我的带有 iis 日志的 blob 转换为具有我可以过滤的列的数据行和等等。我将如何去做,或者有没有我可以使用的库已经完成了?

4

5 回答 5

2

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

于 2016-05-19T20:23:09.163 回答
1

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

用于 IIS 日志分析的 Power BI Desktop 仪表板 - [视频] - 准备 IIS 日志文件并加载到 PBI 的分步说明

于 2019-10-16T22:27:21.043 回答
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]
// }

您可能同意使用定制的库会更好。

于 2016-05-21T02:43:46.930 回答
0

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

于 2016-05-19T22:22:45.020 回答
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:”替换为什么都没有删除它,然后用空格分割并使用第一行作为标题。

多一点过滤以摆脱任何进一步的标题行,您可能就在那里。

于 2016-05-23T04:30:47.937 回答