linux使用shell脚本对多机器日志监控

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

效果

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值