亿速云内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。亿速云CDN分担源站压力,避免网络拥塞,确保在不同区域、不同场景下加速网站内容的分发,提高资源访问速度。许多用户在实际运用CDN的过程中都会遇到一些CDN常见的问题,今天小编跟大家聊一下公司使用快网的CDN的问题。

公司使用的快网的CDN,但是快网本身并不提供日志的分析统计,我这里还没有用elk,无奈只能先使用shell对日志进行分析统计,作为运维组对业务情况的一个大致的了解。

脚本是对前一天的CDNLOG进行解压缩分析,最后将结果按类输出到指定目录,再将这些结果打包扔回CDNLOG目录,因为CDNLOG目录是要上传云存储的,一并保存。其实还有一个动作,是将这些内容作为参数传给python脚本给一个监控系统,出图便于查看,这里没有贴上。


同样作为留底,不喜勿喷。


#!/bin/bashfunctionline(){cols=`tputcols`fortin`seq1${cols}`doecho-n"="done}functionglobal_define(){yesterday=`date-d"-1day"+%F`comp_path="/srv/cdnlog/downloads/${yesterday}/"cdnlog_list=`ls${comp_path}|sed's#.gz##g'`uncomp_path="/srv/cdnlog/uncomp/${yesterday}/"user=`whoami`backup_path="/srv/cdnlog/downloads/${yesterday}/"}functionglobal_check(){if[$user!=root];thenecho"Pleaseuseroot."exit1fi}functioncycle(){fornin$cdnlog_listdocheckdefineuncompsegmentationsource_addressmethodhttp_codehttp_sizerefererretimeplatformtagbackcdn_noderesponse_sizedeletedone}functioncheck(){if[-d${uncomp_path}${n}/];thenrm-rf${uncomp_path}${n}/fi}functiondefine(){gz_file="${n}.gz"log_file="${n}.log"log_path="/srv/cdnlog/uncomp/${yesterday}/${n}/"}functionuncomp(){mkdir-p${log_path}gunzip-c${comp_path}${gz_file}>${log_path}${log_file}}functionsegmentation(){log_file_count=`cat${log_path}${log_file}|wc-l`awk-vsour_addr=${log_path}sour_addr.tmp-vmethod=${log_path}method.tmp-vhttp_code=${log_path}http_code.tmp-vhttp_size=${log_path}http_size.tmp-vreferer=${log_path}referer.tmp-vplatform=${log_path}platform.tmp-vcdn_node=${log_path}cdn_node.tmp-vresponse_size=${log_path}response_size.tmp'{print$1>sour_addr;print$6,$7>method;print$9>http_code;print$10>http_size;print$11>referer;print$(NF)>cdn_node;print$(NF-1)>response_size}'${log_path}${log_file}cat${log_path}${log_file}|egrep"FCACHE_HIT_DISK|FCACHE_HIT|FCACHE_MISS"|awk-F'FCACHE_HIT_DISK|FCACHE_HIT|FCACHE_MISS''{print$2}'>${log_path}more.tmpawk-vretime1=${log_path}retime1.tmp-vretime2=${log_path}retime2.tmp-vretime3=${log_path}retime3.tmp-vretime4=${log_path}retime4.tmp-vretime5=${log_path}retime5.tmp-vretime6=${log_path}retime6.tmp-vretime7=${log_path}retime7.tmp-vretime8=${log_path}retime8.tmp-vretime9=${log_path}retime9.tmp-vtag=${log_path}tag.tmp-vback=${log_path}back.tmp'{print$1>retime1;print$2>retime2;print$3>retime3;print$4>retime4;print$5>retime5;print$6>retime6;print$7>retime7;print$8>retime8;print$9>retime9;print$10>tag;print$12>back}'${log_path}more.tmpcat${log_path}${log_file}|awk-F'[(|)]''{print$2}'>${log_path}platform.tmp}functionsource_address(){line>>${log_path}sour_addr.logecho"SourceAddressTop30:">>${log_path}sour_addr.logecho"">>${log_path}sour_addr.logcat${log_path}sour_addr.tmp|sort-r|uniq-c|sort-nr|head-30>>${log_path}sour_addr.logsour_addr_total=`cat${log_path}sour_addr.tmp|sort-r|uniq-c|wc-l`echo"">>${log_path}sour_addr.logecho"SourceAddressTotal:$sour_addr_total">>${log_path}sour_addr.logline>>${log_path}sour_addr.log}functionmethod(){line>>${log_path}method.logecho"Method&URLTop30:">>${log_path}method.logecho"">>${log_path}method.logcat${log_path}method.tmp|sed's#"##g'|sort-r|uniq-c|sort-nr|head-30>>${log_path}method.logline>>${log_path}method.log}functionhttp_code(){line>>${log_path}http_code.logecho"HttpCodeTop:">>${log_path}http_code.logecho"">>${log_path}http_code.loghttp_code_list=`cat${log_path}http_code.tmp|sort-r|uniq-c|sort-nr|awk'{print$2}'`cat${log_path}http_code.tmp|sort-r|uniq-c|sort-nr>>${log_path}http_code.logecho"">>${log_path}http_code.logforyin$http_code_listdocount=`cat${log_path}http_code.log|awk-vncode=$y'$2==ncode{print$1}'`rate=`echo"$count$log_file_count"|awk'{printf("%.2f\n",$1*100/$2)}'`echo-e"HTTP$yCount:\t$count">>${log_path}http_code.logecho-e"HTTP$yRate:\t\t${rate}%">>${log_path}http_code.logecho"">>${log_path}http_code.logdoneline>>${log_path}http_code.log}functionhttp_size(){size_max=`cat${log_path}http_size.tmp|sort-nr|head-1`size_min=`cat${log_path}http_size.tmp|sort-nr|tail-1`size_total_tmp=`cat${log_path}http_size.tmp|awk'{sum+=$1}END{printsum}'`size_total=`echo$size_total_tmp|awk'{printf("%.0f\n",$1)}'`size_avg=`echo"$size_total$log_file_count"|awk'{printf("%.2f\n",$1/$2)}'`line>>${log_path}http_size.logecho"">>${log_path}http_size.logecho-e"HttpSizeMax:\t$size_max">>${log_path}http_size.logecho-e"HttpSizeMin:\t$size_min">>${log_path}http_size.logecho-e"HttpSizeTotal:\t$size_total">>${log_path}http_size.logecho-e"HttpSizeAvg:\t$size_avg">>${log_path}http_size.logline>>${log_path}http_size.log}functionreferer(){line>>${log_path}referer.logecho"RefererTop30:">>${log_path}referer.logecho"">>${log_path}referer.logcat${log_path}referer.tmp|sed's#"##g'|sort-r|uniq-c|sort-nr|head-30>>${log_path}referer.logline>>${log_path}referer.log}functionretime(){sed-ie'/-/d'${log_path}retime{1..9}.tmpforiin`seq19`doevalretime${i}=`cat${log_path}retime${i}.tmp|wc-l`evalsum${i}=`cat${log_path}retime${i}.tmp|awk'{sum+=$1}END{printsum}'|awk'{printf("%.2f\n",$1)}'`evalavg${i}=`evalecho"\\${retime${i}}\\${sum$i}"|awk'{printf("%.2f\n",$2/$1)}'`evalmax${i}=`cat${log_path}retime${i}.tmp|sort-nr|head-1`evalmin${i}=`cat${log_path}retime${i}.tmp|sort-nr|tail-1`doneforkin`seq19`doline>>${log_path}retime${k}.logecho"Retime${k}:">>${log_path}retime${k}.logecho"">>${log_path}retime${k}.logecho-en"Max\t:\t">>${log_path}retime${k}.logevalecho"\${max$k}">>${log_path}retime${k}.logecho-en"Min\t:\t">>${log_path}retime${k}.logevalecho"\${min$k}">>${log_path}retime${k}.logecho-en"Avg\t:\t">>${log_path}retime${k}.logevalecho"\${avg$k}">>${log_path}retime${k}.logecho-en"Total:\t">>${log_path}retime${k}.logevalecho"\${sum$k}">>${log_path}retime${k}.logline>>${log_path}retime${k}.logdonesed-i's#-nan#0.00#g'${log_path}retime{1..9}.log}functionplatform(){iphone_count=`cat${log_path}platform.tmp|egrep"iPhone"|wc-l`ipad_count=`cat${log_path}platform.tmp|egrep"iPad"|wc-l`mac_count=`cat${log_path}platform.tmp|egrep"Macintosh"|wc-l`android_count=`cat${log_path}platform.tmp|egrep"Android|Adr"|wc-l`windows_count=`cat${log_path}platform.tmp|egrep"WindowsNT|Windows98|WindowsXP"|wc-l`windows_mobile_count=`cat${log_path}platform.tmp|egrep"WindowsPhone"|wc-l`java_count=`cat${log_path}platform.tmp|egrep"java"|wc-l`linux_count=`cat${log_path}platform.tmp|egrep"X11;Linux|linux-gnu"|wc-l`iphone_rate=`echo"$iphone_count$log_file_count"|awk'{printf("%.2f\n",$1/$2*100)}'`ipad_rate=`echo"$ipad_count$log_file_count"|awk'{printf("%.2f\n",$1/$2*100)}'`mac_rate=`echo"$mac_count$log_file_count"|awk'{printf("%.2f\n",$1/$2*100)}'`android_rate=`echo"$android_count$log_file_count"|awk'{printf("%.2f\n",$1/$2*100)}'`windows_rate=`echo"$windows_count$log_file_count"|awk'{printf("%.2f\n",$1/$2*100)}'`windows_mobile_rate=`echo"$windows_mobile_count$log_file_count"|awk'{printf("%.2f\n",$1/$2*100)}'`java_rate=`echo"$java_count$log_file_count"|awk'{printf("%.2f\n",$1/$2*100)}'`linux_rate=`echo"$linux_count$log_file_count"|awk'{printf("%.2f\n",$1/$2*100)}'`line>>${log_path}platform.logecho"PlatformInfo:">>${log_path}platform.logecho"">>${log_path}platform.logecho-e"iPhonecount\t\t:$iphone_count">>${log_path}platform.logecho-e"iPhonerate\t\t:${iphone_rate}%">>${log_path}platform.logecho"">>${log_path}platform.logecho-e"iPadcount\t\t:$ipad_count">>${log_path}platform.logecho-e"iPadrate\t\t:${ipad_rate}%">>${log_path}platform.logecho"">>${log_path}platform.logecho-e"Maccount\t\t:$mac_count">>${log_path}platform.logecho-e"Macrate\t\t:${mac_rate}%">>${log_path}platform.logecho"">>${log_path}platform.logecho-e"Androidcount\t\t:$android_count">>${log_path}platform.logecho-e"Androidrate\t\t:${android_rate}%">>${log_path}platform.logecho"">>${log_path}platform.logecho-e"Windowscount\t\t:$windows_count">>${log_path}platform.logecho-e"Windowsrate\t\t:${windows_rate}%">>${log_path}platform.logecho"">>${log_path}platform.logecho-e"Windowsmobilecount\t:$windows_mobile_count">>${log_path}platform.logecho-e"Windowsmobilerate\t:${windows_mobile_rate}%">>${log_path}platform.logecho"">>${log_path}platform.logecho-e"Javacount\t\t:$java_count">>${log_path}platform.logecho-e"Javarate\t\t:${java_rate}%">>${log_path}platform.logecho"">>${log_path}platform.logecho-e"Linuxcount\t\t:$linux_count">>${log_path}platform.logecho-e"Linuxrate\t\t:${linux_rate}%">>${log_path}platform.logline>>${log_path}platform.log}functiontag(){tag_total=`cat${log_path}more.tmp|wc-l`tag_suc=`cat${log_path}more.tmp|awk'{print$10}'|grep"1"|wc-l`tag_fail=`cat${log_path}more.tmp|awk'{print$10}'|grep"0"|wc-l`tag_suc_rate=`echo"$tag_suc$tag_total"|awk'{printf("%.2f\n",$1/$2*100)}'`tag_fal_rate=`echo"$tag_fail$tag_total"|awk'{printf("%.2f\n",$1/$2*100)}'`line>>${log_path}tag.logecho"TagofDownloadInfo:">>${log_path}tag.logecho"">>${log_path}tag.logecho-e"DownloadSuccessCount\t\t:$tag_suc">>${log_path}tag.logecho-e"DownloadSuccessRate\t\t:${tag_suc_rate}%">>${log_path}tag.logecho-e"DownloadFailCount\t\t:$tag_fail">>${log_path}tag.logecho-e"DownloadFailRate\t\t:${tag_fal_rate}%">>${log_path}tag.logline>>${log_path}tag.log}functionback(){back_total=`cat${log_path}more.tmp|awk'{print$12}'|egrep-v"-"|wc-l`back_rate=`echo"$back_total$log_file_count"|awk'{printf("%.2f\n",$1/$2*100)}'`line>>${log_path}back.logecho"BackSourceInfo:">>${log_path}back.logecho"">>${log_path}back.logecho-e"BackSourceCount\t:$back_total">>${log_path}back.logecho-e"BackSourceRate\t:${back_rate}%">>${log_path}back.logline>>${log_path}back.log}functioncdn_node(){line>>${log_path}cdn_node.logecho"CDNNodeTop30:">>${log_path}cdn_node.logecho"">>${log_path}cdn_node.logcat${log_path}cdn_node.tmp|sort-n|uniq-c|sort-nr|head-30>${log_path}cdn_node.logline>>${log_path}cdn_node.log}functionresponse_size(){response_size_total=`cat${log_path}response_size.tmp|awk'{sum+=$1}END{printsum}'|awk'{printf("%.0f\n",$1)}'`response_size_avg=`echo"$response_size_total$log_file_count"|awk'{printf("%.2f\n",$1/$2*100)}'`line>>${log_path}response.logecho"ResponseSizeInfo:">>${log_path}response.logecho"">>${log_path}response.logecho-e"ResponseSizeTotal\t:$response_size_total">>${log_path}response.logecho-e"ResponseSizeAvg\t:$response_size_avg">>${log_path}response.logline>>${log_path}response.log}functiondelete(){rm-f${log_path}*.tmprm-f${log_path}*.tmperm-f${log_path}${log_file}}functionbackup(){tarzcf${backup_path}statistics_${yesterday}.tar.gz${log_path}*.log}functionmain(){global_defineglobal_checkcyclebackup}main

如果大家还有什么不明白的地方可以在亿速云官网找我们的CDN技术工程师的,亿速云CDN技术工程师在行业内拥有十几年的经验了,所以会比小编回答的更加详细专业。亿速云官网链接www.yisu.com