NOVOTS KMS 词汇表 Glossary    联系我们 Contact Us
查询 Search  
   
按类别浏览 Browse by Category
NOVOTS KMS .: 操作系统 .: Microsoft Windows Server .: 如何利用 LogParser 统计 ActiveSync中的访问量(Exchange 2003)

如何利用 LogParser 统计 ActiveSync中的访问量(Exchange 2003)

 系统管理员经常会收到一些统计的请求。比如,分析IIS日志,统计出最近一段时间内通过Active Sync访问OWA的用户,或者终端类型。如何进行统计和分析呢?微软已经想到了这点,因此提供了一款非常强大的工具:LogParser

 

1. LogParser

 

LogParser功能非常的强大,不但可以分析IIS日志,还可以分析系统事件日志,CSVXML等格式日志,同时LogParser还支持编程接口.

下载地址:http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=24659

 

2.实例代码分析:

 

LogParser 分析IIS日志是采用Sql语句的方式来分析的。具体是如何操作的呢?

Hits_by_User_Query.sql

 

SELECT 

            TO_LOWERCASE (cs-username) AS User,

            MyDeviceType                            AS DeviceType,

            COUNT(*)                                 AS Hits,

            SUM (MySync)                           AS Syncs,

            SUM (MyFolderSync)                  AS Folder_Syncs,

            SUM (MyPing)                            AS Pings,

            SUM (MySendMail)                     AS Emails_Sent,

            SUM (MySmartReply)                  AS SmartReplies,

            SUM (MyMeetingResponse)         AS Meeting_Responses,

            SUM (MyGetAttachment)             AS Get_Attachments

USING

            SUBSTR (cs-uri-query, ADD (INDEX_OF (cs-uri-query, 'DeviceType='), 11),

            INDEX_OF (SUBSTR(cs-uri-query, ADD (INDEX_OF (cs-uri-query, 'DeviceType='), 11)), '&')) AS MyDeviceType,

 

            SUBSTR (cs-uri-query, ADD (INDEX_OF (cs-uri-query, 'Cmd='), 4),

            INDEX_OF (SUBSTR(cs-uri-query, ADD (INDEX_OF (cs-uri-query, 'Cmd='), 4)), '&')) AS MyCmd,

 

            CASE MyCmd

                        WHEN 'Sync' THEN 1

                        ELSE 0

            END AS MySync,

           

            CASE MyCmd

                        WHEN 'Ping' THEN 1

                        ELSE 0

            END AS MyPing,

 

            CASE MyCmd

                        WHEN 'SendMail' THEN 1

                        ELSE 0

            END AS MySendMail,

 

            CASE MyCmd

                        WHEN 'SmartReply' THEN 1

                        ELSE 0

            END AS MySmartReply,

 

            CASE MyCmd

                        WHEN 'MeetingResponse' THEN 1

                        ELSE 0

            END AS MyMeetingResponse,

           

            CASE MyCmd

                        WHEN 'GetAttachment' THEN 1

                        ELSE 0

            END AS MyGetAttachment,

 

            CASE MyCmd

                        WHEN 'FolderSync' THEN 1

                        ELSE 0

            END AS MyFolderSync

/* CSV

If you want to output to CSV, you will need to add the cmd-line parameter -o:CSV

EXAMPLE: LogParser.exe -i:IISW3C -o:CSV file:c:PublicLogParserSQLUser_Activity.sql

*/

INTO C:PublicLogParserOutputHits_By_User.csv

FROM C:PublicLogs*.log

WHERE cs-uri-stem = '/Microsoft-Server-ActiveSync'

GROUP BY User, DeviceType

ORDER BY DeviceType, Hits DESC

 

 

代码说明:

 

函数定义:

USING

<using_clause>

::=

USING <field_expr> AS <alias> [ , <field_expr> AS <alias> ... ]

 

The USING clause declares aliased field-expressions that do not appear in the output records but can be referenced anywhere in the query.

The USING clause is employed to improve query readability.

 

CASE argument <ANY TYPE>

      WHEN testValue1 <ANY TYPE> THEN replaceValue1 <ANY TYPE>

      [ WHEN testValue2 <ANY TYPE> THEN replaceValue2 <ANY TYPE> ...]

      [ ELSE finalReplaceValue <ANY TYPE> ]

END

Compares the argument of the CASE statement with the arguments of the WHEN statements, returning the argument of a THEN statement when a match is found. If no match is found, returns the argument of the ELSE statement, or NULL if no ELSE statement is provided.  

##Case这个函数,很像我们变成中的Ifelse…语法,大家可以理解一下

 

INDEX_OF ( string <STRING>, searchStr <STRING> )

Returns the character position where the first occurrence of a search substring occurs in a string.

## 返回首字母的位置。

ADD ( addend1 <ANY TYPE>, addend2 <ANY TYPE> )

Calculates the sum of two values.

## 两个数值相加。

SUBSTR ( string <STRING>, start <INTEGER> [ , length <INTEGER> ] )

Returns a substring beginning at a specified location and having a specified length.##返回一串字符string,分别要输入其中的起点和终点位置(第几个字母),作为参数。

 

(1)SELECT

***********************************

SELECT 

            TO_LOWERCASE (cs-username) AS User,

            MyDeviceType                            AS DeviceType,

………………

………………

***********************************

