用python从ssh日志中读取日期

2024-05-16 13:18:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把每行的日期与给定的日期进行比较。在

# Example dump
cat /var/log/auth.log 
Mar  5 00:53:43 server012 sshd[15145]: Failed password for XX from X.X.X.X port 59113 ssh2
Mar  5 12:19:20 server012 sshd[17378]: Invalid user XX from X.X.X.X
Mar  5 12:19:20 server012 sshd[17378]: input_userauth_request: invalid user XX [preauth]
Mar  5 12:19:25 server012 sshd[17378]: Failed none for invalid user XX from X.X.X.X port 38485 ssh2

Python示例:

^{pr2}$

我很容易打开日志文件,一行接一行地读。 我的问题是regex/compile命令读取日期(例如:mar5112:19:25)。谁能帮我?在

下一个问题是日志文件中缺少的年份。所以我不能“正确”地比较日期。我以前的想法是:

  • 从日志文件中读出“上次编辑”的日期以获得(正确的)年份。(这真的是故障保护吗?)
  • 更改logyear并添加文件格式。在

我不知道这两个想法中的一个。有人有主意吗?在


Tags: 文件fromlogssh2forportexamplemar
2条回答

您可以这样使用strptime

datetime.strptime(beginningOfLine, '%b %d %H:%M:%S')

这将创建1900年的datetime对象,因为没有给出年份。你可以自己调整一下。在

示例:

^{pr2}$

关于您的另一个问题:“上次编辑”日期不一定与您日志中的所有条目在同一年。在

我没有找到有关如何更改日志记录日期格式的任何信息,因此我可能有一个新的解决方案:

我写了一个小的服务/程序扫描原始的日志.auth实时文件(如Code Sample: Part 5。在

当出现新行时:在新的日志文件(就像自己的auth__年份.log). 我不喜欢这个选择:再给我一个护理服务。解决办法真的很不方便。在

如果你能改变时间格式的话。。。在

更新: 这是可能的。打开rsyslog.conf文件文件(/etc/rsyslog.conf文件)添加你自己的模板

# My own a template
$template MySuperAwesomeTimestamps,"%timegenerated:1:10:date-rfc3339% %timegenerated:12:19:date-rfc3339% %HOSTNAME% %syslogtag%%msg%\n"

现在更改行(auth,authpriv。/var/log/验证日志*)到

^{pr2}$

保存配置之后,重新启动系统(或重新加载服务)并检查新的时间格式(tail-f/var/log)/验证日志

相关问题 更多 >