1. 程式人生 > 實用技巧 >Tomcat日誌分析

Tomcat日誌分析

  1 #!/bin/bash
  2 #Shell      statistics.sh
  3 #Author    lipc
  4 #Date      20200818
  5 #Ps       tomcat接入日誌分析,需要tomcat日誌開啟訪問時間記錄
  6 
  7 time1=$(date "+%Y-%m-%d %H:%M:%S")
  8 time2=$(date "+%Y-%m-%d-%H")
  9 echo "請輸入日誌路徑,例如:/tmp/localhost_access_log.2020-12-19.txt"
 10 read name
 11 echo "請輸入日誌存放路徑,例如:/tmp/test/
" 12 read dir 13 echo "請輸入模組名稱,例如:pbs" 14 read module 15 log="$dir""$module"$time2.log 16 statistics="$dir""$module"statistics$time2.log 17 IFS=$'\n' 18 19 function check() { 20 if [ -f $name ]; then 21 echo $name'檔案目錄檢測成功' 22 echo "" 23 echo "程式開始時間:"$time1 >>$statistics
24 echo "正在收集URL介面資訊,預計一分鐘,請等待......" 25 meta=$(cat $name | awk '{print $7}' | awk -F 'sig' '{print $1}' | sort | uniq | grep -v -w '/' | grep -v 400) 26 amount=$(echo "$meta" | wc -l) 27 echo "URL介面資訊收集完成,即將開始下一步操作......" 28 echo "" 29 else 30 echo
$name'檔案目錄檢測失敗,請重新檢查檔案路徑' 31 exit 1 32 fi 33 } 34 35 function metadata() { 36 echo "正在收集日誌元資料,用於後續統計分析操作,日誌存放於$log......" 37 i=0 38 for url in $meta; do 39 w=$(expr $i \* 100 / $amount) 40 echo "當前進度$w%" 41 for time in $(seq -w 07 16); do 42 num=$(cat $name | grep 2020:$time | grep $url | wc -l) 43 echo $num $url 2020:$time >>$log 44 done 45 i=$(expr $i + 1) 46 done 47 echo "日誌元資料收集完畢,存放於$log" 48 echo "" 49 } 50 51 function concurrent() { 52 echo "正在分析日誌元資料,用於獲取介面併發資訊,日誌存放於$statistics......" 53 echo "每個介面的5個最高併發時段" >>$statistics 54 for url in $meta; do 55 cat $log | grep $url | sort -nr | head -n 5 >>$statistics 56 echo "" >>$statistics 57 done 58 59 echo "全天最高併發的5個介面" >>$statistics 60 for url in $meta; do 61 a=$(cat $name | grep $url | wc -l) 62 echo $a $url >>"$dir"a.log 63 done 64 cat "$dir"a.log | sort -nr | head -n 5 >>$statistics 65 } 66 67 function speed() { 68 echo "正在分析介面耗時資訊......" 69 echo "" >>$statistics 70 echo "全天10個最高耗時請求:" >>$statistics 71 echo "" >>$statistics 72 for url in $meta; do 73 cat $name | grep $url | sort -nr -k 11 | head -n 1 >>"$dir"b.log 74 done 75 76 cat "$dir"b.log | sort -nr -k 11 | head -n 10 >>$statistics 77 echo " " >>$statistics 78 meta1=$(cat "$dir"b.log | sort -nr -k 11 | head -n 10 | awk '{print $7}' | awk -F 'sig' '{print $1}' | grep -v -w '/' | grep -v 400) 79 80 echo "分析每個介面3個最高耗請求和3個最低耗請求,及其時間:" >>$statistics 81 echo "" >>$statistics 82 for url in $meta1; do 83 echo "$url介面3個最高耗請求,及其時間:" >>$statistics 84 cat $name | grep $url | sort -nr -k 11 | head -n 3 >>$statistics 85 echo "$url介面3個最低耗請求,及其時間:" >>$statistics 86 cat $name | grep $url | sort -nr -k 11 | tail -n 3 >>$statistics 87 num2=$(cat $name | grep $url | awk '{print $11}' | awk '{sum+=$1} END {print "Average = ", sum/NR}') 88 echo "$url介面平均耗時:"$num2 ms >>$statistics 89 echo " " >>$statistics 90 done 91 echo "介面耗時資訊分析已結束......" 92 } 93 94 function peak() { 95 echo "正在分析介面高峰時段資訊......" 96 echo "本次日誌分析,介面高峰時段時間" >>$statistics 97 cat $statistics | awk '{print $3}' | grep 2020 | sort | uniq -c | sort -nr | head -n 6 >>$statistics 98 } 99 100 check 101 metadata 102 concurrent 103 speed 104 105 time3=$(date "+%Y-%m-%d %H:%M:%S") 106 echo "程式結束時間:"$time3 >>$statistics 107 echo "本次分析結束"