我需要帮助从我的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配置单元列定义:日期时间日志源user 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有什么想法?
问候
发布于 2013-05-24 08:02:51
我同意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 <PID>MESSAGE系统日志格式,然后MESSAGE是某种中间带有LDAP URL的东西,依此类推。至少有一些众所周知的正则表达式(或其他解析器)可以用于这些东西,那么为什么还要从头开始编写它们呢?
发布于 2013-05-24 07:20:03
首先:你应该选择一个更好的序列化输出,因为在这种情况下字符串处理是非常危险的,而且也不像你希望的那样有效。
但是,我为您的问题做了一些正则表达式捕获,它们都是列表,但我猜从那里,您可以决定如何访问,以及您希望访问什么字符串数据,并且您始终可以在末尾执行','.join(<list here>),以便使用逗号连接列表中的项。
但正如我上面提到的,我不建议您使用此解决方案,您应该以不同于源数据的方式捕获此数据。
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, userhttps://stackoverflow.com/questions/16724717
复制相似问题