我有一个任务,准备一个脚本来扫描来自不同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"'
从不同的服务器收集日志。
编辑:
- 持续运行:
如果您希望在远程收集的每个日志文件中搜索某些行,则如下所示:
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()