使用python从ssh日志中读取日期

时间:2014-03-06 19:05:34

标签: python regex date ssh compilation

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

# 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的示例:

givenvalue = datetime.strptime("2014-01-04 14:57:33", '%Y-%m-%d %H:%M:%S')
dateFromLog = ....

if givenvalue > dateFromLog
   do something

我可以毫不费力地打开日志文件并逐个读取每一行。 我的问题是用于读出日期的正则表达式/编译命令(例如: 3月5日12:19:25 )。谁能帮帮我?

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

  • 从日志文件中读出“最后编辑”的日期以获取(正确)年份。 (真的是故障安全吗?)
  • 更改日志文件格式并添加年份。

我不知道这两个想法中的一个。有没有人有想法?

2 个答案:

答案 0 :(得分:0)

您可以像这样使用strptime

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

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

示例:

>>> from datetime import datetime
>>> datetime.strptime('Mar  5 12:19:20', '%b %d %H:%M:%S')
datetime.datetime(1900, 3, 5, 12, 19, 20)

关于您的其他问题:“最后编辑的”日期不一定与您日志中的所有条目同年。

答案 1 :(得分:0)

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

我编写了一个小型服务/程序,可以实时扫描原始的log.auth文件(如Code Sample: Part 5

当出现新行时:在新的log.file中复制带有year的行(如own_auth_with_year.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/auth.log*)更改为

auth,authpriv.*                 /var/log/auth.log;MySuperAwesomeTimestamps

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