IIS日志分析系统项目

IIS日志分析系统项目

一、    概述

近期单位上级要求能够每天分析论坛服务器上的iis日志,但本身论坛软件没有能够分析iis日志的程序,鉴于此只有自己开发。在浏览器上看了很多这方面的文章,在iis日志分析这方面主要有两个方向:1、独立日志分析软件:市面上贩售的日志分析软件,早已把大家需要的数据都进行了分析,你只要运行这个软件就可以了,但这有个缺点就是你要购买该软件。2、结合系统的半独立日志分析软件:在分析iis日志方面主要有软件awstatslog parser,先前我从awstats这个方向走的,发现一个问题,就是awstats要分析的iis日志是有固定选项的,但我们一般的iis日志是默认的选项,比awstats要求的选项要多,这样的话,如果我想分析论坛安装awstats前的日志就很麻烦,我曾经请教过一个网上对awstats比较了解的大侠,也对我表示如果分析跟awstats固定选项不同的日志的方法他也不是很清楚,但是有,不过要研究awstats的英文文档。为此,我就放弃awstats这个方向。最终在走log parser这条道上,我走通了。

二、    log parser

log parser是微软自己开发的日志分析软件,免费而且很小巧很强大,它可以结合系统自动分析日志,不仅仅是分析iis日志,系统上的日志都可以分析。它还有其它好处,例如可以用sql语句分析,可以把分析的数据放入数据库,运行的时候占用的资源也不是很多。但这些自动的功能需要自己动手去写些小的命令来执行,所以我叫它半独立的日志分析软件。它可走的方向很多,但要走你需要的方向,就需要你自己去把它整理结合好。以下就是我希望log parser走的方向。

三、       系统设计

1、设计目标:获得每天有多少不同的ip点击过我们的论坛,获得论坛每天的页面点击量。

2、设计思路:获得上面这两个数据分三步走

A、设计批处理程序让log parser每天固定的时候分析iis日志

B、 iis日志分析的结果放入一个可读的文件里

C、php程序去读这个可读的文件

下面就是走向图,定时bat命令是起点,html程序是终点。

iis日志文件

Log parser

定时Bat命令

结果的Txt文档

Php文件

Htm程序

3、详细步骤:

A、 下载log parser2.2安装到windows2003上,最好下msi格式的,都是免费的。

B、 bat命令

Log.bat

@echo off

 

set TodayYear=%date:~0,4%

set TodayMon=%date:~5,2%

set TodayDay=%date:~8,2%

 

set LastdayYear=

set LastdayMon=

set LastdayDay=

 

set LastdayYear=%TodayYear%

set LastdayMon=%TodayMon%

set /A LastdayDay=TodayDay-1

 

if "%LastdayDay%" == "0" (

        if "!LastdayMon!" == "01" (

                set LastdayMon=12

                set /A LastdayYear-=1

        ) else (

                set /A LastdayMon-=1

               

                if "!LastdayMon!" == "1" set LastdayMon=01

                if "!LastdayMon!" == "2" set LastdayMon=02

                if "!LastdayMon!" == "3" set LastdayMon=03

                if "!LastdayMon!" == "4" set LastdayMon=04

                if "!LastdayMon!" == "5" set LastdayMon=05

                if "!LastdayMon!" == "6" set LastdayMon=06

                if "!LastdayMon!" == "7" set LastdayMon=07

                if "!LastdayMon!" == "8" set LastdayMon=08

                if "!LastdayMon!" == "9" set LastdayMon=09

        )

       

        if "!LastdayMon!" == "01" set LastdayDay=31

        if "!LastdayMon!" == "03" set LastdayDay=31

        if "!LastdayMon!" == "04" set LastdayDay=30

        if "!LastdayMon!" == "05" set LastdayDay=31

        if "!LastdayMon!" == "06" set LastdayDay=30

        if "!LastdayMon!" == "07" set LastdayDay=31

        if "!LastdayMon!" == "08" set LastdayDay=31

        if "!LastdayMon!" == "09" set LastdayDay=30

        if "!LastdayMon!" == "10" set LastdayDay=31

        if "!LastdayMon!" == "11" set LastdayDay=30

        if "!LastdayMon!" == "12" set LastdayDay=31

       

        if "!LastdayMon!" == "02" (

                set IsLeapYear=

               

                set /A IsLeapYear=!LastdayYear!%%400

                if "!IsLeapYear!" == "0" (

                        set LastdayDay=29

                        goto MAKELASTDATE

                )

               

                set /A IsLeapYear=!LastdayYear!%%100

                if "!IsLeapYear!" == "0" (

                        set LastdayDay=28

                        goto MAKELASTDATE

                )

               

                set /A IsLeapYear=!LastdayYear%%4

                if "!IsLeapYear!" == "0" (

                        set LastdayDay=29

                        goto MAKELASTDATE

                ) else (

                        set LastdayDay=28

                        goto MAKELASTDATE

                )

        )

)

 

