Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 命令列即時監控與歷史分析網站日誌實戰腳本

編輯:Linux 教學

圖形化日誌分析工具再強,也比不上原生命令列在無圖形介面、高併發、大檔案場景下的靈活度。本文提供兩套生產級腳本:即時過濾高亮顯示、高效逆序讀取近 N 天日誌,並附贈 RSS 訂閱者分析實戰管線。

腳本一:即時尾部追蹤與高亮

檔案:tail_access_log,授權 chmod +x 後直接執行。

#!/bin/bash
# 依賴:tput, grep, sed, tail
deny="$(tput bold; tput setaf 1)"   # 亮紅
high="$(tput bold; tput setaf 3)"   # 亮黃
norm="$(tput sgr0)"

tail "$@" -s 0.1 -f access_log \
| grep -Ev --line-buffered -f agents_to_ignore -f files_to_ignore \
| sed -u 's/\(.*\) - \[[^]]*\]\(.*\)/\1\2/' \
| sed -u 's#\(.*\) "https://www\.\(google\.[^/]*\).*[?&_]q=\([^&"]*\)[^"]*"#\1 "\2 (\3)"#' \
| sed -u 's/ HTTP\/1.[01]//; s/.NET CLR [0-9.]*//g; s/Gecko\/[0-9]*//; s/rv:[0-9.]*//; s/Mozilla\/[0-9.]* //' \
| sed -u "s/^/ /; s/^ *\([ 0-9.]\{15,\}\) -/\1/" \
| sed -u "s/\(.\{$COLUMNS\}\).*/\1/" \
| sed -u "s/\([^\"]*\"[^\"]*\" 40[34] [0-9]* \"\)\([^\"]*\)\(\".*\)/\1$deny\2$norm\3/;t;
         s/\([^\"]*\"[^\"]*\" [0-9 -]* \"\)\([^\"]*\)\(\".*\)/\1$high\2$norm\3/;t;"

功能亮點

  • -s 0.1 降低 CPU 佔用
  • --line-buffered 保證即時輸出
  • 過濾機器人、靜態資源、雜訊 UA
  • Google 搜尋關鍵字提取、Referrer 404/403 紅色高亮、正常 Referrer 黃色高亮
  • IP 欄位對齊、行寬自適應終端

腳本二:高效讀取近 N 天日誌

檔案:get_last_days,用法 ./get_last_days 7 access_log

#!/bin/sh
days=$1
log=$2
export LANG=C
export TZ=UTC0

last_log_date=$(tail -1 "$log" | sed 's#.*\[\([^:]*\):\([^ ]*\) .*#\1 \2#g' | tr '/' ' ')
yesterday=$(date --date="$last_log_date $days day ago" +"%d/%b/%Y:%H:%M")
yesterday=$(echo $yesterday | cut -b-16)
yesterday="${yesterday}[0-9]"

tac "$log" | sed "\#$yesterday#Q"

核心技巧

  • tac 逆序輸出(從檔尾讀取),避免 700 MB 大檔全讀
  • sed ... Q 命中日期即退出,極速截取
  • LANG=C 關閉多國語言處理,加速 3-5 倍

實戰管線:分析過去一週 RSS 訂閱者

#!/bin/sh
export LANG=C
feed="/feed/rss2.xml"

./get_last_days 7 access_log \
| grep -F "GET $feed" \
| grep -vE "pixelbeat.org.*(rv:|MSIE|AppleWebKit/|Konqueror|Opera)" \
| sed 's/\([0-9]*\.[0-9]*\)\.[0-9]*\.[0-9]* .*"\([^"]*\)"$/\1\t\2/' \
| sort -k2 -k1,1 \
| uniq -c \
| grep -vE " 1 .*(rv:|MSIE|AppleWebKit/|Konqueror|Opera)" \
| grep -vE -f agents_to_ignore \
| sed 's/\([^\t]\)\t.*Firefox.*/\1\tFirefox/;
       s/\([^\t]\)\t.*MSIE 7.0.*/\1\tIE7/;
       s/\([^\t]\)\t.*Opera.*/\1\tOpera/;
       s/\([^\t]\)\t.*Akregator.*/\1\tAkregator/;
       s/\([^\t]\)\t.*Thunderbird.*/\1\tThunderbird/;
       s/\([^\t]\)\t.*Liferea.*/\1\tLiferea/;
       s/\([^\t]\)\t.*Google Desktop.*/\1\tGoogle Desktop/;' \
| cut -d$'\t' -f2 \
| sort | uniq -c \
| sed 's/\(.*\)\(feedfetcher.html\)\(.*\)id=\([0-9]*\).*/\1\2.\4\3/' \
| sed 's/ *[0-9]* .*\(http[^;]*\).* \([0-9]*\) subscriber.*/ \2 \1/' \
| uniq -f1 \
| sort -k1,1n \
| sed "s/^/ /; s/ *\([ 0-9]\{7,\}\) \([^ ].*\)/\1 \2/" \
| sed "s/\(.\{80\}\).*/\1/"

輸出範例

   1245 Google Feedfetcher (123 subscribers)
    321 Firefox
    198 Thunderbird
     87 Liferea

前置準備

  • agents_to_ignore:機器人 UA 清單(Googlebot, Bingbot 等)
  • files_to_ignore:靜態資源路徑
  • 兩檔放在腳本同目錄

命令列日誌分析三板斧:tail -f 看當下、tac | sed Q 切歷史、管線組合 掘金。無圖形介面也能做到極致。

Copyright © Windows教程網 All Rights Reserved