每天使用Shell脚本将日志从整个网络采集到服务器.

优采云 发布时间: 2020-08-07 05:06

  要求

  现在,公司有这样的要求: 每天需要将运行整个网络的设备上某个目录下的日志采集到服务器(此服务器简称为logserver),然后在该服务器上生成日志. 日期为名称的日志服务器目录

  解决方案:

  在logserver的crontab中设置两个脚本,在当天晚上23:30执行脚本1,以采集将在当天删除的整个网络脚本;早上8:30执行脚本2,昨天采集整个网络的其余脚本. 首先测试对等设备是否可以ping通. 如果失败,则将ping失败的设备输出到特定的日志中,以进行O&M检查,然后使用sshkey登录到没有密码的设备以自动scp,以达到复制日志的目的.

  以下是脚本文本和相应的注释

  脚本1

  #!/bin/bash

date=`date  +%Y%m%d`

mkdir /log/$date/sleep 10

cp -r /script/logcapture/directory/*  /log/$date/

#/script/logcapture/directory/*下面都是目录,写了很多日志类型(rtsp,avsdb,protocoltiming等等,都是视频服务器上的日志类型,这里不作具体解释),日志类型底下再新建了设备名字的空目录

sleep 10 

for d in `cat /script/logcapture/masterserver`

#/script/logcapture/masterserver下面都是设备名字,事先做了无密码登陆(拷贝sshkey),直接ssh设备名字便能登陆设备,以下的masterserver,allservers与之类似,都是存放设备名称的 

do if ping -c 2 $d判断是否ping命令是否能成功执行,如果ping两次不成功自动输出"remote server is unavailable" 

then          

scp root@$d:/arroyo/log/rtsp.log.$date* /log/$date/rtsp/$d/  

else

     echo "remote server $d is unavailable"  >>  /script/logcapture/problemserver.log

#输出不成功信息至特定日志

fi

done

  脚本2

  #!/bin/bash

date=`date -d yesterday +%Y%m%d`

for a in `cat /script/logcapture/vault`

#/script/logcapture/vault下面都是设备名字,事先做了无密码登陆,直接ssh设备名字便能登陆设备   

do 

if ping -c 2 $a    

then 

scp root@$a:/arroyo/log/avsdb.log.$date* /log/$date/avsdb/$a/

scp root@$a:/arroyo/log/protocoltiming.log.$date* /log/$date/protocoltiming/$a/

scp root@$a:/arroyo/log/c2k.log.$date* /log/$date/c2k/$a/  

else     

echo "remote server $a is unavailable"  >>  /script/logcapture/problemserver.log

fi

done

sleep 5

for b in `cat /script/logcapture/masterserver`

 do

  if ping -c 2 $b 

  then 

  scp root@$b/arroyo/log/avsdb.log.$date* /log/$date/avsdb/$b/

  scp root@$b:/arroyo/log/protocoltiming.log.$date* /log/$date/protocoltiming/$b/

  scp root@$b:/arroyo/log/c2k.log.$date* /log/$date/c2k/$b/

     else

          echo "remote server $b is unavailable"  >>  /script/logcapture/problemserver.log

      fi

done

sleep 5

for a in `cat /script/logcapture/allservers`

 do

  if ping -c 2 $b 

  then      

  scp root@$a:/arroyo/log/avsdb.log.$date* /log/$date/avsdb/$c/          

  scp root@$a:/arroyo/log/protocoltiming.log.$date* /log/$date/protocoltiming/$c/          

  scp root@$a:/arroyo/log/c2k.log.$date* /log/$date/c2k/$c/ 

   else     

    echo "remote server $c is unavailable"  >>  /script/logcapture/problemserver.log

   fi

 done

  可能是这种情况,请指出任何问题和改进建议

  

  原创文章,作者: 王铁江,应转载,请注明出处:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线