Как преобразовать журналы IIS с помощью Log Parser (или другого) в Power Query?
Power Query / Excel 2016 обладает отличной способностью извлекать данные из таких мест, как хранилище Azure, и даже может расширять двоичные файлы в строки текстовых данных. Но файлы журналов IIS не так просты для анализа (например, имеют записи заголовка и комментарии), поэтому я хотел бы использовать что-то еще, например Log Parser, для анализа и преобразования моих блобов с журналами iis в строки данных со столбцами, которые я могу отфильтровать и pivot и т. д. Как мне поступить, или есть какая-нибудь библиотека, которую я могу использовать, которая уже сделала это?
4 ответа
Я на самом деле думаю о другом решении, помимо Power Query, для анализа журналов IIS: Azure Log Analytics - https://azure.microsoft.com/fr-fr/services/log-analytics/ Это более мощное средство и имеет встроенную обработку для IIS. журналы.
Если у вас нет роскоши Azure или других платных служб аналитики журналов, вы можете попробовать панели мониторинга рабочего стола PowerBI для анализа журналов IIS. Мы можем преобразовать журналы IIS в CSV с помощью LogParser, а затем загрузить в PowerBI. Более подробную информацию можно найти ниже.
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: " ничем, чтобы удалить его, затем разделил на пробелы и использовал первую строку в качестве заголовков.
Немного больше фильтрации, чтобы избавиться от дальнейших заголовков строк, и вы, вероятно, там.