我有一项任务是准备一个脚本来扫描来自不同Unix服务器的日志(对于同一个应用程序)。要求是准备shell脚本,我将传递字符串作为输入,需要在不同的日志位置(差异服务器)进行grep。
因此,脚本应该从一个文件读取服务器并将结果存储在特定位置。
答案 0 :(得分:1)
看一下能够帮助你的multitail
multitail -l 'ssh user@host1 "tail -f /path/to/log/file"' -l 'ssh user@host2 "tail -f /path/to/log/file"'
从不同的服务器收集日志。
编辑:
如果要在远程收集的每个日志文件中搜索某些行,则如下所示:
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"'
这将连续运行(每个方框上的tailf),只显示包含“search-string”的行。您需要在框中使用无密码登录(请参阅this)。
有很多方法可以做到这一点,包括bash,但我最喜欢pythonic方式。如果你想在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()