【问题标题】:Processing syslog output to csv with python使用 python 处理 syslog 输出到 csv
【发布时间】:2013-05-23 22:09:50
【问题描述】:

我需要帮助来从我的 siem 获取日志事件并将它们处理成一个 csv 文件,该文件可以被摄取到 hadoop 中进行进一步处理。以下是来自 siem 的示例和所需的结果。我在 python 中工作,但我没有我需要的经验。

Apr 22 11:52:28 siem <159>Apr 22 11:55:26 10.1.1.10 LEEF:1.0|Websense|Security|7.7.3|transaction:permitted|sev=1       cat=9   usrName=LDAP://10.10.10.10 OU=Standard Users,OU=Users,OU=Frostbyte Falls,OU=Frostbyte - QSD,OU=CDG,OU=North America,DC=Global,DC=bullwinke,DC=com/Mr. Moose  src=10.1.10.10        srcPort=62133   srcBytes=233    dstBytes=39469  dst=165.254.42.233   dstPort=80  proxyStatus-code=200    serverStatus-code=304   duration=0 method=GET       disposition=1048  contentType=application/zip     reason=-        policy=role-8**US Frostbyte        role=8  userAgent=IPM url=http://acroipm.adobe.com/10/rdr/ENU/win/nooem/none/message.zip

Hive 列定义:日期时间 log​​source 用户 srcIP srcPort dstIP dstPort 方法负载

想要的csv格式:

Apr 22, 11:55:26, 10.1.1.10, Mr. Moose, 10.1.10.10, 62133, 165.254.42.233, 80, GET, url=http://acroipm.adobe.com/10/rdr/ENU/win/nooem/none/message.zip

想法?

问候

【问题讨论】:

    标签: python hadoop syslog


    【解决方案1】:

    我同意 Peter Varo 的观点,您可能希望尽可能使用更好的格式。但是如果你必须解析由其他东西产生的数据……好吧,你必须解析它。

    如果你想通过正则表达式来做,我强烈建议要么匹配整行,要么逐行解析,而不是收集所有日期,然后是所有时间,等等。例如:

    import csv
    import re
    
    r = re.compile(r'''(?x)
                    >(?P<date>\w\w\w\s\d\d) \s
                    (?P<time>\d\d:\d\d:\d\d) \s
                    (?P<logsource>\d+\.\d+\.\d+\.\d+) \s
                    .*?
                    DC=com/(?P<user>.*?) \s+
                    src=(?P<srcIP>\d+\.\d+\.\d+\.\d+) \s+
                    srcPort=(?P<srcPort>\d+) \s+ .*?
                    dst=(?P<dstIP>\d+\.\d+\.\d+\.\d+) \s+
                    dstPort=(?P<dstPort>\d+) \s+ .*?
                    method=(?P<method>\w+) \s+ .*?
                    url=(?P<url>.*(?!\s))
                    ''')
    
    with open(logpath) as logfile, open(csvpath, 'w') as csvfile:
        csv.writer(csvfile).writerows(r.findall(logfile))
    

    但是,您的日志格式似乎是一种定义明确的格式,塞满了另一种格式,又塞满了另一种格式。换句话说,你有一个典型的系统日志格式TIMESTAMP SOURCE &lt;PID&gt;MESSAGE,然后MESSAGE 是某种东西,中间有一个LDAP URL,等等。至少其中一些东西有众所周知的正则表达式(或其他解析器),那么为什么要从头开始编写它们呢?

    【讨论】:

    • 哦,比我的好多了。感谢您发布此 +1
    • 但是例如你的找不到June 22,因为你使用了\w\w\w
    • @PeterVaro:OP 的格式几乎肯定不会 June 22,所以这不是问题。但这提出了要点:您需要知道要解析的内容的格式,而不是从单个示例中猜测。
    【解决方案2】:

    首先:你应该选择一个更好的序列化输出,因为这种情况下的字符串处理非常危险,而且也没有你希望的那么有效。 p>

    但是,我为您的问题做了一些正则表达式捕获,这些都是列表,但我想从那里,您可以决定如何访问以及要访问哪些字符串数据,您可以随时在 ','.join(&lt;list here&gt;) end 以逗号加入列表中的项目..

    但是正如我上面提到的,我不推荐你这个解决方案,你应该从源头上获取不同的数据..

    import re
    
    string = 'Apr 22 11:52:28 siem <159>Apr 22 11:55:26 10.1.1.10 LEEF:1.0|Websense|Security|7.7.3|transaction:permitted|sev=1       cat=9   usrName=LDAP://10.10.10.10 OU=Standard Users,OU=Users,OU=Frostbyte Falls,OU=Frostbyte - QSD,OU=CDG,OU=North America,DC=Global,DC=bullwinke,DC=com/Mr. Moose  src=10.1.10.10        srcPort=62133   srcBytes=233    dstBytes=39469  dst=165.254.42.233   dstPort=80  proxyStatus-code=200    serverStatus-code=304   duration=0 method=GET       disposition=1048  contentType=application/zip     reason=-        policy=role-8**US Frostbyte        role=8  userAgent=IPM url=http://acroipm.adobe.com/10/rdr/ENU/win/nooem/none/message.zip'
    
    dates = re.findall(r'(\w+)\s(\d+)\s(\d+:\d+:\d+)\s', string)
    ip = re.findall(r'\d+\.\d+\.\d+\.\d+', string)
    url = re.findall(r'url=.*(?!\s)', string)
    dstport = re.findall(r'dstPort=(\d+)', string)
    srcport = re.findall(r'srcPort=(\d+)', string)
    method = re.findall(r'method=(\w+)\s', string)
    user = re.findall(r'DC=com/(.*)\ssrc=', string)
    
    print dates, ip, url, dstport, srcport, method, user
    

    【讨论】:

    • 这仅解决了 OP 问题的前半部分。后半部分对于 csv 模块来说是微不足道的(就像在一次调用 writerows(zip(dates, ip, blah blah)) 时一样,但你仍然应该展示它,因为我不确定它对 OP 来说是否微不足道。
    • 更重要的是,我认为逐行解析日志比像这样“逐列”解析日志要好得多。
    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 2021-04-09
    • 2011-03-16
    • 2019-02-15
    • 2013-09-19
    • 2016-06-14
    • 2021-03-05
    • 1970-01-01
    相关资源
    最近更新 更多