好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

自动连接多台机器并搜寻日志的脚本 - Linux操作系

自动连接多台机器并搜寻日志的脚本

 

我们应用部署在10台机器上,对应地日志文件也分散在这10台上。若想从这10份日志文件中,搜索,如报错信息,是比较常见的需求。

 

下面的脚本干的就是这事儿。大体逻辑十分简单:

 

Pseudocode: 

for hostname in (10台机器): 

    ssh连接远程host 

    从日志文件中找出符合条件的行并写到本地文件中

 

看似简单,但对于shell 编程 生疏的我来讲,有以下两个难点:

1. 如何ssh时,不需要手动输入passphase/password

2. 如何结束当前ssh session后,继续开启下一个ssh session

 

google了半天,运气算好,搞定了,解决方案如下:

 

1. 如何ssh时,不需要手动输入passphase/password?

 

用ssh-agent!此进程启动后,只需手动输入passphase一次,则ssh-agent就会记住你的passphase,后面连接远程机子时,它会自动从记忆中读取,不需要人为再次输入了。

 

环境设置如下:

 

1) 生成public/private key pairs:

    $ssh-keygen -t dsa

 

2) 把生成的public key (id_dsa.pub)放到10台远程机器上

    $scp .ssh/id_dsa.pub username@hostname:.ssh/authorized_keys  (10次)

 

3) 确保ssh-agent已启动,若无,则启动:

    $ps aux | grep ssh-agent      #check if it`s running

    $eval `ssh-agent`                 #if not, start up the agent process

 

4) 向ssh-agent提交你的passphase:

    $ssh-add

 

5) 把ssh-agent相关信息保存到变量中,以便在执行脚本时导入引用:

    $ssh-agent -s > ~/.bashrc

 

6) 脚本中记得引入变量即可,如:

    $source ~/.bashrc

 

2. 如何结束当前ssh session后,继续开启下一个ssh session?

<<"EOF"

EOF

 

具体原理,后面再补充!

 

到此,整个可执行脚本就出来了。再在crontab -e里写上一行,轻轻松松让它每天自动收集报错信息并发邮件给俺!

脚本附上,写得实在是粗陋,随便嫌弃哈,不用对我客气!

顺便,若有更简洁的解决方案,求不吝赐教!

 

#!/bin/bash 

source ~/.bashrc 

 

hostfile="/home/bai/host_videoapi"             #一机器一行

keyword="fail@"                                        #查询的关键字

search_log="videoapi.log"                      #查寻的日志文件名 

outputfile="error_videoapi.log"                #output file 

 

#挨个儿连接并搜寻错误信息

while read line  

do  

    vahost=$line  

    echo "---hostname:" $vahost "-----" >> $outputfile 

    ssh $vahost "find /home/videoapi/logs -type f -name $search_log -exec  grep -i $keyword {} \; -print " >> $outputfile <<"EOF"

EOF 

    echo "---finishing-----"  

done < $hostfile  

 

#查看是否有错误信息,有则发邮件,无则done nothing 

if grep -q $keyword $outputfile 

then  

    mail -s "errors in videoapi!" bai@126.com < $error_log  

else  

    echo "it is a nice day!"  

fi 

 

查看更多关于自动连接多台机器并搜寻日志的脚本 - Linux操作系的详细内容...

  阅读:66次