Azure 如何在Power Query中使用日志解析器(或其他)转换IIS日志?

Azure 如何在Power Query中使用日志解析器(或其他)转换IIS日志?,azure,powerquery,logparser,excel-2016,iis-logs,Azure,Powerquery,Logparser,Excel 2016,Iis Logs,Power Query/Excel 2016具有从Azure存储等位置提取数据的强大能力,甚至可以将blob文件扩展为文本数据行。但是IIS日志文件的解析并不简单(例如,有头记录和注释),因此我想使用其他类似于日志解析器的工具来进行解析,并将带有IIS日志的blob转换为带有列的数据行,这些列我可以进行筛选和透视等。我将如何进行此操作,或者是否有任何库可以使用 我实际上想到了另一种解决方案,而不是Power Query来分析IIS日志:Azure日志分析- 它功能更强大,并且具有针对IIS日志的

Power Query/Excel 2016具有从Azure存储等位置提取数据的强大能力,甚至可以将blob文件扩展为文本数据行。但是IIS日志文件的解析并不简单(例如,有头记录和注释),因此我想使用其他类似于日志解析器的工具来进行解析,并将带有IIS日志的blob转换为带有列的数据行,这些列我可以进行筛选和透视等。我将如何进行此操作,或者是否有任何库可以使用

我实际上想到了另一种解决方案,而不是Power Query来分析IIS日志:Azure日志分析-
它功能更强大,并且具有针对IIS日志的本机处理功能。

我实际上想到了另一种比Power Query更适合分析IIS日志的解决方案:Azure日志分析-
它功能更强大,并且具有针对IIS日志的本机处理功能。

好的,下面是您可能期望的答案:Azure Data Factory()是云中功能强大的ETL。您将能够以一种非常简单的方式将您的IIS日志从Azure存储转换为Azure存储表中您自己的格式。然后您可以轻松地直接从Power Query访问表。

好的,下面是您可能期望的答案:Azure Data Factory()是云中一个强大的ETL。您将能够以一种非常简单的方式将您的IIS日志从Azure存储转换为Azure存储表中您自己的格式。然后您可以轻松地直接从Power Query访问表。

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

在M库参考资料中有一个关于如何使用
BinaryFormat
库的示例:

17.1个例子考虑一个假设的文件格式,它包含32位无符号整数,后面是该点的数量。每一点 是由两个16位有符号整数值(x和y)组成的记录。 文件中的所有整数都使用大端字节顺序。在中查看时 hex,示例文件可能如下所示:

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]
// }

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

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

在M库参考资料中有一个关于如何使用
BinaryFormat
库的示例:

17.1个例子考虑一个假设的文件格式,它包含32位无符号整数,后面是该点的数量。每一点 是由两个16位有符号整数值(x和y)组成的记录。 文件中的所有整数都使用大端字节顺序。在中查看时 hex,示例文件可能如下所示:

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]
// }

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

IIS日志对于Power Query来说不是太大的挑战。我的方法是让IIS日志文件作为单个文本列加载(PQ倾向于为您自动拆分它)。向下编辑生成的源代码,如下所示:

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)
=Csv.Document(File.Contents(“C:\inetpub\logs\LogFiles\W3SVC1\u ex160523.log”),[Encoding=1252,QuoteStyle=QuoteStyle.None])

从那里我将删除前3个标题行,将“#Fields:”替换为无需删除的内容,然后按空格分割,并将第一行用作标题


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

IIS日志对于Power Query来说不是太大的挑战。我的方法是让IIS日志文件作为单个文本列加载(PQ倾向于为您自动拆分它)。向下编辑生成的源代码,如下所示:

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)
=Csv.Document(File.Contents(“C:\inetpub\logs\LogFiles\W3SVC1\u ex160523.log”),[Encoding=1252,QuoteStyle=QuoteStyle.None])

从那里我将删除前3个标题行,将“#Fields:”替换为无需删除的内容,然后按空格分割,并将第一行用作标题


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


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


这看起来确实有用,我会试试看。但它确实涉及到接触和订阅一项复杂的在线服务,然后你就会依赖它。简单地在Excel中进行分析也会带来很多好处,所以有一个简单的方法来提取和导入这些数据会很好。这看起来确实很有用,我会尝试一下。但它确实涉及到接触和订阅一项复杂的在线服务,然后你就会依赖它。简单地在Excel中进行分析也会带来很多好处,因此有一个简单的方法来提取和导入这些数据会很好。是的,只是如果我有几十个日志文件,那么这些小的清理步骤会变得更痛苦。我想找到一种自动化的方法。由于我的日志存储在azure中,Power Query可以直接从那里检索,因此最好是将其作为Power Query的一部分,这样就不需要下载文件并对其进行操作。您知道一种在Power Query中以编程方式清理数据的方法吗?我猜答案在于@Carlwalsh附带的pdf只需使用PQ获取Azure Blob列表,然后点击内容列标题旁边的双向下箭头-这将添加Combine Con