Shell脚本扫描日志,一次从不同的服务器获取异常



我有一个任务,准备一个脚本来扫描来自不同Unix服务器的日志(对于相同的应用程序)。要求是准备shell脚本,我将在其中传递字符串作为输入,需要在不同的日志位置(diff服务器)中进行grep。

因此,脚本应该从一个文件中读取服务器,并将结果存储在特定位置。

看看multitail,它能帮到你

multitail -l 'ssh user@host1 "tail -f /path/to/log/file"' -l 'ssh user@host2 "tail -f /path/to/log/file"'

从不同的服务器收集日志。

编辑:

  1. 持续运行:

如果您希望在远程收集的每个日志文件中搜索某些行,则如下所示:

multitail -E "search-string" --mergeall -l 'ssh user@host1 "tail -f /path/to/log/file"' -l 'ssh user@host2 "tail -f /path/to/log/file"'

这将连续运行(每个框尾),只显示包含"search-string"的行。您将需要在盒子上有无密码登录(见此)。

  • 在整个日志文件上运行一次
  • 有很多方法可以做到这一点,包括bash,但我最喜欢python的方法。如果你想用python来做,试试这个。注意,这也意味着在给定用户的主机上进行无密码登录:
    import subprocess
    import re
    files = [
        ['user@host1', '/path/to/logfile'],
        ['user@host2', '/path/to/logfile'],
    ]
    
    def get_lines(search_key):
        for item in enumerate(files):
            server = item[1][0]
            logfile = item[1][1]
            ssh = subprocess.Popen(['ssh', server, 'cat', logfile],
                                   stdout=subprocess.PIPE)
            for line in iter(ssh.stdout.readlines()):
                line=str(line, encoding='UTF-8')
                if re.search(search_key, line):
                    print(line)
    
    def main():
        get_lines("needle")
    
    if __name__ == "__main__":
        main()
    

    最新更新