利用现有的变量,要么求和,要么就用现有数值,并且重命名成AS后面的名字。用这些字段,比如DeviceTypeUser等等,构成一个表。

也就是说,Select的作用是,选取你要构成的这个表的字段(表头成员)。

 

 

 

 

2USING

***********************************

USING

            SUBSTR (cs-uri-query, ADD (INDEX_OF (cs-uri-query, 'DeviceType='), 11),

 

………………

………………

***********************************

这个表,是从哪里来的呢?现在我们通过Select选取了表头,剩下的就是要构件这个表中的数据了。Using定义了数据的来源。

 

 

 

3USING中的一个函数说明

***********************************

SUBSTR (cs-uri-query, ADD (INDEX_OF (cs-uri-query, 'DeviceType='), 11), INDEX_OF (SUBSTR(cs-uri-query, ADD (INDEX_OF (cs-uri-query, 'DeviceType='), 11)), '&')) AS MyDeviceType,

****************************************

这句利用了

           

例如:(每一列用空格隔开,第一行为表头,同颜色的代表对应)

#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status

2011-09-28 03:48:40 W3SVC1 172.16.0.233 POST /Microsoft-Server-ActiveSync User=zhangxin2&DeviceId=Appl87042PZ1A4S&DeviceType=iPhone&Cmd=Sync&Log=V4TEmSSC:0A0C0D0FS:2A1C0D0SP:1C4I8243S26994R0S2615L0H0P 443 zhangxin2 172.16.26.52 Apple-iPhone3C1/810.2 200 0 0

 

我将解开其中的嵌套关系,逐一分析:

INDEX_OF (cs-uri-query, 'DeviceType=') : 

取得DeviceType=这个字符串中首字母的位置。返回值是整数类型。

 

ADD (INDEX_OF (cs-uri-query, 'DeviceType='), 11), 

"D"的位置加11,取得"="的位置。返回值是整数类型。

 

SUBSTR(cs-uri-query, ADD (INDEX_OF (cs-uri-query, 'DeviceType='), 11)), '&') 

截取”=”和”&” 符号之间的字符串。

 

INDEX_OF (SUBSTR(cs-uri-query, ADD (INDEX_OF (cs-uri-query, 'DeviceType='), 11)), '&'))   计算出”=”和”&” 符号之间的字符串的长度。

 

SUBSTR (cs-uri-query, ADD (INDEX_OF (cs-uri-query, 'DeviceType='), 11), INDEX_OF (SUBSTR(cs-uri-query, ADD (INDEX_OF (cs-uri-query, 'DeviceType='), 11)), '&')) AS MyDeviceType,  

表示,在cs-uri-qurey这个列的字符串,截取,从”=”开始,”&”结尾的这串字符。

就是例子中的:iPhone

 

  

 

(4) 最后一个部分

***********************************

INTO C:PublicLogParserOutputHits_By_User.csv

FROM C:PublicLogs*.log

WHERE cs-uri-stem = '/Microsoft-Server-ActiveSync'

GROUP BY User, DeviceType

ORDER BY DeviceType, Hits DESC

 

***********************************

INTO 定义了文件输出的位置和形式,可以是 csv 或者 gif等形式

FROM 定义了数据的来源(SELECT的数据源),是来自IISlog日志。

WHERE 定义了具体的要筛选的字段,就是来自ActiveSync的日志。

 

Group By 的意思是,将这些输出的数据,根据 UserDeviceType的排列组合后,求和。

ORDER BY 的意思是,根据DeviceType以及Hits DESC来排序。

 

3.总结

 

根据以上的代码分析,我们了解了LogParser是如何工作的,当然这并不是重点。以上的代码保存成 Hits_by_User_Query.sql后,我们便可以用LogParser.exe执行这段代码了。

 

打开CMD, 切换到LogParser.exe的安装路径,输入以下命令:

 

LogParser.exe -i:IISW3C file:c:\Public\Logparser\Hits_By_User.sql
LogParser.exe -i:IISW3C file:c:\Public\Logparser\Hits_By_DeviceType.sql

 

其中,黄色的部分可以更改,就是sql文件存放的位置。

 

输出文件的位置,是在这个sql文件中定义的。

 

还不赶紧试试??分析一下 Hit_By_DeviceType.sql ~~ 

可以在附件中下载。

 

参考文献:

http://blogs.technet.com/b/exchange/archive/2006/02/14/419562.aspx

http://blogs.technet.com/b/vik/archive/2007/06/22/exchange-2003-activesync-usage-and-reporting.aspx

 


这篇文章对你多有用?

相关文章

article 邮箱不能从Exchange 2000移动到Exchange 2003的服务器上,提供几种方案如何把这些邮箱移动到Exchange 2003的服务器上去
邮箱不能从Exchange 2000移动到Exchange...

(No rating)  11-29-2006    Views: 1926   
article 如何在 Exchange Server 2003 中移动 Exchange 数据库和日志
 

(No rating)  6-7-2012    Views: 1313   
article 如何更新 Exchange Server 2003 SP2 中的智能邮件筛选器版本2
概要本文介绍了可用于维护 Microsoft Exchange...

(No rating)  10-27-2006    Views: 6582   

用户评语

添加评语
当前还没有评语.


.: .: .: .: .:
[ 登陆 ]
北京护航科技有限公司 2006

Novots Technologies Limited