Python - 从系统日志文件中检索信息

Posted

技术标签:

【中文标题】Python - 从系统日志文件中检索信息【英文标题】:Python - retrieving info from a syslog file 【发布时间】:2010-03-20 14:40:38 【问题描述】:

我被要求使用 python 编写一个程序来完成作业。

我得到了一个系统日志文件,我必须找出它的相关信息

我如何知道尝试登录 root 帐户的次数?

任何建议都将受到高度赞赏,因为我对 python 非常陌生并且完全迷失了!

【问题讨论】:

不仅问题重复,而且帐号重复?这个[小猪][1]写了一个问题,这个[小猪][2]写了同样的问题,这两个小猪都叫约翰尼... [1]:***.com/users/298077/johnny[2]:***.com/users/298037/johnny 【参考方案1】:

你想要/var/log/auth.log,而不是系统日志。

它将包含像这样的行:

Mar 20 10:47:24 Opus su[15918]: pam_unix(su:auth): authentication failure; logname=lfaraone uid=1000 euid=0 tty=/dev/pts/25 ruser=lfaraone rhost=  user=root

完成该问题的基本、幼稚的代码如下:

loginattempts = "root": 0,
                 "someuser": 0, # Usernames you want to check
with open('/var/log/auth.log', 'r') as authlog:
    for line in authlog:
        if "authentication failure" in line:
            username = line.split('=')[-1] # split the string into an array, 
                                           # using '=' as the delimiter
            if username in loginattempts: # is the username one we care about?
                loginattempts[username] += 1

就像用户 crashh 建议的那样,长期使用正则表达式进行解析可能会更好,但如果您还不了解它们,那么学习起来可能并非易事。

【讨论】:

关于/var/log/auth.log 位,这高度依赖于系统;例如,在 Solaris 上没有这样的文件。语法也可能因操作系统而异。【参考方案2】:

类似的东西

#open the file , can be /var/log/messages, /var/log/maillog etc as defined in your system
f=open("mysyslogfile")
count=0 
#go through the file
for line in f:
   if "<unique pattern for checking root account login>" in line:
       count+=1
#close the file
f.close()
print "total count: " ,count

【讨论】:

不要指望close 被手动调用。 始终尽可能使用上下文管理器 (with open("mysyslogfile") as f:)。 是的,尽可能这样做。但是我的解决方案在没有“with”支持的情况下适用于旧版本的 Python。 :) @ghostdog,不,您的解决方案容易出错。在 2.5 之前的 Python 中,您应该始终在 finally 块中调用 close。 如果你想这样做,那很好,但是没有,没有必要。【参考方案3】:

您可能需要读取文件,解析每一行。当您找到与您感兴趣的内容匹配的行(例如,失败的 root 登录)时,您会增加一个计数器。

看看how to read files,可能还有how to use regular expressions。

如果您要针对“实时”日志文件执行此检查,例如每五分钟一次,您需要跟踪您已经处理了多少文件,这样您就不会每次都读取它。这稍微复杂一些,因为您需要记住执行之间的状态(文件大小)。在这种情况下,请查看shelve 模块。

【讨论】:

以上是关于Python - 从系统日志文件中检索信息的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统日志分析

linux系统日志以及分析

linux日志系统的分析与应用

如何查看centos 重启日志

Linux系统日志分为哪几种类型?

微服务中定位线上问题