Sql server 如何使用SSI解析Serv-U FTP日志?

Sql server 如何使用SSI解析Serv-U FTP日志?,sql-server,ssis,Sql Server,Ssis,不久前,我需要解析一堆Serve-U FTP日志文件,并将它们存储在数据库中,以便人们能够报告它们。最后,我开发了一个小型C#应用程序来执行以下操作: 查找目录中所有未加载到db中的文件(有一个以前加载的文件表) 打开一个文件并将所有行加载到列表中 循环遍历该列表,并使用正则表达式识别行的类型(连接、登录、断开连接、上载、下载等),将其解析为与行的类型对应的特定类型的对象,并将该对象添加到另一个列表中 循环遍历每个不同的对象列表,并将每个列表写入关联的数据库表 记录文件已成功导入 清洗,漂洗,重

不久前,我需要解析一堆Serve-U FTP日志文件,并将它们存储在数据库中,以便人们能够报告它们。最后,我开发了一个小型C#应用程序来执行以下操作:

  • 查找目录中所有未加载到db中的文件(有一个以前加载的文件表)

  • 打开一个文件并将所有行加载到列表中

  • 循环遍历该列表,并使用正则表达式识别行的类型(连接、登录、断开连接、上载、下载等),将其解析为与行的类型对应的特定类型的对象,并将该对象添加到另一个列表中

  • 循环遍历每个不同的对象列表,并将每个列表写入关联的数据库表

  • 记录文件已成功导入

  • 清洗,漂洗,重复

  • 这很难看,但它在我们规定的最后期限内完成了工作

    问题是我担任DBA角色,我不喜欢运行一个编译过的应用程序来解决这个问题。我更喜欢更开放、更面向DBA的东西

    我可以在PowerShell中重写它,但我更喜欢开发SSIS包。我第一次在SSIS中找不到一种基于RegEx分割输入的好方法,而且我对SSIS还不够熟悉。我现在正在深入研究SSIS,但仍然没有找到我需要的东西


    有人对我如何在SSIS中进行重写有什么建议吗?

    我必须对Exchange日志执行类似的操作。我还没有找到一个利用全SSIS解决方案的更简单的解决方案。话虽如此,我的工作如下:

    首先,我使用Microsoft的logparser和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)
    
    然后,我使用logparser运行前面的sql:

    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 server中的预制数据库表中:

    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实现自动化,我很高兴听到您所做的。

    我必须对Exchange日志执行类似的操作。我还没有找到一个利用全SSIS解决方案的更简单的解决方案。话虽如此,我的工作如下:

    首先,我使用Microsoft的logparser和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)
    
    然后,我使用logparser运行前面的sql:

    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 server中的预制数据库表中:

    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实现自动化,我很高兴听到您所做的。

    这无疑给了我一些想法,让我更接近类似DBA的解决方案。我还找到了一个可以尝试的regex数据流组件,这无疑给了我一些想法,让我更接近一个更像DBA的解决方案。我还找到了一个regex数据流组件,我可以试试。