每天使用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
可能是这种情况,请指出任何问题和改进建议
原创文章,作者: 王铁江,应转载,请注明出处: