shell脚本异步日志分析-接口耗时、可用率
背景:现有日志接入日志报表大盘,为了避免作业高峰期间(双十一),系统也要观测系统整体情况,因此提出了观测近五分钟,接口成功率以及耗时等工具(默认统计最近五分钟,并进行结果汇总统计)
使用说明
- 前提:pgm免登陆配置好,生成ssh公钥 如果配置不成功通过修改该脚本 pgm 后面加入 -A 输入密码
- 命令执行后,trace.log中实时看捞取数据
- 结果保存在 result.log中
- 命令后台运行 执行成功后会 提示 commplete see trace.log or result.log
- 默认执行5次,每次sleep 60秒 调整可以修改for v1 in {1..5} 以及sleep time;注意执行一次for v1 in
备注:pgm是公司内部脚本,可参考文章:shell脚本-批量执行机器命令
日志格式demo
日志格式分析
使用执行效果
脚本
#!/bin/shell
## 说明:波次进行异步分析,完成会提示 结果在 result.log 展示
## sh nav-wave.sh wmporderhost
host=$1
analysis(){
for v1 in {1..5}
do
if [ $v1 == 1 ];then
rm -rf trace.log
rm -rf result.log
fi
start=`date "+%H:%M:%S" -d '-1 min'`
end=`date "+%H:%M:%S"`
pgm `armory -leg $host` "cat /home/admin/wmporder/logs/wave/wave-dp.log | awk -vs=$start -ve=$end 's<=\$2&&\$2<=e' | grep $filter" >> trace.log
grep "wave-dp" trace.log | awk -F '|' '{count+=1} BEGIN{s1=0;s2=0} { s1+=$5;s2+=$6 } END{print "采样总量:"count",数量1总和:"s1",数量2总和:"s2}' trace.log | sed "s/^/`date`---/g" >> result.log
grep "wave-dp" trace.log | awk -F '|' '{sum+=$4;count+=1} BEGIN{max=0} {if ($4+0 > max+0) max = $4 fi} END{print "平均耗时:"sum/count" ms,最大耗时:"max" ms"}' |sed "s/^/`date`---/g" >> result.log
if [ $v1 == 5 ];then
break;
fi
sleep 60
done
echo "commplete see trace.log or result.log"
}
echo "你想干嘛?"
select var in "任务-创建总量" "任务-插入无效任务" "任务-开始执行任务数" "任务-执行完成任务数" "波次包裹维度-执行成功的包裹数" "波次包裹维度-失败回滚的包裹数" "波次包裹维度-计划执行的包裹数(加锁之前)" "波次包裹维度-计划执行的包裹数(加锁之后)" "拣选单-拣选单总数" "拣选单-秒杀拣选单总数" "拣选单-取消拣选单数";do
break;
done
case "$var" in
"任务-创建总量"*)
filter="waveSelfCreateNum"
analysis &
;;
"任务-插入无效任务"*)
filter="waveSelfInvalidNum"
analysis &
;;
"任务-开始执行任务数"*)
filter="waveSelfBeginNum"
analysis &
;;
"任务-执行完成任务数"*)
filter="waveSelfFinishNum"
analysis &
;;
"波次包裹维度-执行成功的包裹数"*)
filter="packageSuccessWaveNum"
analysis &
;;
"波次包裹维度-失败回滚的包裹数"*)
filter="packageFaileInWaveNum"
analysis &
;;
"波次包裹维度-计划执行的包裹数(加锁之前)"*)
filter="packagePlanInWaveNum"
analysis &
;;
"波次包裹维度-计划执行的包裹数(加锁之后)"*)
filter="packageInWaveNum"
analysis &
;;
"拣选单-拣选单总数"*)
filter="genPickbillGN"
analysis &
;;
"拣选单-秒杀拣选单总数"*)
filter="genSeckPickbillGN"
analysis &
;;
"拣选单-取消拣选单数"*)
filter="cancelPickbillGN"
analysis &
;;
esac