Как я могу разобрать журналы Serv-U FTP с SSIS? - PullRequest
1 голос
/ 27 января 2009

Некоторое время назад мне нужно было проанализировать кучу файлов журналов FTP Serve-U и сохранить их в базе данных, чтобы люди могли сообщать о них. В итоге я разработал небольшое приложение на C # для следующего:

  1. Поиск всех файлов в каталоге, которые не были загружены в БД (есть таблица ранее загруженных файлов).

  2. Откройте файл и загрузите все строки в список.

  3. Переберите этот список и используйте RegEx для определения типа строки (CONNECT, LOGIN, DISCONNECT, UPLOAD, DOWNLOAD и т. Д.), Проанализируйте его в объекте определенного типа, соответствующего типу строки, и добавьте, что obj к другому списку.

  4. Переберите каждый из различных списков объектов и запишите каждый в соответствующую таблицу базы данных.

  5. Запишите, что файл был успешно импортирован.

  6. Стирать, полоскать, повторять.

Это уродливо, но оно выполнило свою работу в срок, который у нас был.

Проблема в том, что я нахожусь в роли администратора базы данных и мне не нравится запускать скомпилированное приложение в качестве решения этой проблемы. Я бы предпочел что-то более открытое и более ориентированное на DBA.

Я мог бы переписать это в PowerShell, но я бы предпочел разработать пакет служб SSIS. Я не мог найти хороший способ разделения ввода на основе RegEx в SSIS с первого раза, и я не был достаточно знаком с SSIS. Я больше копаюсь в SSIS, но все еще не могу найти то, что мне нужно.

Есть ли у кого-нибудь предложения о том, как мне подойти к переписыванию в SSIS?

1 Ответ

1 голос
/ 27 января 2009

Я должен сделать что-то подобное с журналами Exchange. Мне еще предстоит найти более простое решение, использующее все решения SSIS. Сказав это, вот что я делаю:

Сначала я использую logparser от Microsoft и функциональность массового копирования sql2005

Я копирую файлы журнала в каталог, в котором я могу работать с ними.

Я создал файл sql, который будет анализировать логи. Это выглядит примерно так:

SELECT TO_Timestamp(REPLACE_STR(STRCAT(STRCAT(date,' '), time),' GMT',''),'yyyy-M-d h:m:s') as DateTime, [client-ip], [Client-hostname], [Partner-name], [Server-hostname], [server-IP], [Recipient-Address], [Event-ID], [MSGID], [Priority], [Recipient-Report-Status], [total-bytes], [Number-Recipients], TO_Timestamp(REPLACE_STR([Origination-time], ' GMT',''),'yyyy-M-d h:m:s') as [Origination Time], Encryption, [service-Version], [Linked-MSGID], [Message-Subject], [Sender-Address] INTO '%outfile%' FROM '%infile%' WHERE [Event-ID] IN (1027;1028)

Затем я запускаю предыдущий sql с logparser:

logparser.exe file:c:\exchange\info\name_of_file_goes_here.sql?infile=c:\exchange\info\logs\*.log+outfile=c:\exchange\info\logs\name_of_file_goes_here.bcp -i:W3C -o:TSV

Который выводит файл bcp.

Затем я массово копирую этот bcp-файл в готовую таблицу базы данных на SQL-сервере с помощью этой команды:

bcp databasename.dbo.table in c:\exchange\info\logs\name_of_file_goes_here.bcp -c -t"\t" -T -F 2 -S server\instance -U userid -P password

Затем я запускаю запросы к таблице. Если вы сможете выяснить, как автоматизировать это с помощью SSIS, я буду рад услышать, что вы сделали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...