如何将 AWS Redshift 用户活动日志解析为对象?
Posted
技术标签:
【中文标题】如何将 AWS Redshift 用户活动日志解析为对象?【英文标题】:How to parse AWS Redshift User Activity Log into an object? 【发布时间】:2016-11-29 15:26:18 【问题描述】:我正在尝试将 AWS Redshift 用户活动日志 (http://docs.aws.amazon.com/redshift/latest/mgmt/db-auditing.html) 解析为一个对象。
Redshift 用户活动日志
'2016-11-16T08:00:13Z UTC [ db=dev user=rdsdb pid=30500 userid=1 xid=1520 ]' LOG: SELECT 1
Python RedshiftUserActivityLog 对象
class RedshiftUserActivtyLog (object):
def __init__(self, record_time, db,
user, pid, user_id, xid,
query):
super(RedshiftUserActivtyLog , self).__init__()
self.record_time = record_time
self.db = db
self.user = user
self.pid = pid
self.user_id = user_id
self.xid = xid
self.query = query
我目前的解决方案是删除不必要的字符,如'[、]、UTC、LOG、:',将日志按空格拆分为列表。之后,将列表转换为对象。
谁能建议我完成这项任务的更好方法?
【问题讨论】:
【参考方案1】:您可以编写一个正则表达式,然后从匹配的groupdict()
填充您的对象,例如
regex = re.compile(r'\'(?P<time>[\d\-:T]+)\w UTC \[ db=(?P<db>\w+) user=(?P<user>\w+) pid=(?P<pid>\d+) userid=(?P<userid>\d+) xid=(?P<xid>\d+) \]\' LOG:(?P<query>.*)')
match = regex.search(log)
if match:
userActivity = RedshiftUserActivtyLog(
record_time=match.group('time'),
db=match.group('db'),
user=match.group('user'),
pid=match.group('pid'),
user_id=match.group('user_id'),
xid=match.group('xid'),
log=match.group('log')
)
但实际上你的方式也很合法,甚至可能更快。
【讨论】:
【参考方案2】:解析 Redshift 审计日志的另一种方法是通过Amazon Redshift Spectrum。
有一篇很好的博客文章here。
【讨论】:
以上是关于如何将 AWS Redshift 用户活动日志解析为对象?的主要内容,如果未能解决你的问题,请参考以下文章
AWS:将日志从 Amazon CloudWatch 导出到 Amazon Redshift
AWS:从 dynamodb 到 redshift 的数据转换 [关闭]