#!/usr/bin/env bash
logPath=`pwd`
flow_id=$1
time=`date '+%Y-%m-%d'`
logFileName="flow_log_${flow_id}_$time.log"
echo ""
echo "start get log for flow $flow_id "
echo ""
function dltLogFile(){
rm -f $logFileName
}
function printHostInfo(){
printNL 1 ./$logFileName
echo "============================================== host info ================================= " >> ./$logFileName
printNL 1 ./$logFileName
echo "--------------- host top ----------------- " >> ./$logFileName
printNL 2 ./$logFileName
top -b -n 1 | head -n 30 >> ./$logFileName
printNL 2 ./$logFileName
echo "--------------- host disk ----------------- " >> ./$logFileName
printNL 2 ./$logFileName
df -l >> ./$logFileName
}
function printNL(){
for((i=1;i<=$1;i++))
do
echo '' >> $2
done
}
function printInstanceInfo(){
printNL 3 ./$logFileName
echo "========================================= >> instance info ================================= " >> ./$logFileName
printNL 1 ./$logFileName
instancePort=${logPath%/*}
instancePort=${instancePort##*/}
workDir=`ps -ef | grep /$instancePort/ | grep -v grep| awk -v FS=" " -v OFS="#" '{print $8}'`
workDir=${workDir%/*}
pid=`ps -ef | grep /$instancePort/ | grep -v grep| awk -v FS=" " -v OFS="#" '{print $2}'`
printNL 1 ./$logFileName
echo "--------------- instance version ----------------- " >> ./$logFileName
printNL 2 ./$logFileName
workDirRoot=${workDir%/bin/etl*}
more $workDirRoot/version.txt >> ./$logFileName
printNL 3 ./$logFileName
printNL 1 ./$logFileName
echo "--------------- instance top ----------------- " >> ./$logFileName
printNL 2 ./$logFileName
top -b -n 1 -Hp $pid| head -n 30 >> ./$logFileName
printNL 3 ./$logFileName
echo "--------------- instance GC ----------------- " >> ./$logFileName
printNL 1 ./$logFileName
$workDir/jstat -gcutil $pid 1 10 >> ./$logFileName
printNL 3 ./$logFileName
echo "--------------- instance limits ----------------- " >> ./$logFileName
printNL 1 ./$logFileName
cat /proc/$pid/limits >> ./$logFileName
printNL 3 ./$logFileName
echo "--------------- instance jstack ----------------- " >> ./$logFileName
printNL 1 ./$logFileName
$workDir/jstack $pid >> ./$logFileName
printNL 3 ./$logFileName
echo "--------------- instance start stop ----------------- " >> ./$logFileName
printNL 1 ./$logFileName
more idatafusion.etl-instance.info*.log |grep -E 'etl is starting|etl change to|current pid is|etl is shutting down' >> ./$logFileName
}
function unzipFile(){
# task-manager
mngLogFiles=`ls idatafusion.etl-instance.task-manager.*zip`
for mngLogFile in $mngLogFiles
do
mngLogFileTxt=${mngLogFile%.*}
if [ -f $logPath/$mngLogFileTxt ]
then
echo "---- >> unzip $mngLogFile"
else
echo "---- >> unzip $mngLogFile"
unzip $mngLogFile
fi
done
# task-schedule
scdLogFiles=`ls idatafusion.etl-instance.task-schedule.*zip`
for scdLogFile in $scdLogFiles
do
scdLogFileTxt=${scdLogFile%.*}
if [ -f $logPath/$scdLogFileTxt ]
then
echo "---- >> unzip $scdLogFile"
else
echo "---- >> unzip $scdLogFile"
unzip $scdLogFile
fi
done
# task-status
sttLogFiles=`ls idatafusion.etl-instance.task-status.*zip`
for sttLogFile in $sttLogFiles
do
sttLogFileTxt=${sttLogFile%.*}
if [ -f $logPath/$sttLogFileTxt ]
then
echo "---- >> unzip $sttLogFile"
else
echo "---- >> unzip $sttLogFile"
unzip $sttLogFile
fi
done
# info
infoLogFiles=`ls idatafusion.etl-instance.info*zip`
for infoLogFile in $infoLogFiles
do
infoLogFileTxt=${infoLogFile%.*}
if [ -f $logPath/$infoLogFileTxt ]
then
echo "---- >> unzip $infoLogFile"
else
echo "---- >> unzip $infoLogFile"
unzip $infoLogFile
fi
done
}
function printFlowInfo(){
printNL 3 ./$logFileName
echo "========================================= >> flow info ================================= " >> ./$logFileName
printNL 3 ./$logFileName
echo "--------------- flow module info ----------------- " >> ./$logFileName
printNL 2 ./$logFileName
more idatafusion.etl-instance.task-manager*.log |grep /flow/$flow_id >> ./$logFileName
printNL 3 ./$logFileName
echo "--------------- flow schedule info ----------------- " >> ./$logFileName
printNL 2 ./$logFileName
more idatafusion.etl-instance.task-schedule*.log |grep -A 10 /$flow_id >> ./$logFileName
printNL 2 ./$logFileName
more idatafusion.etl-instance.task-schedule*.log |grep "task $flow_id " >> ./$logFileName
printNL 2 ./$logFileName
printNL 3 ./$logFileName
echo "--------------- flow status info ----------------- " >> ./$logFileName
printNL 2 ./$logFileName
more idatafusion.etl-instance.task-status*.log |grep " task $flow_id " >> ./$logFileName
printNL 2 ./$logFileName
more idatafusion.etl-instance.task-manager*.log |grep "/metadata/schedule/$flow_id/" >> ./$logFileName
printNL 2 ./$logFileName
}
function printLogTail(){
printNL 3 ./$logFileName
echo "======================================= >> log tail ================================= " >> ./$logFileName
printNL 3 ./$logFileName
echo "--------------- info log 200 tail ----------------- " >> ./$logFileName
printNL 3 ./$logFileName
tail -200 idatafusion.etl-instance.info.log >> ./$logFileName
printNL 3 ./$logFileName
echo "--------------- error log 500 tail ----------------- " >> ./$logFileName
printNL 3 ./$logFileName
tail -500 idatafusion.etl-instance.error.log >> ./$logFileName
}
#
dltLogFile
#
unzipFile
#
printHostInfo
#
printInstanceInfo
#
printFlowInfo
#
printLogTail
#
echo ""
echo "====== >>>> flow $flow_id log save in $logFileName"
echo ""