linux使用shell脚本对多机器日志监控
遇到的难题
日志分散在三台服务器,每次报错查看日志都需要一台一台找,非常麻烦,所以第一反应就是有没有比较好的日志系统可以一次性查看所有的日志,后来发现都需要搭建,或者安装,或者配置相关服务,所以想了一些简单的监控多机日志的方案。
定义
设三台机器为 c1, c2, c3(c1同时为跳板机)
尝试方案一
### 配置简单的alias脚本,让本机可以快速tail到文件。
### 原理:监控跳板机的log+通过跳板机监控
### 配置alias的方法,vim ~/.bashrc下加入如下代码,记得修改目录和ip
log1='ssh root@xxx "tail -f ~/log/sys.log* |ccze -A"'
log2='ssh root@xxx "ssh root@192.168.201.10 \"tail -f ~/log/sys.log* |ccze -A\""'
log3='ssh root@xxx "ssh root@192.168.201.23 \"tail -f ~/log/sys.log* |ccze -A\""'
尝试方案二
考虑到这样做,每次都需要分屏+输入多个alias别名才能启动,启动太慢,有没有快速启动的方案?
想到是否可以利用ansible做多机器日志监控,我们是否可以用ansible对日志文件不断地拿末尾20行并且显示,这是肯定可以的,但是如果程序没有打印日志,那岂不是ansible一直再取日志,刷新日志。后来想了下,尝试利用linux时间跟日志时间做对比,取当前日志时间的那些行出来,这样就可以了。
我这里用 welog 1
监控exception日志,welog 2监控sys日志。
# ansible 配置文件 -> /etc/ansible/hosts
[main]
192.168.201.11
192.168.201.10
192.168.201.23
# SHELL - welog:
T=`date +"%Y-%m-%d %H:%m"`
echo $T
if [ $1 -eq 1 ]
then
while true;
do ansible main -m shell -a "tail -n 30 ~/code/eng-server/log/exception.log|grep '`date +%Y-%m-%d\ %H:%M`' -C 40"|ccze -A
sleep 2
done
fi
if [ $1 -eq 2 ]
then
while true;
do ansible main -m shell -a "tail -n 10 ~/code/eng-server/log/sys.log|grep '`date +%Y-%m-%d\ %H:%M`' -C 40"|ccze -A
sleep 2
done
fi