統計log中的資料

2021-08-29 22:14:11 字數 2320 閱讀 5401

日誌格式(log)(使用的log4j記錄的日誌,分隔符使用的是乙個tab,注意日期的時間與小時那裡是乙個空格,第一列為時間;第二列為id,為某乙個唯一標識,第三列為ip,第四列後面的可以不用考慮):

2009-04-05 12:00:02 0572 218.200.247.111

2009-04-05 12:00:02 0571 218.207.218.135

2009-04-05 12:00:02 0571 218.205.237.10

2009-04-05 12:00:03 1213 211.139.190.234

2009-04-05 12:00:03 0161 218.207.91.131

2009-04-05 12:00:03 0162 211.138.45.11

2009-04-05 12:00:03 1170 211.96.28.105 dysm-f420m01/(2006.11.09)n.rf4200111.m01001.v1.0/wap2.0 profile/midp-2.0 configuration/cldc-1.0

2009-04-05 12:00:03 0182 211.138.237.173

2009-04-05 12:00:03 0161 218.207.91.131

2009-04-05 12:00:04 0779 211.143.171.143

2009-04-05 12:00:04 0981 211.94.164.215 nokia5700

2009-04-05 12:00:04 1190 211.136.222.98

2009-04-05 12:00:05 0161 211.136.222.98

2009-04-05 12:00:06 0162 211.139.144.74

2009-04-05 12:00:06 0188 211.139.60.19 tianyu-ktouch/d171/screen-128x160

2009-04-05 12:00:07 0188 211.143.171.143

現在的需求如下:需要得到這個日誌裡面的某個id,某個ip的量。

目前知道的有兩種方法:

1.把這個日誌存入資料庫中,在mysql下使用/usr/local/mysql/bin/mysql -uroot -proot databasename -e "load data local infile '$filename' into table log(visittime,id,ip,*)",sqlserver裡也有從文字檔案直接匯入到資料庫的sql語句,oracle應該也有;到了資料庫之後通過儲存過程獲取各種需要的資料。

2.把這個日誌直接通過指令碼(如awk,shell,sed,python等)處理成需要的資料後再把這些資料插入到資料庫中。

這兩種方法都各有所長吧,第一種方法比較簡單,只需掌握sql知識就行,除錯、查錯也比較方便。當資料量小時可以使用這種辦法,當資料量大的時候資料庫操作可能會成為乙個瓶頸,比如當一天的資料量達到幾千萬的時候,把這些資料插入到資料庫中需要一點時間,建立乙個索引可能就需要半個小時左右的時間,執行乙個sql語句基本會在1分鐘以上,如果業務邏輯比較複雜,可能還需要5-6分鐘,要是條件比較多的話執行速度就會很慢了。目前知道的一些解決辦法:分表,分時;分表能夠降低乙個表裡的資料量,相應的時間也會減少;分時基本上是把總的執行時間分配到了每乙個小時,這樣在第二天則只需執行最後乙個小時的日誌就行了,提高了機器的使用效率。

第二種方法執行效率上來說比第一種要快很多,一級統計在指令碼裡做,不需要入庫,見索引等操作,資料庫的壓力會比較小。但這種方法不太方便除錯以及查錯。當執行時間也要花很久時也可以進行分時的操作。

還有最重要的一點是第一種方法可以很靈活,當需要什麼資料的時候可以很快就能得到想要的東西;而第二種則需要改動的地方比較多,指令碼,資料庫,所有的東西都得改。

因此第一種方法適用於需求經常變動的地方,而第二種則適用於比較穩定的地方。

當然得自己去權衡到底是使用哪種辦法更好,印證了那句俗話沒有最好的,只有合適的。

下面介紹一下第二種方法

使用awk進行統計資料,如下(load_log.awk):

begin

else

}end

}

這裡可以滿足最初的那個需求,既得到這個日誌裡面的某個id,某個ip的量。

在shell中使用awk -f load_log.awk log>temp.log即可。

最後就只需把temp.log檔案匯入到資料庫中就大功告成了。

tcpdump 效能測試統計log

tcpdump 攔截包 tcpdump i any port 8082 s0 w fwx.cap strings fwx.cap aa.txt sar d 5 zuhe.txt iostat d m 3 iostat ct 10 root station45 tcpdump i any port 2...

log的儲存(新增中)

一 系統log 1 在終端裡輸入 sudo tar cjf log.tar.xz var log 的指令並回車執行。2 根據要求輸入密碼,輸入密碼後等待指令執行成功。3 執行完畢後,開啟檔案管理器,在主資料夾會看到乙個 log.tar.xz 的檔案,將這個檔案複製出來即可。二 檢視pci裝置 sud...

JNI中的log日誌

注意 android.mk裡有一行include clear vars 必須把local ldlibs llog放在它後面才有用,否則相當於沒寫。local path call my dir include clear vars local module helloworld local src f...