那天有空的时候在公司的一台闲服务器上做了个网桥,装上了天易行上网行为管理软件,说实话记录的日志很详细,但日志的分析功能有些不足,日志数据库用的是sqlite3,呵呵,以前没有用过这种数据库,上网查了些资料明白了是怎么回事,然后把数据库做了些修改,又做了个小程序对其日志进行分析,终于符合公司的要求了.
打开数据库后里面只有一个表mylogs,我先把这个表删除了,然后重新增加了一个表;drop table mylogs,先删除表,CREATE TABLE MyLogs(ID integer PRIMARY KEY, time datetime, ip int, mac varchar(100), content varchar(100), Domain varchar(100), LANip varchar(50));建了个同名的新表,只是多了两个字段,一个用于存内网IP,一个存网站的域名,好了,对sqlite3的处理就到此了,然后打开网管软件让它记日志吧;当需要对日志进行分析时先停止日志记录,然后用sqlite3.exe程序把数据导出成insert语句,放到sql server2000 数据库中进行处理(sqlite3字符串处理函数太少,无法分解日志),打开cmd转至sqlite3目录下,输入sqlite3.exe log.db, 设置模式为insert ,.mode insert mylogs,导出数据到文本文件.output a.txt;select * from mylogs;.output stdout;可以得到一个全是insert into语句的文本文件,在sql 2000数据库中新建一个刚才的表,然后执行导出的文件。我用的是下面的语句来分解日志内容的.
--用理包含有http://的网址信息///
update mylogs set 域名=( substring(内容,charindex('http://',内容),charindex('/',内容,charindex('http://',内容)+7)-charindex('http://',内容))),
IP=(substring(内容,charindex('<',内容)+1,charindex('>',内容)-2))
where ip is null and 内容 like '%http://%'
--///处理属于非网址类的信息///
update mylogs set 域名=( substring(内容,charindex('使用/访问',内容)+6,len(内容)-charindex('使用/访问',内容)+5)),
IP=(substring(内容,charindex('<',内容)+1,charindex('>',内容)-2))
where ip is null and 内容 not like '%http://%'
处理完成后就可以根据自己的爱好进行统计了,我的代码如下,希望对大家有一些参考/
<asp:ListItem Value="X1">网站访问排行</asp:ListItem>
<asp:ListItem Value="X2">用户访问排行</asp:ListItem>
<asp:ListItem Value="X3">单网址访问排行</asp:ListItem>
<asp:ListItem Value="X4">网络访问频繁用户</asp:ListItem>
<asp:ListItem Value="X6">单用户网络访问查看</asp:ListItem>
<asp:ListItem Value="X5">单网址与单用户查看</asp:ListItem>
Public Function GetUrl(ByVal str As String) As String
Dim s1 As String
Dim x1, x2 As Integer
x1 = str.Length
x2 = Strings.InStr(str, "http://")
s1 = Strings.Right(str, x1 - x2 + 1)
Return s1
End Function
Protected Sub btn_cx_Click(ByVal sender As Object, ByVal e As System.EventArgs)
'根据不同的条件查询不同的内容
l_q.visible = False
L_Q.ToolTip = ""
Dim lr As String = Trim(ddL_lr.SelectedValue)
Dim sql As String
If IsDate(txt_rq.Text) = False Then
L_ts.Text = Now & "请先输入日期后再进行查询!"
L_Q.ToolTip = L_ts.Text
l_q.visible = True
Exit Sub
End If
Dim sj As Date = CDate(txt_rq.Text)
Dim tj As String = " 时间 between '" & sj & " 00:00:00' and '" & sj & " 23:59:59' "
Select Case lr
Case "X1"
sql = "select top 100 count(域名) as 次数,域名 as 网址 from mylogs where " & tj & "group by 域名 order by 次数 desc "
DG_show.DataSource = rq.GetData(sql)
DG_show.DataBind()
L_ts.Text = "目前列出的是访问次数最多的一百个网址!"
Case "X2"
sql = "select top 100 count(域名) as 次数,域名 as 网址,ip from mylogs where " & tj & "group by 域名,ip order by 次数 desc,网址 "
DG_show.DataSource = rq.GetData(sql)
DG_show.DataBind()
L_ts.Text = "目前列出的是各个电脑访问网址的前一百名!"
Case "X3"
If txt_url.Text = "" Then
L_ts.Text = "请输入网址后再进行查询!"
L_Q.ToolTip = L_ts.Text
l_q.visible = True
Exit Sub
End If
sql = " select top 100 count(域名) as 次数,域名,ip from mylogs where 域名 like '%" & txt_url.Text & "%' and " & tj & " group by 域名,ip order by 次数 desc"
DG_show.DataSource = rq.GetData(sql)
DG_show.DataBind()
L_ts.Text = "目前列出的是单个网址的访问排行情况!"
Case "X4"
sql = "select top 10 count(IP) as 次数,ip as IP地址 from mylogs where " & tj & "group by IP order by 次数 desc"
DG_show.DataSource = rq.GetData(sql)
DG_show.DataBind()
L_ts.Text = "目前列出的是访问网络最频繁的10台电脑!"
Case "X5"
If txt_url.Text = "" Then
L_ts.Text = "请输入网址后再进行查询!"
L_Q.ToolTip = L_ts.Text
L_Q.Visible = True
Exit Sub
End If
If txt_ip.Text = "" Then
L_ts.Text = "请输入IP后再进行查询"
L_Q.ToolTip = L_ts.Text
L_Q.Visible = True
Exit Sub
End If
sql = "select top 100 内容 from mylogs where 内容 like '%" & txt_url.Text & "%' and 内容 like '%" & txt_ip.Text & "%' and " & tj
DG_show.DataSource = rq.GetData(sql)
DG_show.DataBind()
'提取网址出来.
Dim url As String
Dim i As Integer
For i = 0 To DG_show.Rows.Count - 1
url = DG_show.Rows(i).Cells(0).Text
' m = r.Match(url)
' url = m.Value.ToString
DG_show.Rows(i).Cells(0).Text = GetUrl(url)
Next
L_ts.Text = "查询的是IP与网址相符合的记录,复制后可查看信息,共有" & DG_show.Rows.Count & "条信息!"
Case "X6"
If txt_ip.Text = "" Then
L_ts.Text = "请输入IP后再进行查询"
L_Q.ToolTip = L_ts.Text
L_Q.Visible = True
Exit Sub
End If
sql = "select count(域名) as 次数,域名 from mylogs where " & tj & " and IP='" & txt_ip.Text & "' group by 域名 order by 次数 desc "
DG_show.DataSource = rq.GetData(sql)
DG_show.DataBind()
L_ts.Text = Now & " 本次查询共有" & DG_show.Rows.Count & "条数据!"
End Select
End Sub
补充一下,发现修改了表结构后天易行网管无法保存数据了,所以大家不用改数据库了,只接改sql导出语句就行了,如下:select id,time,ip,mac,content,'' as domain,'' as lanip from mylogs,如果不需要登录之类的信息可以在导出前先删除ip=0的记录.不知为什么,不会上传图片了,所以大家就看不到图了.