資料中的字段分別為:
訪客ip位址
訪客訪問時間
訪客請求的url及協議
**響應碼
**返回資料量
訪客的referral url
訪客的客戶端作業系統及瀏覽器資訊
需求:1)需要為從訪問日誌中梳理出每乙個session(如果乙個使用者兩次相鄰請求之間的時間差<30分鐘,則該兩次請求都屬於同乙個session(不考慮不同的url),否則分屬不同的session),並為session中的歷次請求打上序號,示意如下:
session號 ip位址 請求時間 請求url 請求次序 其他字段……
session1 ip1 2017-10-11
08:10:30 /a 1 ……
session1 ip1 2017-10-11
08:11:20 /b 2 ……
session2 ip1 2017-10-11
09:10:30 /c 1 ……
步驟分析:
1 讀取日誌檔案,獲取使用者請求資料,會根據使用者的ip進行分組 (map)
2 將使用者的url按照時間排序
3 判斷兩個相鄰的url的時間差值是否是在30分鐘內來確定是否是同乙個session
4 判斷為每個url生成sessionid並打上執行順序標籤sessionbean資料
public
class sessionbean
public
void
setsessionid(string sessionid)
public string getip()
public
void
setip(string ip)
public string geturl()
public
void
seturl(string url)
public date getdate()
public
void
setdate(date date)
public
intgetorder()
public
void
setorder(int order)
@override
public string tostring()
}
讀取使用者資料並且存在map中
try(
bufferedreader br =
new bufferedreader(new filereader("f:/access.log.fensi"));
) +\\.)\\d";
string timerex =
"\\[.+\\d\\]";
string urlregex =
"(get|post)\\s(\\s)*\\s";
while((line=br.readline())!=
null)
**使用正規表示式獲取欄位的方法:**
public static string getstrbyrex(string line,string rex)
return res;
}**將字串轉換成時間物件**
@suppresswarnings("null")
public static date parsedate(string datestr) throws parseexception
return d;
}
對map的value(list)進行排序
myutils.sortmap(map);//直接呼叫
對list中的sessionbean按照時間先後順序排列
public static void sortmap(map
<
string,list
>
map)
});for (sessionbean entry1 : list) }}
}
//生成sessionid和序號並判斷結果條件
createdsessionid(map);//呼叫方法
private static void createdsessionid(map
<
string, list
>
map)
if(list
.size()>
1)//如果有的話 則直接賦值給後乙個數(他兩相等)
aftersession.setsessionid(presession.getsessionid());
if(presession.getorder()==
0)//有的話 後乙個為前乙個+1;
aftersession.setorder(presession.getorder()+
1); }else
aftersession.setsessionid(myutils.createsessionid());
if(presession.getorder()==
0) aftersession.setorder(1);}}
}}}
**生成sessionid 獲取不重複的字串**
public
static string createsessionid()
**//判斷兩個sessionbean是否是同乙個session**
public
static
boolean
issamesession(sessionbean presession,sessionbean aftersession)
return flag;
}
遍歷結果並列印
set
>> entryset = map.entryset();
for (entry> entry : entryset)
}
PowerShell 抓取網路日誌
豆子今天想看看powershell是否有像winsock之類的方式抓包,不過很遺憾,他有乙個netevenpacketcapture的模組,但是他不像wireshark那樣可以直接抓取tcp ip包,他獲取的是windows的網路日誌。優點是我可以直接用get winevent來分析內容了,缺點是我...
flume 網路日誌收集
channels 記憶體 sink 本地 a1.sources s1 a1.channels c1 a1.sinks k1 tcp協議 a1.sources.s1.type syslogtcp a1.sources.s1.port 5140 a1.sources.s1.host wangfutai ...
PowerShell 抓取網路日誌
豆子今天想看看powershell是否有像winsock之類的方式抓包,不過很遺憾,他有乙個netevenpacketcapture的模組,但是他不像wireshark那樣可以直接抓取tcp ip包,他獲取的是windows的網路日誌。優點是我可以直接用get winevent來分析內容了,缺點是我...