Apache-2.2

如何在 Apache 中使用 AWK 生成頻寬報告

  • June 8, 2013

我的 Apache 日誌設置如下:

LogFormat "%v %t %I %O" billing

如何使用 AWK 生成報告,顯示每個虛擬主機的總頻寬(接收 + 發送)(以 MB 為單位)?

這是一個範例日誌輸出:

bob.com  [3 JULY 2013]  903 299
bob.com  [8 JULY 2013]  192 138
luke.com [12 JULY 2013]  34 123
bob.com  [19 JULY 2013] 616 213
luke.com [22 JULY 2013]  23  74

我正在尋找一個總結 bob.com 和 luke.com 的第 3 列和第 4 列的輸出,而沒有實際指定域,因為我有 50 多個域並且不想維護列表。只需將列印輸出合併起來就容易得多。

或這個:

awk '{T[$1]+=$NF+$(NF-1)} END{for(i in T) print i,T[i]}' file

會產生

bob.com 2361
luke.com 254

使用您的範例日誌文件..

您可以編寫一個小腳本來完成這項工作:

#!/bin/bash

log_file="/path/to/logfile"
domains=`awk '{print $1}' $log_file | sort | uniq`

for domain in $domains
do
   sum=$(grep "$domain" $log_file | \
           awk '{ for (i = 5; i <= NF; i++) s = s+$i }; END { print s+0 }')

   echo "Total bandwidth of $domain is $sum"

done

引用自:https://serverfault.com/questions/514268