:MAKELASTDATE

 

if "%LastdayDay%" == "1" set LastdayDay=01

if "%LastdayDay%" == "2" set LastdayDay=02

if "%LastdayDay%" == "3" set LastdayDay=03

if "%LastdayDay%" == "4" set LastdayDay=04

if "%LastdayDay%" == "5" set LastdayDay=05

if "%LastdayDay%" == "6" set LastdayDay=06

if "%LastdayDay%" == "7" set LastdayDay=07

if "%LastdayDay%" == "8" set LastdayDay=08

if "%LastdayDay%" == "9" set LastdayDay=09

 

set LastdayYear=%LastdayYear:~2,2%

 

set LastDate=%LastdayYear%%LastdayMon%%LastdayDay%

 

path c:/program Files/Log Parser 2.2

 

logparser "select count(distinct c-ip) as c-ip-hits into 'D:/ logfenxi/%LastdayYear%%LastdayMon%/ip%LastDate%.txt' from 'D:/ex%LastDate%.log'" -o:nat

 

logparser "select count(*) as cs-uri-stem-hits into 'D:/ logfenxi/%LastdayYear%%LastdayMon%/cs%LastDate%.txt' from 'D:/ex%LastDate%.log' where cs-uri-stem like '%%php'" -o:nat

写此程序的注意事项:1、我写的这个bat命令是分析前一天的日志,所以在日期上要写那么一大段,因为要考虑到闰月和每月的天数不同,也有简单的写法网上有,这段日期的写法也是我从网上找来的2select语句,这个很重要,你要获得的数据都在select语句上了,如果你想要其它的数据就可以写其它的sql语句,而且注意like这个词,如果我们模糊查询不都是写 like ‘%php’的吗?但在bat命令里你记得要写成’%%php’,如果不这样你的select语句会出错,会没有like后面的东西。

We.Htm

