1570 lines
58 KiB
Bash
1570 lines
58 KiB
Bash
#!/bin/bash
|
||
|
||
function showfunc() {
|
||
# 支持的功能项
|
||
opt00="|00. Status Code"
|
||
opt01="|01. Respond Time"
|
||
opt02="|02. First Dur"
|
||
opt03="|03. Error Code"
|
||
opt04="|04. Remote IP"
|
||
opt05="|05. Client IP"
|
||
opt06="|06. Method"
|
||
opt07="|07. Protocol"
|
||
opt08="|08. TOP URL"
|
||
opt09="|09. Upstream Addr"
|
||
opt10="|10. Upstream RT"
|
||
opt11="|11. Origin IP"
|
||
opt12="|12. Combo"
|
||
opt13="|13. Referer"
|
||
opt14="|14. UA"
|
||
opt15="|15. Log"
|
||
opt16="|16. QPS"
|
||
opt17="|17. -"
|
||
opt18="|18. -"
|
||
opt19="|19. -"
|
||
opt20="|20 -"
|
||
opt21="|21 -"
|
||
opt22="|22 -"
|
||
opt23="|23 -"
|
||
opt24="|24 -"
|
||
opt25="|25 -"
|
||
opt26="|26 -"
|
||
opt27="|27 -"
|
||
opt28="|28. First Dur"
|
||
opt29="|29. Combo"
|
||
opt30="|30. Client(NG) IP"
|
||
opt31="|31. Origin IP"
|
||
opt32="|32. Source SC"
|
||
opt33="|33. Status Code"
|
||
opt34="|34. Origin URL"
|
||
opt35="|35. QPS"
|
||
opt36="|36. Log"
|
||
opt37="|37. Source CT"
|
||
opt38="|38. Source RT"
|
||
opt39="|39. -"
|
||
opt40="|40. -"
|
||
opt41="|41. -"
|
||
optA="ACCESS --> "
|
||
optO="ORIGIN --> "
|
||
fmt="${c_bib}%-10s${c_e}%-17s%-18s%-19s%-17s%-15s%-17s%-19s\n"
|
||
printf $fmt "$optA" "$opt00" "$opt01" "$opt02" "$opt03" "$opt04" "$opt05" "$opt06"
|
||
printf $fmt "$optA" "$opt07" "$opt08" "$opt09" "$opt10" "$opt11" "$opt12" "$opt13"
|
||
printf $fmt "$optA" "$opt14" "$opt15" "$opt16" "$opt17" "$opt18" "$opt19" "$opt20"
|
||
echo '------------------------------------------------------------------------------------------------------------------------------------'
|
||
printf $fmt "$optO" "$opt28" "$opt29" "$opt30" "$opt31" "$opt32" "$opt33" "$opt34"
|
||
printf $fmt "$optO" "$opt35" "$opt36" "$opt37" "$opt38" "$opt39" "$opt40" "$opt41"
|
||
}
|
||
|
||
|
||
function usage() {
|
||
echo -e "${c_bg}本工具实现指定域名&节点的${c_bc}一小时粒度${c_bg}日志搜索相关功能:${c_e}\n"
|
||
showfunc && echo
|
||
echo -e "${c_by}调用方法 -- logs domain node/IP [0|1]${c_e}"
|
||
echo -e "${c_by} param 1 - 要查询的域名${c_e}"
|
||
echo -e "${c_by} param 2 - 必须是边缘/父/中心的节点中英文名称或者IP${c_e}"
|
||
echo -e "${c_by} param 3 - 可选,存在域名在平台显示为重叠实际却在通用资源池的情况,日志不会带accid,或者反之,可以使用1或0强制指定带或不带accid${c_e}"
|
||
# echo -e "${c_by}易混淆解释:${c_e}"
|
||
# echo -e "${c_by} Upstream Addr -- 后端代理服务器IP和端口${c_e}"
|
||
# echo -e "${c_by} Source SC ------ 源站返回的状态码${c_e}"
|
||
# echo -e "${c_by} Source CT ------ 与源站建立连接的时间${c_e}"
|
||
# echo -e "${c_by} Source RT ------ 源站的响应时间${c_e}"
|
||
# echo -e "${c_by} Remote IP ------ 过滤节点VIP访问次数,查看负载是否均衡${c_e}"
|
||
# echo -e "${c_by} Origin IP ------ 对于ACCESS日志,是回上层IP;对于ORIGIN日志,是回上层或回源IP${c_e}"
|
||
# echo -e "${c_by} Log ----------- 从每个RIP随机获取一条日志,可指定状态码${c_e}"
|
||
# echo -e "${c_by} QPS ------------ 获取每个RIP节点指定时间内的访问次数,而非真正QPS,可自行手动计算${c_e}"
|
||
echo
|
||
echo -e "${c_br}对于输出百分比的部分,除了状态码类以及时间类的功能,其他选项都是过滤了TOP10,所以可能会出现比例之和小于1的情况;另外,当前仅支持常规CDN以及L1-7格式的日志搜寻,暂不支持直播/安全/quic等,使用过程中遇到任何问题,可以联系fanmf11@chinatelecom.cn反馈${c_e}"
|
||
exit 222
|
||
}
|
||
|
||
function logfile() {
|
||
if [[ -d $trash ]]; then
|
||
echo -e "${c_br}对于同一个用户,同一时间只能运行一个实例,请重新运行...${c_e}"
|
||
exit 245
|
||
else
|
||
mkdir -p $trash
|
||
cd $trash && cd ..
|
||
docs=`ls`
|
||
for doc in $docs; do
|
||
[[ -f $doc ]] && rm -rf $doc
|
||
done
|
||
folders=`ls -t`
|
||
while [[ `echo $folders | awk '{print NF}'` -gt 29 ]]; do
|
||
folder=`ls -t | tail -1`
|
||
rm -rf $folder
|
||
folders=`ls -t`
|
||
done
|
||
cd $trash && touch logs
|
||
fi
|
||
}
|
||
|
||
function onCtrlC () {
|
||
# while capture Ctrl+C, kill all background processes silently and exit
|
||
exec 3>&2 # 3 is now a copy of 2
|
||
exec 2> /dev/null # 2 now points to /dev/null
|
||
sleep 1 # sleep to wait for process to die
|
||
exec 2>&3 # restore stderr to saved
|
||
exec 3>&- # close saved version
|
||
echo
|
||
echo -e "${c_bir}Ctrl+C is captured, exiting...\n${c_e}"
|
||
exit 101
|
||
}
|
||
|
||
function initial() {
|
||
# --------------------------------------------------------------------------------
|
||
# 入参正确性检测
|
||
let numOP=$# # number of parameter
|
||
OP="prefix "$@ # do a prefix cause '-' char may damage echo command
|
||
domain=`echo $OP | awk '{print $2}'` # get first param domain
|
||
label=`echo $OP | awk '{print $3}'` # get second param nodename or ip
|
||
accsw=`echo $OP | awk '{print $4}'` # get thied param, forcely acc var, 1 -- acc=reqid, 0 -- acc='-'
|
||
[[ $numOP -ne 2 && $numOP -ne 3 ]] && usage || logfile
|
||
# --------------------------------------------------------------------------------
|
||
# 检查域名是否在平台注册
|
||
res=`cat $data/domain.list | grep -w "$domain"`
|
||
[[ $res == '' ]] && { echo -e "${c_br}该域名未在天翼平台配置,一个小时内新增的域名无法查询,退出...${c_e}"; exit 247; }
|
||
|
||
# --------------------------------------------------------------------------------
|
||
# 获取正确的label
|
||
ips $label > ips.log 2>&1
|
||
# 如果不是天翼IP,否则重新回到工作目录$trash
|
||
[[ $? -ne 0 ]] && { cd $trash; cat ips.log; exit 114; } || cd $trash
|
||
|
||
# --------------------------------------------------------------------------------
|
||
# 检查是否是重叠域名,并获取正确的解析组
|
||
infos --map $domain $TS
|
||
[[ $? -eq 205 || $? -eq 231 ]] && exit 205
|
||
|
||
cd $trash
|
||
if [[ `cat map.log | wc -l` -eq 1 ]]; then
|
||
map=`cat map.log`
|
||
else
|
||
maps=`cat map.log | sort | uniq`
|
||
count=1 && > remap.log
|
||
for map in $maps; do
|
||
echo $count": "$map | tee -a remap.log
|
||
let count=count+1
|
||
done
|
||
echo -ne "${c_bg}存在分区域解析,需确定解析组名称(默认是1):${c_e}\n"
|
||
read -t 60 imap
|
||
[[ $? -ne 0 ]] && { echo -e "${c_br}60s内无任何输入,退出...${c_e}\n"; exit 102; }
|
||
# do a check to see if isp is correct or not
|
||
[[ $imap == '' ]] && let imap=1
|
||
map=`cat remap.log | awk -F ':' -v imap=$imap '$1==imap {print $2}'`
|
||
[[ $map == '' ]] && { echo -e "${c_br}请输入正确的序号,退出...${c_e}"; exit 165; }
|
||
fi
|
||
|
||
getlastcover $map > map.log
|
||
cat map.log | grep -q 'can not find sys_id'
|
||
[[ $? -eq 0 ]] && { echo -e "${c_br}该解析组未在平台配置,退出..."; exit 163; }
|
||
|
||
accid=`cat info.log | awk -F ':' '$1==3 {print $2}'`
|
||
overlap=`cat $data/domain.list | grep $accid | grep $domain | awk -F ',' '{print $17}'`
|
||
[[ $overlap == '"是"' ]] && overlap=1 || overlap=0
|
||
# 因为有些域名系统显示是重叠域名,实际日志并没有带accid,因为用的通用资源池
|
||
if [[ $accsw != "" && $accsw -eq 0 ]]; then
|
||
ida='-'
|
||
elif [[ $accsw != "" && $accsw -eq 1 ]]; then
|
||
ida=$accid
|
||
elif [[ $overlap -eq 0 ]]; then
|
||
ida='-'
|
||
elif [[ $overlap -eq 1 ]]; then
|
||
ida=$accid
|
||
fi
|
||
|
||
# --------------------------------------------------------------------------------
|
||
# 检查是否是英文标签的格式,是的话,保持label原值,否则做进一步操作
|
||
echo $label | grep -Eq "(ct|cu|cm|bgp|ctbgp|cmbgp|cubgp|as|eu|sa|na|cbn|cern)_[a-z]{2,3}_[a-z]{2,20}[0-9]{1,2}_(c|e|n)[0-9]{0,2}"
|
||
if [[ $? -eq 0 ]]; then
|
||
label=$label
|
||
else
|
||
# 获取所有相关英文标签
|
||
labels=`cat ips.log | grep -Eo "(ct|cu|cm|bgp|ctbgp|cmbgp|cubgp|as|eu|sa|na|cbn|cern)_[a-z]{2,3}_[a-z]{2,20}[0-9]{1,2}_(c|e|n)[0-9]{0,2}" | sort | uniq`
|
||
[[ $labels == "" ]] && { echo -e "${c_bir}请输入正确的边缘/父层/中心节点的IP或者中英文节点名称,退出...${c_e}"; exit 232; }
|
||
# 如果有多个匹配,则让用户确认是哪个
|
||
if [[ `echo $labels | awk '{print NF}'` -gt 1 ]]; then
|
||
for item in $labels; do
|
||
cat map.log | grep -wq $item
|
||
[[ $? -eq 0 ]] && echo -e "${c_biy} - $item${c_e}" || echo " - $item"
|
||
done
|
||
echo -e "${c_bp}输入的 ${c_by}$label${c_bp} 边缘节点中有两个组,请确认具体是哪个:${c_e}"
|
||
read -t 60 label_input
|
||
# 判断60s内无输入,则自动退出
|
||
[[ $? -ne 0 ]] && { echo -e "${c_br}60s内无任何输入,退出...\n${c_e}"; exit 116; }
|
||
# 判断输入信息是否是正确的
|
||
echo $labels | grep -wq $label_input
|
||
[[ $? -ne 0 ]] && { echo -e "${c_br}需要从如上选择正确的边缘节点信息,请重新运行,退出...\n${c_e}"; exit 117; }
|
||
label=$label_input
|
||
# 否则,获取label
|
||
else
|
||
label=$labels
|
||
fi
|
||
fi
|
||
cat map.log | grep -wq $label
|
||
if [[ $? -ne 0 ]]; then
|
||
echo -e "${c_by}${label}${c_bc}不在$domain的解析组内,判断是否是父层节点(y/N):${c_e}"
|
||
read -t 60 isc
|
||
# 判断60s内无输入,则自动退出
|
||
[[ $? -ne 0 ]] && { echo -e "${c_br}60s内无任何输入,退出...\n${c_e}"; exit 116; }
|
||
# 判断输入信息是否是正确的
|
||
[[ $isc == 'n' || $isc == 'N' || $isc == 'no' || $isc == 'No' || $isc == 'NO' ]] && exit 234
|
||
fi
|
||
|
||
# --------------------------------------------------------------------------------
|
||
# 获取rip_list
|
||
ips $label > ips.log 2>&1 && cd $trash
|
||
rip_list=`cat ips.log | sed -n '/RIP/, /VIP/p' | grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq`
|
||
|
||
# 60s时间接收输入:要查询的时间
|
||
echo -e "${c_bg}请输入要查询的reqID生成时间,格式为yyyymmddHH(默认当前 - $(date +%Y%m%d%H)): ${c_e} "
|
||
read -t 60 time_range
|
||
[[ $? -ne 0 ]] && { echo -e "${c_br}60s内无任何输入,退出...\n${c_e}"; exit 105; }
|
||
time_check
|
||
type_inp
|
||
}
|
||
|
||
#=======================================================================================
|
||
# 功能:获取查询指标
|
||
# 入参:None
|
||
# 出参:itype
|
||
function type_inp() {
|
||
# 60s时间接收输入:要查询的类型
|
||
showfunc
|
||
echo -e "${c_bg}请输入要查询的指标(默认00): ${c_e}"
|
||
read -t 60 itype
|
||
[[ $? -ne 0 ]] && { echo -e "${c_br}60s内无任何输入,退出...\n${c_e}"; exit 122; }
|
||
[[ $itype == '' ]] && itype='00'
|
||
|
||
|
||
# 60s时间接收输入:要查询的类型
|
||
echo -e "1. 静态/下载/点播/全站(default - v03/ov06)"
|
||
echo -e "2. 直播(ACC1/2/3)"
|
||
echo -e "3. 安全"
|
||
echo -e "4. quic"
|
||
echo -e "5. L1/L2/L3/L4/L5/L6/L7(e.g. 查询L3,则输入5.3)"
|
||
echo -e "${c_bg}请输入要查询的业务类型(默认1,目前仅支持1/5): ${c_e}"
|
||
read -t 60 ptype
|
||
[[ $? -ne 0 ]] && { echo -e "${c_br}60s内无任何输入,退出...\n${c_e}"; exit 122; }
|
||
[[ $ptype == '' ]] && ptype='1'
|
||
# 根据业务类型,指定前缀
|
||
[[ $ptype == '1' ]] && prefix=''
|
||
[[ $ptype == '5.1' ]] && prefix='L1_'
|
||
[[ $ptype == '5.2' ]] && prefix='L2_'
|
||
[[ $ptype == '5.3' ]] && prefix='L3_'
|
||
[[ $ptype == '5.4' ]] && prefix='L4_'
|
||
[[ $ptype == '5.5' ]] && prefix='L5_'
|
||
[[ $ptype == '5.6' ]] && prefix='L6_'
|
||
[[ $ptype == '5.7' ]] && prefix='L7_'
|
||
}
|
||
|
||
#=======================================================================================
|
||
# 功能:检查输入的时间范围是否符合格式要求:14天内,不能是未来时间,10位数字
|
||
# 入参:time_range
|
||
# 出参:current, year, month, day, hour, time_range
|
||
function time_check() {
|
||
# 如果入参 time_range 的值是空,或者说函数没有入参
|
||
if [[ $time_range == '' ]]; then
|
||
time_range=`date +%Y%m%d%H`
|
||
year=${time_range:0:4}
|
||
month=${time_range:4:2}
|
||
day=${time_range:6:2}
|
||
hour=${time_range:8:2}
|
||
current='yes'
|
||
return 0
|
||
fi
|
||
|
||
# 检查入参是否正确:长度,表示的时间范围等
|
||
[[ ! $time_range =~ ^[0-9]{10}$ ]] && { echo -e "${c_br}请输入正确的时间格式,退出...\n${c_e}"; exit 106; }
|
||
# 验证入参是10天以内的时间范围
|
||
now=`date +%s`
|
||
# 准备工作,后续要用
|
||
year=${time_range:0:4}
|
||
month=${time_range:4:2}
|
||
day=${time_range:6:2}
|
||
hour=${time_range:8:2}
|
||
# 将入参转换为秒
|
||
previous=`date -d "$year-$month-$day $hour:00:00" +"%s"`
|
||
# 计算当前时间 - 入参时间
|
||
let range_s=now-previous
|
||
let range_d=range_s/86400
|
||
# 如果是14天以外的入参时间,则不可查
|
||
[[ $range_d -gt 10 ]] && { echo -e "${c_br}只能查找最近10天以内的日志记录,退出...\n${c_e}"; exit 107; }
|
||
# 判断 time_range 是否是当前时间,并用 current 来标识,默认是当前,即 current = yes
|
||
[[ $time_range == `date +%Y%m%d%H` ]] && current='yes' || current='no'
|
||
}
|
||
|
||
function is_sc_specified() {
|
||
# 是否指定状态码
|
||
echo -e "${c_bb}直接回车默认过滤所有状态码,是否需要指定(000~999):${c_e}"
|
||
read -t 60 sc
|
||
# 判断60s内无输入,则自动退出
|
||
[[ $? -ne 0 ]] && { echo -e "${c_br}60s内无任何输入,退出...\n${c_e}"; exit 116; }
|
||
# 判断输入信息是否是正确的,当输入的状态码是空,则不做过滤,全部输出
|
||
|
||
if [[ $sc != "" ]]; then
|
||
echo $sc | grep -Eq "[0-9]{1,3}"
|
||
[[ $? -ne 0 ]] && { echo -e "${c_br}需要指定正确的状态码值,退出...\n${c_e}"; exit 117; }
|
||
fi
|
||
}
|
||
|
||
function cdn_access_common() {
|
||
field=$1
|
||
is_sc_specified
|
||
|
||
# 如果time_range是当前时间
|
||
exec 3>&2 && exec 2> /dev/null
|
||
if [[ $current == 'yes' ]]; then
|
||
# ssh 进每一个rip,搜索core_access.log,设定ssh连接超时时长为CT
|
||
# 把搜索的结果放进access_$rip文件,所有的ssh命令都后台执行
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_access_log/${prefix}core_access.log | grep $domain;
|
||
cat $cdn_access_log/${prefix}core_access.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=1 -v code="$sc" -v acc="$ida" -v pos="$field" -f $toolbox/logcommon.awk | sort -nk2 | \
|
||
sort -nk2 | tail > access_${rip} &
|
||
done
|
||
# 如果time_range不是当前时间
|
||
else
|
||
# 简单粗暴地,分别过滤回滚文件和未归档两部分日志文件
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_access_log/${prefix}core_access.log_*${time_range}* | grep $domain;
|
||
zcat $cdn_access_log/$year$month$day/${prefix}core_access.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=1 -v code="$sc" -v acc="$ida" -v pos="$field" -f $toolbox/logcommon.awk | sort -nk2 | \
|
||
sort -nk2 | tail > access_${rip} &
|
||
done
|
||
fi
|
||
exec 2>&3 && exec 3>&- && wait
|
||
|
||
for rip in $rip_list; do
|
||
echo -e "=============== ${c_biy}$label: ${c_bic}$rip${c_e} ==============="
|
||
cat access_$rip && echo
|
||
done
|
||
}
|
||
|
||
function cdn_access_time() {
|
||
field=$1
|
||
is_sc_specified
|
||
|
||
# 如果time_range是当前时间
|
||
exec 3>&2 && exec 2> /dev/null
|
||
if [[ $current == 'yes' ]]; then
|
||
# ssh 进每一个rip,搜索core_access.log,设定ssh连接超时时长为CT
|
||
# 把搜索的结果放进access_$rip文件,所有的ssh命令都后台执行
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_access_log/${prefix}core_access.log | grep $domain;
|
||
cat $cdn_access_log/${prefix}core_access.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=1 -v code="$sc" -v acc="$ida" -v pos="$field" -f $toolbox/logtime.awk | \
|
||
sort -nk3 > access_${rip} &
|
||
done
|
||
# 如果time_range不是当前时间
|
||
else
|
||
# 简单粗暴地,分别过滤回滚文件和未归档两部分日志文件
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_access_log/${prefix}core_access.log_*${time_range}* | grep $domain;
|
||
zcat $cdn_access_log/$year$month$day/${prefix}core_access.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=1 -v code="$sc" -v acc="$ida" -v pos="$field" -f $toolbox/logtime.awk | \
|
||
sort -nk3 > access_${rip} &
|
||
done
|
||
fi
|
||
exec 2>&3 && exec 3>&- && wait
|
||
|
||
for rip in $rip_list; do
|
||
echo -e "=============== ${c_biy}$label: ${c_bic}$rip${c_e} ==============="
|
||
cat access_$rip && echo
|
||
done
|
||
}
|
||
|
||
function cdn_access_sc() {
|
||
# 如果time_range是当前时间
|
||
exec 3>&2 && exec 2> /dev/null
|
||
if [[ $current == 'yes' ]]; then
|
||
# ssh 进每一个rip,搜索core_access.log,设定ssh连接超时时长为CT
|
||
# 把搜索的结果放进access_$rip文件,所有的ssh命令都后台执行
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_access_log/${prefix}core_access.log | grep $domain;
|
||
cat $cdn_access_log/${prefix}core_access.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=1 -v acc="$ida" -v pos=4 -f $toolbox/logsc.awk | \
|
||
sort -nk1 | column -t > access_${rip} &
|
||
done
|
||
# 如果time_range不是当前时间
|
||
else
|
||
# 简单粗暴地,分别过滤回滚文件和未归档两部分日志文件
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_access_log/${prefix}core_access.log_*${time_range}* | grep $domain;
|
||
zcat $cdn_access_log/$year$month$day/${prefix}core_access.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=1 -v acc="$ida" -v pos=4 -f $toolbox/logsc.awk | \
|
||
sort -nk1 | column -t > access_${rip} &
|
||
done
|
||
fi
|
||
exec 2>&3 && exec 3>&- && wait
|
||
for rip in $rip_list; do
|
||
echo -e "=============== ${c_biy}$label: ${c_bic}$rip${c_e} ==============="
|
||
cat access_$rip && echo
|
||
done
|
||
}
|
||
|
||
function cdn_access_qps() {
|
||
is_sc_specified
|
||
|
||
# 如果time_range是当前时间
|
||
exec 3>&2 && exec 2> /dev/null
|
||
if [[ $current == 'yes' ]]; then
|
||
# ssh 进每一个rip,搜索core_access.log,设定ssh连接超时时长为CT
|
||
# 把搜索的结果放进access_$rip文件,所有的ssh命令都后台执行
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_access_log/${prefix}core_access.log | grep $domain;
|
||
cat $cdn_access_log/${prefix}core_access.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=1 -v code="$sc" -v acc="$ida" -f $toolbox/logqps.awk | \
|
||
sort -nk1 | column -t > access_${rip} &
|
||
done
|
||
# 如果time_range不是当前时间
|
||
else
|
||
# 简单粗暴地,分别过滤回滚文件和未归档两部分日志文件
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_access_log/${prefix}core_access.log_*${time_range}* | grep $domain;
|
||
zcat $cdn_access_log/$year$month$day/${prefix}core_access.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=1 -v code="$sc" -v acc="$ida" -f $toolbox/logqps.awk | \
|
||
sort -nk1 | column -t > access_${rip} &
|
||
done
|
||
fi
|
||
exec 2>&3 && exec 3>&- && wait
|
||
|
||
for rip in $rip_list; do
|
||
echo -e "=============== ${c_biy}$label: ${c_bic}$rip${c_e} ==============="
|
||
cat access_$rip && echo
|
||
done
|
||
}
|
||
|
||
function is_access_condtion_specified() {
|
||
# 是否指定过滤条件
|
||
echo -e "${c_bb}根据如上对应组件的过滤功能,可查询符合特定组合条件的日志占比,格式如下${c_e}"
|
||
echo -e "${c_big}00: 404"
|
||
echo -e "02: 0-1"
|
||
echo -e "03: 2"
|
||
echo -e "04: 59.56.177.149"
|
||
echo -e "06: Post"
|
||
echo -e "08: https://www.ctyun.cn"
|
||
echo -e "14: Chrome/54.0 (Windows NT 10.0)${c_e}"
|
||
echo -e "${c_bic}Ctrl + D${c_e}"
|
||
echo -e "${c_by}每行对应一个条件,Ctrl + D结束输入:${c_e}"
|
||
cat > combo.log
|
||
echo "" >> combo.log
|
||
echo -e "${c_bb}\n正在处理中...${c_e}"
|
||
|
||
f00=""; f01=""; f02=""; f03=""; f04=""; f05=""; f06=""; f07=""; f08=""; f09=""; f10=""; f11=""; f13="";
|
||
f14=""; f01s=""; f02s=""; f10s=""; f01e=""; f02e=""; f10e=""
|
||
while read line; do
|
||
[[ $line == "" ]] && continue
|
||
index=`echo $line | awk -F ':' '{print $1}'`
|
||
filter=${line:3}
|
||
[[ "$index" == '00' ]] && { f00=$filter; continue; }
|
||
[[ "$index" == '01' ]] && { f01=$filter; continue; }
|
||
[[ "$index" == '02' ]] && { f02=$filter; continue; }
|
||
[[ "$index" == '03' ]] && { f03=$filter; continue; }
|
||
[[ "$index" == '04' ]] && { f04=$filter; continue; }
|
||
[[ "$index" == '05' ]] && { f05=$filter; continue; }
|
||
[[ "$index" == '06' ]] && { f06=$filter; continue; }
|
||
[[ "$index" == '07' ]] && { f07=$filter; continue; }
|
||
[[ "$index" == '08' ]] && { f08=$filter; continue; }
|
||
[[ "$index" == '09' ]] && { f09=$filter; continue; }
|
||
[[ "$index" == '10' ]] && { f10=$filter; continue; }
|
||
[[ "$index" == '11' ]] && { f11=$filter; continue; }
|
||
[[ "$index" == '13' ]] && { f13=$filter; continue; }
|
||
[[ "$index" == '14' ]] && { f14=$filter; continue; }
|
||
echo -e "${c_bir}[Ignored]${c_e} -- $line"
|
||
done < combo.log
|
||
|
||
# 处理时间类参数,只允许区间参数
|
||
[[ $f01 != "" ]] && { f01s=`echo $f01 | awk -F '-' '{print $1}'`; f01e=`echo $f01 | awk -F '-' '{print $2}'`; }
|
||
[[ $f02 != "" ]] && { f02s=`echo $f02 | awk -F '-' '{print $1}'`; f02e=`echo $f02 | awk -F '-' '{print $2}'`; }
|
||
[[ $f10 != "" ]] && { f10s=`echo $f10 | awk -F '-' '{print $1}'`; f10e=`echo $f10 | awk -F '-' '{print $2}'`; }
|
||
echo
|
||
}
|
||
|
||
function cdn_access_combo() {
|
||
is_access_condtion_specified
|
||
|
||
# 如果time_range是当前时间
|
||
exec 3>&2 && exec 2> /dev/null
|
||
if [[ $current == 'yes' ]]; then
|
||
# ssh 进每一个rip,搜索core_access.log,设定ssh连接超时时长为CT
|
||
# 把搜索的结果放进access_$rip文件,所有的ssh命令都后台执行
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_access_log/${prefix}core_access.log | grep $domain;
|
||
cat $cdn_access_log/${prefix}core_access.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=1 -v acc="$ida" -v f00="$f00" -v f01="$f01" -v f02="$f02" -v f03="$f03" \
|
||
-v f04="$f04" -v f05="$f05" -v f06="$f06" -v f07="$f07" -v f08="$f08" -v f09="$f09" -v f10="$f10" -v f11="$f11" \
|
||
-v f13="$f13" -v f14="$f14" -v f01s="$f01s" -v f01e="$f01e" -v f02s="$f02s" -v f02e="$f02e" -v f10s="$f10s" \
|
||
-v f10e="$f10e" -v atype="combo" -f $toolbox/logcombo.awk | \
|
||
sort -nk1 | column -t > access_${rip} &
|
||
done
|
||
# 如果time_range不是当前时间
|
||
else
|
||
# 简单粗暴地,分别过滤回滚文件和未归档两部分日志文件
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_access_log/${prefix}core_access.log_*${time_range}* | grep $domain;
|
||
zcat $cdn_access_log/$year$month$day/${prefix}core_access.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=1 -v acc="$ida" -v f00="$f00" -v f01="$f01" -v f02="$f02" -v f03="$f03" \
|
||
-v f04="$f04" -v f05="$f05" -v f06="$f06" -v f07="$f07" -v f08="$f08" -v f09="$f09" -v f10="$f10" -v f11="$f11" \
|
||
-v f13="$f13" -v f14="$f14" -v f01s="$f01s" -v f01e="$f01e" -v f02s="$f02s" -v f02e="$f02e" -v f10s="$f10s" \
|
||
-v f10e="$f10e" -v atype="combo" -f $toolbox/logcombo.awk | \
|
||
sort -nk1 | column -t > access_${rip} &
|
||
done
|
||
fi
|
||
exec 2>&3 && exec 3>&- && wait
|
||
|
||
for rip in $rip_list; do
|
||
echo -e "=============== ${c_biy}$label: ${c_bic}$rip${c_e} ==============="
|
||
cat access_$rip && echo
|
||
done
|
||
}
|
||
|
||
function cdn_access_logs() {
|
||
is_access_condtion_specified
|
||
|
||
# 如果time_range是当前时间
|
||
exec 3>&2 && exec 2> /dev/null
|
||
if [[ $current == 'yes' ]]; then
|
||
# ssh 进每一个rip,搜索core_access.log,设定ssh连接超时时长为CT
|
||
# 把搜索的结果放进access_$rip文件,所有的ssh命令都后台执行
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_access_log/${prefix}core_access.log | grep $domain;
|
||
cat $cdn_access_log/${prefix}core_access.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=1 -v acc="$ida" -v f00="$f00" -v f01="$f01" -v f02="$f02" -v f03="$f03" \
|
||
-v f04="$f04" -v f05="$f05" -v f06="$f06" -v f07="$f07" -v f08="$f08" -v f09="$f09" -v f10="$f10" -v f11="$f11" \
|
||
-v f13="$f13" -v f14="$f14" -v f01s="$f01s" -v f01e="$f01e" -v f02s="$f02s" -v f02e="$f02e" -v f10s="$f10s" \
|
||
-v f10e="$f10e" -v atype="logs" -f $toolbox/logcombo.awk | \
|
||
grep -Ev "$hour:(59|00):[0-5][0-9] \+0800" | head -n $((number % 1000)) | tail -n 1 > access_${rip} &
|
||
done
|
||
# 如果time_range不是当前时间
|
||
else
|
||
# 简单粗暴地,分别过滤回滚文件和未归档两部分日志文件
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_access_log/${prefix}core_access.log_*${time_range}* | grep $domain;
|
||
zcat $cdn_access_log/$year$month$day/${prefix}core_access.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=1 -v acc="$ida" -v f00="$f00" -v f01="$f01" -v f02="$f02" -v f03="$f03" \
|
||
-v f04="$f04" -v f05="$f05" -v f06="$f06" -v f07="$f07" -v f08="$f08" -v f09="$f09" -v f10="$f10" -v f11="$f11" \
|
||
-v f13="$f13" -v f14="$f14" -v f01s="$f01s" -v f01e="$f01e" -v f02s="$f02s" -v f02e="$f02e" -v f10s="$f10s" \
|
||
-v f10e="$f10e" -v atype="logs" -f $toolbox/logcombo.awk | \
|
||
grep -Ev "$hour:(59|00):[0-5][0-9] \+0800" | head -n $((number % 1000)) | tail -n 1 > access_${rip} &
|
||
done
|
||
fi
|
||
exec 2>&3 && exec 3>&- && wait
|
||
|
||
for rip in $rip_list; do
|
||
echo -e "=============== ${c_biy}$label: ${c_bic}$rip${c_e} ==============="
|
||
cat access_$rip && echo
|
||
done
|
||
}
|
||
|
||
function cdn_origin_common() {
|
||
field=$1
|
||
is_sc_specified
|
||
|
||
# 如果time_range是当前时间
|
||
exec 3>&2 && exec 2> /dev/null
|
||
if [[ $current == 'yes' ]]; then
|
||
# ssh 进每一个rip,搜索origin.log,设定ssh连接超时时长为CT
|
||
# 把搜索的结果放进origin_$rip文件,所有的ssh命令都后台执行
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_origin_log/origin.log | grep $domain;
|
||
cat $cdn_origin_log/origin.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=0 -v code="$sc" -v acc="$ida" -v pos="$field" -f $toolbox/logcommon.awk | \
|
||
sort -nk2 | tail > origin_${rip} &
|
||
done
|
||
# 如果time_range不是当前时间
|
||
else
|
||
# 简单粗暴地,分别过滤回滚文件和未归档两部分日志文件
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_origin_log/origin.log_*${time_range}* | grep $domain;
|
||
zcat $cdn_origin_log/$year$month$day/origin.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=0 -v code="$sc" -v acc="$ida" -v pos="$field" -f $toolbox/logcommon.awk | \
|
||
sort -nk2 | tail > origin_${rip} &
|
||
done
|
||
fi
|
||
exec 2>&3 && exec 3>&- && wait
|
||
|
||
for rip in $rip_list; do
|
||
echo -e "=============== ${c_biy}$label: ${c_bic}$rip${c_e} ==============="
|
||
cat origin_$rip && echo
|
||
done
|
||
}
|
||
|
||
|
||
function cdn_origin_time() {
|
||
field=$1
|
||
is_sc_specified
|
||
|
||
# 如果time_range是当前时间
|
||
exec 3>&2 && exec 2> /dev/null
|
||
if [[ $current == 'yes' ]]; then
|
||
# ssh进每一个rip,搜索origin.log,设定ssh连接超时时长为CT
|
||
# 把搜索的结果放进origin_$rip文件,所有的ssh命令都后台执行
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_origin_log/origin.log | grep $domain;
|
||
cat $cdn_origin_log/origin.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=0 -v code="$sc" -v acc="$ida" -v pos="$field" -f $toolbox/logtime.awk | \
|
||
sort -nk3 > origin_${rip} &
|
||
done
|
||
# 如果time_range不是当前时间
|
||
else
|
||
# 简单粗暴地,分别过滤回滚文件和未归档两部分日志文件
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_origin_log/origin.log_*${time_range}* | grep $domain;
|
||
zcat $cdn_origin_log/$year$month$day/origin.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=0 -v code="$sc" -v acc="$ida" -v pos="$field" -f $toolbox/logtime.awk | \
|
||
sort -nk3 > origin_${rip} &
|
||
done
|
||
fi
|
||
exec 2>&3 && exec 3>&- && wait
|
||
|
||
for rip in $rip_list; do
|
||
echo -e "=============== ${c_biy}$label: ${c_bic}$rip${c_e} ==============="
|
||
cat origin_$rip && echo
|
||
done
|
||
}
|
||
|
||
function cdn_origin_sc() {
|
||
[[ $1 == 'sc' ]] && field=11
|
||
[[ $1 == 'ssc' ]] && field=10
|
||
# 如果time_range是当前时间
|
||
exec 3>&2 && exec 2> /dev/null
|
||
if [[ $current == 'yes' ]]; then
|
||
# ssh 进每一个rip,搜索origin.log,设定ssh连接超时时长为CT
|
||
# 把搜索的结果放进origin_$rip文件,所有的ssh命令都后台执行
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_origin_log/origin.log | grep $domain;
|
||
cat $cdn_origin_log/origin.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=0 -v acc="$ida" -v pos="$field" -f $toolbox/logsc.awk | \
|
||
sort -nk1 | column -t > origin_${rip} &
|
||
done
|
||
# 如果time_range不是当前时间
|
||
else
|
||
# 简单粗暴地,分别过滤回滚文件和未归档两部分日志文件
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_origin_log/origin.log_*${time_range}* | grep $domain;
|
||
zcat $cdn_origin_log/$year$month$day/origin.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=0 -v acc="$ida" -v pos="$field" -f $toolbox/logsc.awk | \
|
||
sort -nk1 | column -t > origin_${rip} &
|
||
done
|
||
fi
|
||
exec 2>&3 && exec 3>&- && wait
|
||
for rip in $rip_list; do
|
||
echo -e "=============== ${c_biy}$label: ${c_bic}$rip${c_e} ==============="
|
||
cat origin_$rip && echo
|
||
done
|
||
}
|
||
|
||
function cdn_origin_qps() {
|
||
is_sc_specified
|
||
|
||
# 如果time_range是当前时间
|
||
exec 3>&2 && exec 2> /dev/null
|
||
if [[ $current == 'yes' ]]; then
|
||
# ssh 进每一个rip,搜索origin.log,设定ssh连接超时时长为CT
|
||
# 把搜索的结果放进origin_$rip文件,所有的ssh命令都后台执行
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_origin_log/origin.log | grep $domain;
|
||
cat $cdn_origin_log/origin.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=0 -v code="$sc" -v acc="$ida" -f $toolbox/logqps.awk | \
|
||
sort -nk1 | column -t > origin_${rip} &
|
||
done
|
||
# 如果time_range不是当前时间
|
||
else
|
||
# 简单粗暴地,分别过滤回滚文件和未归档两部分日志文件
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_origin_log/origin.log_*${time_range}* | grep $domain;
|
||
zcat $cdn_origin_log/$year$month$day/origin.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=0 -v code="$sc" -v acc="$ida" -f $toolbox/logqps.awk | \
|
||
sort -nk1 | column -t > origin_${rip} &
|
||
done
|
||
fi
|
||
exec 2>&3 && exec 3>&- && wait
|
||
|
||
for rip in $rip_list; do
|
||
echo -e "=============== ${c_biy}$label: ${c_bic}$rip${c_e} ==============="
|
||
cat origin_$rip && echo
|
||
done
|
||
}
|
||
|
||
function is_origin_condtion_specified() {
|
||
# 是否指定过滤条件
|
||
echo -e "${c_bb}根据如上对应组件的过滤功能,可查询符合特定组合条件的日志占比,格式如下${c_e}"
|
||
echo -e "${c_big}28: 0-1"
|
||
echo -e "31: 59.56.177.149"
|
||
echo -e "33: 404"
|
||
echo -e "34: https://www.ctyun.cn"
|
||
echo -e "${c_bic}Ctrl + D${c_e}"
|
||
echo -e "${c_by}每行对应一个条件,Ctrl + D结束输入:${c_e}"
|
||
cat > combo.log
|
||
echo "" >> combo.log
|
||
echo -e "${c_bb}\n正在处理中...${c_e}"
|
||
|
||
f28=""; f30=""; f31=""; f32=""; f33=""; f34=""; f37=""; f38=""; f28s=""; f28e=""; f37s=""; f37e=""; f38s=""; f38e=""
|
||
while read line; do
|
||
[[ $line == "" ]] && continue
|
||
index=`echo $line | awk -F ':' '{print $1}'`
|
||
filter=${line:3}
|
||
[[ "$index" == '28' ]] && { f28=$filter; continue; }
|
||
[[ "$index" == '30' ]] && { f30=$filter; continue; }
|
||
[[ "$index" == '31' ]] && { f31=$filter; continue; }
|
||
[[ "$index" == '32' ]] && { f32=$filter; continue; }
|
||
[[ "$index" == '33' ]] && { f33=$filter; continue; }
|
||
[[ "$index" == '34' ]] && { f34=$filter; continue; }
|
||
[[ "$index" == '37' ]] && { f37=$filter; continue; }
|
||
[[ "$index" == '38' ]] && { f38=$filter; continue; }
|
||
echo -e "${c_bir}[Ignored]${c_e} -- $line"
|
||
done < combo.log
|
||
|
||
# 处理时间类参数,只允许区间参数
|
||
[[ $f28 != "" ]] && { f28s=`echo $f28 | awk -F '-' '{print $1}'`; f28e=`echo $f28 | awk -F '-' '{print $2}'`; }
|
||
[[ $f37 != "" ]] && { f37s=`echo $f37 | awk -F '-' '{print $1}'`; f37e=`echo $f37 | awk -F '-' '{print $2}'`; }
|
||
[[ $f38 != "" ]] && { f38s=`echo $f38 | awk -F '-' '{print $1}'`; f38e=`echo $f38 | awk -F '-' '{print $2}'`; }
|
||
echo
|
||
}
|
||
|
||
function cdn_origin_combo() {
|
||
is_origin_condtion_specified
|
||
|
||
# 如果time_range是当前时间
|
||
exec 3>&2 && exec 2> /dev/null
|
||
if [[ $current == 'yes' ]]; then
|
||
# ssh 进每一个rip,搜索origin.log,设定ssh连接超时时长为CT
|
||
# 把搜索的结果放进origin_$rip文件,所有的ssh命令都后台执行
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_origin_log/origin.log | grep $domain;
|
||
cat $cdn_origin_log/origin.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=0 -v acc="$ida" -v f28="$f28" -v f30="$f30" -v f31="$f31" -v f32="$f32" \
|
||
-v f33="$f33" -v f34="$f34" -v f37="$f37" -v f38="$f38" -v f28s="$f28s" -v f28e="$f28e" -v f37s="$f37s" \
|
||
-v f37e="$f37e" -v f38s="$f38s" -v f38e="$f38e" -v atype="combo" -f $toolbox/logcombo.awk | \
|
||
sort -nk1 | column -t > origin_${rip} &
|
||
done
|
||
# 如果time_range不是当前时间
|
||
else
|
||
# 简单粗暴地,分别过滤回滚文件和未归档两部分日志文件
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_origin_log/origin.log_*${time_range}* | grep $domain;
|
||
zcat $cdn_origin_log/$year$month$day/origin.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=0 -v acc="$ida" -v f28="$f28" -v f30="$f30" -v f31="$f31" -v f32="$f32" \
|
||
-v f33="$f33" -v f34="$f34" -v f37="$f37" -v f38="$f38" -v f28s="$f28s" -v f28e="$f28e" -v f37s="$f37s" \
|
||
-v f37e="$f37e" -v f38s="$f38s" -v f38e="$f38e" -v atype="combo" -f $toolbox/logcombo.awk | \
|
||
sort -nk1 | column -t > origin_${rip} &
|
||
done
|
||
fi
|
||
exec 2>&3 && exec 3>&- && wait
|
||
|
||
for rip in $rip_list; do
|
||
echo -e "=============== ${c_biy}$label: ${c_bic}$rip${c_e} ==============="
|
||
cat origin_$rip && echo
|
||
done
|
||
}
|
||
|
||
function cdn_origin_logs() {
|
||
is_origin_condtion_specified
|
||
|
||
# 如果time_range是当前时间
|
||
exec 3>&2 && exec 2> /dev/null
|
||
if [[ $current == 'yes' ]]; then
|
||
# ssh 进每一个rip,搜索origin.log,设定ssh连接超时时长为CT
|
||
# 把搜索的结果放进origin_$rip文件,所有的ssh命令都后台执行
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_origin_log/origin.log | grep $domain;
|
||
cat $cdn_origin_log/origin.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=0 -v acc="$ida" -v f28="$f28" -v f30="$f30" -v f31="$f31" -v f32="$f32" \
|
||
-v f33="$f33" -v f34="$f34" -v f37="$f37" -v f38="$f38" -v f28s="$f28s" -v f28e="$f28e" -v f37s="$f37s" \
|
||
-v f37e="$f37e" -v f38s="$f38s" -v f38e="$f38e" -v atype="logs" -f $toolbox/logcombo.awk | \
|
||
grep -Ev "$hour:(59|00):[0-5][0-9] \+0800" | head -n $((number % 1000)) | tail -n 1 > origin_${rip} &
|
||
done
|
||
# 如果time_range不是当前时间
|
||
else
|
||
# 简单粗暴地,分别过滤回滚文件和未归档两部分日志文件
|
||
for rip in $rip_list; do
|
||
ssh -o ConnectTimeout=$CT $rip "
|
||
cat $cdn_origin_log/origin.log_*${time_range}* | grep $domain;
|
||
zcat $cdn_origin_log/$year$month$day/origin.log_*${time_range}* | grep $domain" | grep $domain | \
|
||
awk -F '"' -v comp=0 -v acc="$ida" -v f28="$f28" -v f30="$f30" -v f31="$f31" -v f32="$f32" \
|
||
-v f33="$f33" -v f34="$f34" -v f37="$f37" -v f38="$f38" -v f28s="$f28s" -v f28e="$f28e" -v f37s="$f37s" \
|
||
-v f37e="$f37e" -v f38s="$f38s" -v f38e="$f38e" -v atype="logs" -f $toolbox/logcombo.awk | \
|
||
grep -Ev "$hour:(59|00):[0-5][0-9] \+0800" | head -n $((number % 1000)) | tail -n 1 > origin_${rip} &
|
||
done
|
||
fi
|
||
exec 2>&3 && exec 3>&- && wait
|
||
|
||
for rip in $rip_list; do
|
||
echo -e "=============== ${c_biy}$label: ${c_bic}$rip${c_e} ==============="
|
||
cat origin_$rip && echo
|
||
done
|
||
}
|
||
|
||
|
||
# ============================================================================================================
|
||
# Part 00: Status Code
|
||
function statusCodeA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
statusCodeA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
statusCodeA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function statusCodeA1() {
|
||
cdn_access_sc
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 01: Respond Time
|
||
function respondTimeA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
respondTimeA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
respondTimeA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function respondTimeA1() {
|
||
cdn_access_time "6"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 02: First Dur
|
||
function firstDurA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
firstDurA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
firstDurA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function firstDurA1() {
|
||
cdn_access_time "9"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 03: Error Code
|
||
function errorCodeA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
errorCodeA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
errorCodeA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function errorCodeA1() {
|
||
cdn_access_common "10"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 04: Remote IP
|
||
function remoteIPA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
remoteIPA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
remoteIPA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function remoteIPA1() {
|
||
cdn_access_common "11"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 05: Client IP
|
||
function clientIPA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
clientIPA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
clientIPA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function clientIPA1() {
|
||
cdn_access_common "13"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 06: Method
|
||
function methodA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
methodA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
methodA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function methodA1() {
|
||
cdn_access_common "15"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 07: Protocol
|
||
function protocolA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
protocolA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
protocolA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function protocolA1() {
|
||
cdn_access_common "16"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 08: Top URL
|
||
function topUrlA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
topUrlA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
topUrlA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function topUrlA1() {
|
||
cdn_access_common "18"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 09: Upstream Addr
|
||
function upstreamAddrA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
upstreamAddrA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
upstreamAddrA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function upstreamAddrA1() {
|
||
cdn_access_common "24"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 10: Upstream Respond Time
|
||
function upstreamRTimeA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
upstreamRTimeA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
upstreamRTimeA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function upstreamRTimeA1() {
|
||
cdn_access_time "26"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 11: Origin IP for NG
|
||
function originIPA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
originIPA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
originIPA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function originIPA1() {
|
||
cdn_access_common "28"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 12: Combo -- multi condition searching
|
||
function comboA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
comboA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
comboA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function comboA1() {
|
||
cdn_access_combo
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 13: Referer
|
||
function refererA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
refererA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
refererA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function refererA1() {
|
||
cdn_access_common "33"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 14: UA
|
||
function uaA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
uaA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
uaA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function uaA1() {
|
||
cdn_access_common "34"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 15: Log
|
||
function logA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
logA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
logA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function logA1() {
|
||
cdn_access_logs
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 16: QPS
|
||
function qpsA() {
|
||
if [[ $ptype == '1' ]]; then
|
||
qpsA1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
qpsA1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function qpsA1() {
|
||
cdn_access_qps
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 28: Origin First Dur
|
||
function firstDurO() {
|
||
if [[ $ptype == '1' ]]; then
|
||
firstDurO1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
firstDurO1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function firstDurO1() {
|
||
cdn_origin_time "5"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 29: Combo -- multi condition searching
|
||
function comboO() {
|
||
if [[ $ptype == '1' ]]; then
|
||
comboO1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
comboO1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function comboO1() {
|
||
cdn_origin_combo
|
||
}
|
||
|
||
|
||
# ============================================================================================================
|
||
# Part 30: Origin Client(NG) IP
|
||
function clientIPO() {
|
||
if [[ $ptype == '1' ]]; then
|
||
clientIPO1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
clientIPO1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function clientIPO1() {
|
||
cdn_origin_common "7"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 31: Origin IP
|
||
function originIPO() {
|
||
if [[ $ptype == '1' ]]; then
|
||
originIPO1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
originIPO1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function originIPO1() {
|
||
cdn_origin_common "8"
|
||
}
|
||
# ============================================================================================================
|
||
# Part 32: Source Status Code
|
||
function sourceSCO() {
|
||
if [[ $ptype == '1' ]]; then
|
||
sourceSCO1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
sourceSCO1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function sourceSCO1() {
|
||
cdn_origin_sc "ssc"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 33: Origin Status Code
|
||
function statusCodeO() {
|
||
if [[ $ptype == '1' ]]; then
|
||
statusCodeO1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
statusCodeO1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function statusCodeO1() {
|
||
cdn_origin_sc "sc"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 34: Origin URL
|
||
function topUrlO() {
|
||
if [[ $ptype == '1' ]]; then
|
||
topUrlO1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
topUrlO1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function topUrlO1() {
|
||
cdn_origin_common "46"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 35: Origin QPS
|
||
function qpsO() {
|
||
if [[ $ptype == '1' ]]; then
|
||
qpsO1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
qpsO1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function qpsO1() {
|
||
cdn_origin_qps
|
||
}
|
||
|
||
|
||
# ============================================================================================================
|
||
# Part 36: Origin Random Logs
|
||
function logO() {
|
||
if [[ $ptype == '1' ]]; then
|
||
logO1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
logO1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function logO1() {
|
||
cdn_origin_logs
|
||
}
|
||
|
||
|
||
# ============================================================================================================
|
||
# Part 37: Source Connection Time
|
||
function sourceCTO() {
|
||
if [[ $ptype == '1' ]]; then
|
||
sourceCTO1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
sourceCTO1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function sourceCTO1() {
|
||
cdn_origin_time "4"
|
||
}
|
||
|
||
# ============================================================================================================
|
||
# Part 38: Source Respond Time
|
||
function SourceRTO() {
|
||
if [[ $ptype == '1' ]]; then
|
||
sourceRTO1
|
||
elif [[ $ptype == '2' ]]; then
|
||
:
|
||
elif [[ $ptype == '3' ]]; then
|
||
:
|
||
elif [[ $ptype == '4' ]]; then
|
||
:
|
||
elif [[ $ptype == '5.1' || $ptype == '5.2' || $ptype == '5.3' || $ptype == '5.4' || $ptype == '5.5' || $ptype == '5.6' || $ptype == '5.7' ]]; then
|
||
sourceRTO1
|
||
else
|
||
:
|
||
fi
|
||
}
|
||
|
||
function sourceRTO1() {
|
||
cdn_origin_time "6"
|
||
}
|
||
|
||
# --------------------------------------------------------------------------------
|
||
# set a trap for Ctrl+C
|
||
trap 'onCtrlC' INT
|
||
|
||
# --------------------------------------------------------------------------------
|
||
# 自定义颜色显示
|
||
c_br='\e[1;31m' # bold red
|
||
c_bg='\e[1;32m' # bold green
|
||
c_by='\e[1;33m' # bold yellow
|
||
c_bb='\e[1;34m' # bold blue
|
||
c_bp='\e[1;35m' # bold purple
|
||
c_bc='\e[1;36m' # bold cyan
|
||
c_bir='\e[1;3;31m' # bold italic red
|
||
c_big='\e[1;3;32m' # bold italic green
|
||
c_biy='\e[1;3;33m' # bold italic yellow
|
||
c_bib='\e[1;3;34m' # bold italic blue
|
||
c_bip='\e[1;3;35m' # bold italic purple
|
||
c_bic='\e[1;3;36m' # bold italic cyan
|
||
c_e='\e[0m' # reset
|
||
|
||
|
||
# --------------------------------------------------------------------------------
|
||
# 初始化设定
|
||
number=`date +%N`
|
||
CT=45
|
||
stty erase '^H' # allow backspace
|
||
data='/usr/local/script/fanmf11/data' # set data directory path
|
||
toolbox='/usr/local/script/fanmf11' # set toobbox directory path
|
||
TS=`date +%s%N` # document the start time of the script
|
||
host=`whoami` # who use this script
|
||
trash="/usr/local/script/fanmf11/trash/$host/$TS" # set trash directory path
|
||
livelog='/home/log/cluster_live_log'
|
||
liveatslog='/home/log/trafficserver'
|
||
cdn_access_log='/home/log/cluster_gateway_log' # *
|
||
cdn_origin_log='/home/log/trafficserver' # *
|
||
|
||
# --------------------------------------------------------------------------------
|
||
# 初始化,获得必要的变量
|
||
initial $@
|
||
|
||
# --------------------------------------------------------------------------------
|
||
# 主程序分支
|
||
if [[ $itype == '00' ]]; then
|
||
statusCodeA
|
||
elif [[ $itype == '01' ]]; then
|
||
respondTimeA
|
||
elif [[ $itype == '02' ]]; then
|
||
firstDurA
|
||
elif [[ $itype == '03' ]]; then
|
||
errorCodeA
|
||
elif [[ $itype == '04' ]]; then
|
||
remoteIPA
|
||
elif [[ $itype == '05' ]]; then
|
||
clientIPA
|
||
elif [[ $itype == '06' ]]; then
|
||
methodA
|
||
elif [[ $itype == '07' ]]; then
|
||
protocolA
|
||
elif [[ $itype == '08' ]]; then
|
||
topUrlA
|
||
elif [[ $itype == '09' ]]; then
|
||
upstreamAddrA
|
||
elif [[ $itype == '10' ]]; then
|
||
upstreamRTimeA
|
||
elif [[ $itype == '11' ]]; then
|
||
originIPA
|
||
elif [[ $itype == '12' ]]; then
|
||
comboA
|
||
elif [[ $itype == '13' ]]; then
|
||
refererA
|
||
elif [[ $itype == '14' ]]; then
|
||
uaA
|
||
elif [[ $itype == '15' ]]; then
|
||
logA
|
||
elif [[ $itype == '16' ]]; then
|
||
qpsA
|
||
elif [[ $itype == '17' ]]; then
|
||
:
|
||
elif [[ $itype == '18' ]]; then
|
||
:
|
||
elif [[ $itype == '19' ]]; then
|
||
:
|
||
elif [[ $itype == '20' ]]; then
|
||
:
|
||
elif [[ $itype == '21' ]]; then
|
||
:
|
||
elif [[ $itype == '22' ]]; then
|
||
:
|
||
elif [[ $itype == '23' ]]; then
|
||
:
|
||
elif [[ $itype == '24' ]]; then
|
||
:
|
||
elif [[ $itype == '25' ]]; then
|
||
:
|
||
elif [[ $itype == '26' ]]; then
|
||
:
|
||
elif [[ $itype == '27' ]]; then
|
||
:
|
||
elif [[ $itype == '28' ]]; then
|
||
firstDurO
|
||
elif [[ $itype == '29' ]]; then
|
||
comboO
|
||
elif [[ $itype == '30' ]]; then
|
||
clientIPO
|
||
elif [[ $itype == '31' ]]; then
|
||
originIPO
|
||
elif [[ $itype == '32' ]]; then
|
||
sourceSCO
|
||
elif [[ $itype == '33' ]]; then
|
||
statusCodeO
|
||
elif [[ $itype == '34' ]]; then
|
||
topUrlO
|
||
elif [[ $itype == '35' ]]; then
|
||
qpsO
|
||
elif [[ $itype == '36' ]]; then
|
||
logO
|
||
elif [[ $itype == '37' ]]; then
|
||
sourceCTO
|
||
elif [[ $itype == '38' ]]; then
|
||
SourceRTO
|
||
elif [[ $itype == '39' ]]; then
|
||
:
|
||
elif [[ $itype == '40' ]]; then
|
||
:
|
||
elif [[ $itype == '41' ]]; then
|
||
:
|
||
else
|
||
:
|
||
fi
|
||
|