<table width="75%" border="1">

  <tr>

    <td rowspan="3">2008</td>

    <td><a href="du.php?yuefen=0801">01</a></td>

    <td><a href="du.php?yuefen=0802">02</a></td>

    <td><a href="du.php?yuefen=0803">03</a></td>

    <td><a href="du.php?yuefen=0804">04</a></td>

  </tr>

  <tr>

    <td><a href="du.php?yuefen=0805">05</a></td>

    <td><a href="du.php?yuefen=0806">06</a></td>

    <td><a href="du.php?yuefen=0807">07</a></td>

    <td><a href="du.php?yuefen=0808">08</a></td>

  </tr>

  <tr>

    <td><a href="du.php?yuefen=0809">09</a></td>

    <td><a href="du.php?yuefen=0810">10</a></td>

    <td><a href="du.php?yuefen=0811">11</a></td>

    <td><a href="du.php?yuefen=0812">12</a></td>

  </tr>

    <tr>

    <td rowspan="3">2009</td>

    <td><a href="du.php?yuefen=0901">01</a></td>

    <td><a href="du.php?yuefen=0902">02</a></td>

    <td><a href="du.php?yuefen=0903">03</a></td>

    <td><a href="du.php?yuefen=0904">04</a></td>

  </tr>

  <tr>

    <td><a href="du.php?yuefen=0905">05</a></td>

    <td><a href="du.php?yuefen=0906">06</a></td>

    <td><a href="du.php?yuefen=0907">07</a></td>

    <td><a href="du.php?yuefen=0908">08</a></td>

  </tr>

  <tr>

    <td><a href="du.php?yuefen=0909">09</a></td>

    <td><a href="du.php?yuefen=0910">10</a></td>

    <td><a href="du.php?yuefen=0911">11</a></td>

    <td><a href="du.php?yuefen=0912">12</a></td>

  </tr>

    <tr>

    <td rowspan="3">2010</td>

    <td><a href="du.php?yuefen=1001">01</a></td>

    <td><a href="du.php?yuefen=1002">02</a></td>

    <td><a href="du.php?yuefen=1003">03</a></td>

    <td><a href="du.php?yuefen=1004">04</a></td>

  </tr>

  <tr>

    <td><a href="du.php?yuefen=1005">05</a></td>

    <td><a href="du.php?yuefen=1006">06</a></td>

    <td><a href="du.php?yuefen=1007">07</a></td>

    <td><a href="du.php?yuefen=1008">08</a></td>

  </tr>

  <tr>

    <td><a href="du.php?yuefen=1009">09</a></td>

    <td><a href="du.php?yuefen=1010">10</a></td>

    <td><a href="du.php?yuefen=1011">11</a></td>

    <td><a href="du.php?yuefen=1012">12</a></td>

  </tr>

    <tr>

    <td rowspan="3">2011</td>

    <td><a href="du.php?yuefen=1101">01</a></td>

    <td><a href="du.php?yuefen=1102">02</a></td>

    <td><a href="du.php?yuefen=1103">03</a></td>

    <td><a href="du.php?yuefen=1104">04</a></td>

  </tr>

  <tr>

    <td><a href="du.php?yuefen=1105">05</a></td>

    <td><a href="du.php?yuefen=1106">06</a></td>

    <td><a href="du.php?yuefen=1107">07</a></td>

    <td><a href="du.php?yuefen=1108">08</a></td>

  </tr>

  <tr>

    <td><a href="du.php?yuefen=1109">09</a></td>

    <td><a href="du.php?yuefen=1110">10</a></td>

    <td><a href="du.php?yuefen=1111">11</a></td>

    <td><a href="du.php?yuefen=1112">12</a></td>

  </tr>

</table>

du.php

<?php

$yuefen = $_GET['yuefen'];

 

$map="D:/ logfenxi/".$yuefen;

 

echo "<table cellspacing='1' cellpadding='1' width='100%' border='1'>";

 

for($i=1;$i<32;$i++)

{

if($i<10)

       {

       $i="0".$i;

       }

$riqi=$yuefen.$i;

$ipriqi=$map."/ip".$riqi;

$csriqi=$map."/cs".$riqi;

$ipfile=$ipriqi.".txt";

$csfile=$csriqi.".txt";

 

if (file_exists($ipfile) && is_readable ($ipfile))

       {

       $fp1=fopen($ipfile,"rb");

       $fp2=fopen($csfile,"rb");

       $content1=fread($fp1,filesize($ipfile));

       $content2=fread($fp2,filesize($csfile));

       echo "<tr><td>$riqi</td><td>$content1</td><td>$content2</td></tr>";

       fclose($fp1);

       fclose($fp2);

       }

}

echo "</table>";

 

?>

在服务器上设置任务计划,到“开始”的“附件”的“系统工具”的“任务计划”里添加,让bat命令每天执行。

四、    总结

总算写完了,其实这里面还有很多东西需要说明,因为我在设计这个东西的时候遇到很多的问题,例如:bat命令怎么写,文件夹要怎么设置才最简单明了,如何给别人很清晰的东西(所以我写了we.htm这个文件,这样我就不用我自己把我看到的数据告诉编辑了,编辑们自己到网页上看)。其实还有很方便的方法得到我要得到的数据,例如msde数据库,但论坛上本来已经安了mysql数据库,所以不想安其它的数据库了,要不然还要考虑数据库安全的问题,太麻烦了,我就按我的意愿来做了,但如果你们需要的话,可以尝试看看。搞这个系统费了我很长的时间,但总算搞好了,也算聊以安慰了。要谢谢的人很多,很多人把他们的心血和成就免费提够给大家,我从中学到了很多,才把系统做完的,所以感谢这些无私并且有奉献精神的人。

其实在日志分析上还有很多文章可以做,相信网上还有很多的强人,如果你们有需要都可以去研究。希望我的文章对你们有帮助。

啊!在csdn博客上面我也不知道如何加图片,但我相信大家应该能看懂这个流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值