日志分析服务器

2024-06-24

日志分析服务器(精选9篇)

日志分析服务器 篇1

FTP的全称是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议。FTP服务器,则是在互联网上提供存储空间的计算机,它们依照FTP协议提供服务。当它们运行时,用户就可以连接到服务器上下载文件,也可以将自己的文件上传到FTP服务器中。为了方便文件传输,很多单位都构建了自己的FTP服务器。

Serv-U是目前搭建FTP服务器使用最普遍的服务器软件之一。通过使用Serv-U,用户能够将任何一台PC设置成一个FTP服务器,这样,用户或其他使用者就能够使用FTP协议,通过在同一网络上的任何一台PC与FTP服务器连接,进行文件或目录的复制,移动,创建,和删除等。

Serv-U FTP服务器除了能够实时的进行监控之外,还提供了强大的日志记录功能。Serv-U日志文件详细记录了用户访问FTP服务器的各种信息。Serv-U原始的日志文件只有经分析处理后,才能直观地为网络管理人员提供各种有用的信息。在互联网很难找到Serv-U日志文件分析软件,本文在对Serv-U日志文件格式分析的基础上,详细地介绍在.NET Framework环境中使用C#快速开发Serv-U日志文件分析程序的相关技术问题。

1 Serv-U简介及日志文件格式

Serv-U是一个非常好的FTP服务器软件,它设置简单,功能强大,性能稳定。Serv-U FTP服务器并不是简单地提供文件的下载,还为用户的系统安全提供了相当全面的保护,可以应用于Internet范围内文件共享的解决方案。其主要功能特点有:1)流量控制及带宽限制。支持对上传、下载流量和网络带宽设定限制,以确保带宽不会被少数FTP用户独占;2)磁盘空间限制。可以设定每个帐号可使用的磁盘空间;3)断点续传能有效地降低重复下载;4)远程管理方便用户从任何地方管理FTP Server,提高工作效率;5)安全机制通过严格的权限控制,提供系统安性和稳定性;6)支持多宿主IP站点;7)作为系统服务运行。Serv-U的安装和设置非常简单,在此不作介绍。

除了能够实时的进行监控之外,Serv-U还提供了强大的日志记录功能,从而方便用户记录和总结一段时期内Serv-U的运行情况。选择“FILE”菜单下的“LOGGING”,弹出日志设置窗口,用户可以选择对哪些事件进行记录,以及将记录信息保存到何处。在该窗口的右侧,用户可以选择对不同的事件进行记录,其中包括系统信息,安全信息等,同时用户还可以设置是将所记录的信息显示在Serv-U的主窗口内,还是保存到某一指定文件内。出于耗用系统资源和备份信息的需要,建议用户把日志信息保存到指定的文件内。Serv-U的日志记录文件采用统一的格式,具体如下:

最前面的数字“n”代表所记录信息的类别,分别为:n=1:系统信息(错误信息等);n=2:用户发出的FTP命令;n=3:文件下载;n=4:文件上传;n=5:安全信息(用户登录信息等);n=6:服务器响应的FTP命令;n=7:WinSock使用记录;n=8:DLL文件访问记录。另外,括号中的“XXXX”是Serv-U赋予每一个来访用户的一个唯一的数字标识。

2 在C#中应用哈希表

在对Serv-U日志进行分析时,需要进行大量的查表操作,为了提高查表的速度,我们使用哈希表来存储处理数据。自己编程实现一个完整的哈希表,需要数百行代码,非常复杂。

在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器[1],用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写,value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对。在哈希表中添加一个key/value键值对使用HashtableObject.Add(key,value)方法。在哈希表中若要去除某个key/value键值对使用HashtableObject.Remove(key)方法。从哈希表中移除所有元素使用HashtableObject.Clear()方法。若要判断哈希表中是否包含某个特定键key使用HashtableObject.Contains(key)方法。关于Hashtable的详细介绍可参考Visual C#.net技术资料。

3 分析程序的实现

分析程序的输入是Serv-U日志文件,以HTML文件方式输出分析结果,以便于在网上发布。下面以统计FTP服务器上各个文件被下载次数为例介绍主要实现代码。

4 结束结

由于C#提供了哈希表类,极大简化了分析程序开发的复杂性,一般的网站管理人员按本文介绍的方法可以快束地写出自己的Serv-U FTP服务器日志分析程序,以满足自己的特定分析与统计需求。

参考文献

[1]Jason Price.Visual C#.Net从入门到精通[M].北京:电子工业出版社,2003.

日志分析服务器 篇2

1 用 cronolog 干净,安全地轮循apache“日”志

2 用 sort -m 合并排序多个日志

根据个人的使用经历:

1 先介绍apache日志的合并方法;

2 然后根据由此引出的问题说明日志轮循的必要性和解决方法,介绍如何通过cronolog对apache日志进行轮循;

中间有很多在设计日志合并过程中一些相关工具的使用技巧和一些尝试的失败经历……

我相信解决以上问题的路径不止这一条途径,以下方案肯定不是最简便或者说成本最低的,希望能和大家有更多的交流,

{0} 多服务器日志合并统计的必要性:

越来越多大型的WEB服务使用DNS轮循来实现负载均衡:使用多个同样角色的服务器做前台的WEB服务,这大大方便了服务的分布规划和扩展性,但多个服务器的分布使得日志的分析统计也变得有些麻烦。如果使用webalizer等日志分析工具对每台机器分别做日志统计: 1 会对数据的汇总带来很多麻烦,比如:统计的总访问量需要将SERVER1 SERVER2...上指定月份的数字相加。 2 会大大影响统计结果中唯一访客数unique visits,唯一站点数unique sites的等指标的统计,因为这几个指标并非几台机器的代数相加。

统一日志统计所带来的好处是显而易见的,但如何把所有机器的统计合并到一个统计结果里呢?

首先也许会想:多个服务器能不能将日志记录到同一个远程文件里呢?我们不考虑使用远程文件系统记录日志的问题,因为带来的麻烦远比你获得的方便多的多……

因此,要统计的多个服务器的日志还是:分别记录=>并通过一定方式定期同步到后台=>合并=>后用日志分析工具来进行分析。

首先,要说明为什么要合并日志:因为webalizer没有将同一天的多个日志合并的功能

先后运行

webalizer log1

webalizer log2

webalizer log3

这样最后的结果是:只有log3的结果。

能不能将log1<

因为一个日志的分析工具不是将日志一次全部读取后进行分析,而且流式的读取日志并按一定时间间隔,保存阶段性的统计结果。因此时间跨度过大(比如2条日志间隔超过5分钟),一些日志统计工具的算法就会将前面的结果“忘掉”。因此, log1<

{1} 日志合并问题

多个服务的合并统计就是要把日志按时间排序后合并成一个文件

典型的多个日志文件的时间字段是这样的:

log1 log2 log3

00:15:00 00:14:00 00:11:00

00:16:00 00:15:00 00:12:00

00:17:00 00:18:00 00:13:00

00:18:00 00:19:00 00:14:00

14:18:00 11:19:00 10:14:00

15:18:00 17:19:00 11:14:00

23:18:00 23:19:00 23:14:00

日志合并必须是按时间将多个日志的交叉合并。合并后的日志应该是:

00:15:00 来自log1

00:15:00 来自log2

00:16:00 来自log1

00:17:00 来自log3

00:18:00 来自log2

00:19:00 来自log1

....

如何合并多个日志文件?

下面以标准的clf格式日志(apache)为例:

apche的日志格式是这样的:

%h %l %u %t “%r” %>s %b

具体的例子:

111.222.111.222 - - [03/Apr/:10:30:17 +0800]

“GET / HTTP/1.1” 200 419

最简单的想法是将日志一一读出来,然后按日志中的时间字段排序

cat log1 log2 log3 |sort -k 4 -t “ ”

注释:

-t “ ”: 日志字段分割符号是空格

-k 4: 按第4个字段排序,也就是:

[03/Apr/2002:10:30:17 +0800] 这个字段

-o log_all: 输出到log_all这个文件中

但这样的效率比较低,要知道。如果一个服务已经需要使用负载均衡,其服务的单机日志条数往往都超过了千万级,大小在几百M,这样要同时对多个几百M的日志进行排序,机器的负载可想而之……

其实有一个优化的途径,要知道:即使单个日志本身已经是一个“已经按照时间排好序“的文件了,而sort对于这种文件的排序合并提供了一个优化合并算法:使用 -m merge合并选项,

因此:合并这样格式的3个日志文件log1 log2 log3并输出到log_all中比较好方法是:

sort -m -t “ ” -k 4 -o log_all log1 log2 log3

注释:

-m: 使用 merge优化算法

注意:合并后的日志输出最好压缩以后再发给webalizer处理

有的系统能处理2G的文件,有的不能。有的程序能处理大于2G的文件,有的不能。尽量避免大于2G的文件,除非确认所有参与处理的程序和操作系统都能处理这样的文件。所以输出后的文件如果大于2G,最好将日志gzip后再发给webalizer处理:大于2G的文件分析过程中文件系统出错的可能性比较大,并且gzip后也能大大降低分析期间的I/O操作。

日志的按时间排序合并就是这样实现的。

{2} 日志的轮循机制:

让我们关心一下数据源问题:webalizer其实是一个按月统计的工具,支持增量统计:因此对于大型的服务,我可以按天将apache的日志合并后送给webalizer统计。WEB日志是如何按天(比如每天子夜00:00:00)截断呢?

如果你每天使用crontab:每天0点准时将日志备份成accesserials_log_yesterday

mv /path/to/apache/log/accesserials_log

/path/to/apache/log/accesserials_log_yesterday

的话:你还需要:马上运行一下:apache restart 否则:apache会因为的日志文件句柄丢失不知道将日志记录到哪里去了。这样归档每天子夜重启apache服务会受到影响。

比较简便不影响服务的方法是:先复制,后清空

cp /path/to/apache/log/accesserials_log /path/to/apache/log/accesserials_log_yesterday

echo >/path/to/apache/log/accesserials_log

严肃的分析员会这样做发现一个问题:

但cp不可能严格保证严格的0点截断。加入复制过程用了6秒,截断的accesserials_log_yesterday日志中会出现复制过程到00:00:06期间的日志。对于单个日志统计这些每天多出来几百行日志是没有问题的。但对于多个日志在跨月的1天会有一个合并的排序问题:

[31/Mar/2002:59:59:59 +0800]

[31/Mar/2002:23:59:59 +0800]

[01/Apr/2002:00:00:00 +0800]

[01/Apr/2002:00:00:00 +0800]

要知道[01/Apr/2002:00:00:00 这个字段是不可以进行“跨天排序”的。因为日期中使用了dd/mm/yyyy,月份还是英文名,如果按照字母排序,很有可能是这样的结果:排序导致了日志的错误

[01/Apr/2002:00:00:00 +0800]

[01/Apr/2002:00:00:00 +0800]

[01/Apr/2002:00:00:00 +0800]

[01/Apr/2002:00:00:00 +0800]

[01/Apr/2002:00:00:00 +0800]

[01/Apr/2002:00:00:00 +0800]

[01/Apr/2002:00:00:00 +0800]

[31/Mar/2002:59:59:59 +0800]

[31/Mar/2002:59:59:59 +0800]

[31/Mar/2002:23:59:59 +0800]

[31/Mar/2002:59:59:59 +0800]

[31/Mar/2002:23:59:59 +0800]

这些跨天过程中的非正常数据对于webalizer等分析工具来说简直就好像是吃了一个臭虫一样,运行的结果是:它可能会把前一个月所有的数据都丢失!因此这样的数据会有很多风险出现在处理上月最后一天的数据的过程中。

问题的解决有几个思路:

1 事后处理:

所以一个事后的处理的方法是:用grep命令在每月第1天将日志跨月的日志去掉,比如:

grep -v “01/Apr” accesserials_log_04_01 > accesserials_log_new

修改SORT后的日志:所有跨天的数据去掉,

也许对日志的事后处理是一个途径,虽然sort命令中有对日期排序的特殊选项 -M(注意是:大写M),可以让指定字段按照英文月份排序而非字母顺序,但对于apache日志来说,用SORT命令切分出月份字段很麻烦。(我尝试过用 “/”做分割符,并且使用“月份” “年:时间”这两个字段排序)。虽然用一些PERL的脚本肯定可以实现,但最终我还是放弃了。这不符合系统管理员的设计原则:通用性。 并且你需要一直问自己:有没有更简单的方法呢?还有就是将日志格式改成用TIMESTAMP(象SQUID的日志就没有这个问题,它的日志本身就是使用TIMESTAMP做时间时间戳的),但我无法保证所有的日志工具都能识别你在日期这个字段使用了特别的格式。

2 优化数据源:

最好的办法还是优化数据源。将数据源保证按天轮循,同一天的日志中的数据都在同一天内。这样以后你无论使用什么工具(商业的,免费的)来分析日志,都不会因为日志复杂的预处理机制受到影响。

首先可能会想到的是控制截取日志的时间:比如严格从0点开始截取日志,但在子夜前1分钟还是后一分钟开始截取是没有区别的,你仍然无法控制一个日志中有跨2天记录的问题,而且你也无法预测日志归档过程使用的时间。

因此必须要好好考虑一下使用日志轮循工具的问题,这些日志轮循工具要符合:

1 不中断WEB服务:不能停apache=>移动日志=>重启apache

2 保证同一天日志能够按天轮循:每天一个日志00:00:00-23:59:59

3 不受apache重启的影响:如果apache每次重启都会生成一个新的日志是不符合要求的

4 安装配置简单

首先考虑了apache/bin目录下自带的一个轮循工具:rotatelogs 这个工具基本是用来按时间或按大小控制日志的,无法控制何时截断和如何按天归档。

然后考虑logrotate后台服务:logrotate是一个专门对各种系统日志(syslogd,mail)进行轮循的后台服务,比如SYSTEM LOG,但其配置比较复杂,放弃,实际上它也是对相应服务进程发出一个-HUP重启命令来实现日志的截断归档的。

在apache的FAQ中,推荐了经过近2年发展已经比较成熟的一个工具cronolog:安装很简单:

configure=>make=> make install

他的一个配置的例子会让你了解它有多么适合日志按天轮循:对httpd.conf做一个很小的修改就能实现:

TransferLog “|/usr/sbin/cronolog /web/logs/%Y/%m/%d/access.log”

ErrorLog “|/usr/sbin/cronolog /web/logs/%Y/%m/%d/errors.log”

然后:日志将写入

/web/logs/2002/12/31/access.log

/web/logs/2002/12/31/errors.log

午夜过后:日志将写入

/web/logs//01/01/access.log

/web/logs/2003/01/01/errors.log

而2003 2003/01 和 2003/01/01 如果不存在的话,将自动创建

所以,只要你不在0点调整系统时间之类的话,日志应该是完全按天存放的(00:00:00-23:59:59),后面日志分析中:[31/Mar/2002:15:44:59这个字段就和日期无关了,只和时间有关。

测试:考虑到系统硬盘容量,决定按星期轮循日志

apache配置中加入:

#%w weekday

TransferLog “|/usr/sbin/cronolog /path/to/apache/logs/%w/accesserials_log”

重启apache后,除了原来的CustomLog /path/to/apche/logs/accesserials_log继续增长外,系统log目录下新建立了 3/目录(测试是在周3),过了一会儿,我忽然发现2个日志的增长速度居然不一样!

分别tail了2个日志才发现:

我设置CustomLog使用的是combined格式,就是包含(扩展信息的),而TransferLog使用的是缺省日志格式,看了apache的手册才知道,TransferLog是用配置文件中离它自己最近的一个格式作为日志格式的。我的httpd.conf里写的是:

LogFormat ..... combined

LogFormat ... common

...

CustomLog ... combined

TransferLog ...

所以TrasferLog日志用的是缺省格式,手册里说要让TRANSFER日志使用指定的格式需要:

LogFormat “%h %l %u %t ”%r“ %>s %b ”%{Referer}i“ ”%{User-Agent}i“”

TransferLog “|/usr/local/sbin/cronolog /path/to/apache/logs/%w/accesserials_log”

重启,OK,日志格式一样了。

这样的设置结果其实是同时在logs目录下分别记录2个日志accesserials_log和%w/accesserials_log,能不能只记录%w/下的日志那?

查apache手册,更简单的方法:直接让CustomLog输出到cronolog归档日志,并且还能指定格式。

CustomLog “|/usr/local/sbin/cronolog

/path/to/apache/logs/%w/accesserials_log” combined

最后是一个日志同步的问题。

任务:每天凌晨找到前1天的日志,另存一个文件准备发送到服务器上。

比如我要保留前1周的日志:每天复制前1天的日志到指定目录,等待日志服务器来抓取:

/bin/cp /path/to/logs/`date -v-1d +%w`/accesserials_log

/path/to/sync/logs/accesserials_yesterday

在FREEBSD上使用以下命令

date -v-1d +%w

注释:

-v-1d: 前1天,而在LINUX上这个选项应该是date -d yesterday

+%w: weekday,由于使用的都是标准时间函数库,所有工具中的WEEKDAY定义都是一样的 0-6 => 周日-周六

注意:写到CRONTAB里的时候“%”前面需要加一个“”转义:每天0点5分进行一次日志归档

5 0 * * * /bin/cp /path/to/logs/`date -v-1d +%w`/accesserials_log

/path/to/for_sync/logs/accesserials_yesterday

首次开始cronolog日志统计是周3,一周以后日志又将轮循回3/accesserials_log

但这次日志是追加到3/accesserials_log还是重新创建一个文件呢?>>accesserials_log or >accesserials_log?

我测试的结果是日志将被追加:

[01/Apr/2002:23:59:59 +0800]

[01/Apr/2002:23:59:59 +0800]

[08/Apr/2002:00:00:00 +0800]

[08/Apr/2002:00:00:00 +0800]

肯定是不希望每次日志还带着上周的数据的并重复统计一次的(虽然对结果没影响),而且这样%w/下的日志不是也越来越多了吗?

解决方法1 把每天的cp改成mv

解决方法2 每天复制完成后:删除6天以前的accesserials_log日志

find /path/to/apache/logs -name accesserials_log -mtime +6 -exec rm -f {};

多保留几天的日志还是有必要的:万一日志分析服务器坏了一天呢?

总结:

1 用 cronolog 干净,安全地轮循日志

2 用 sort -m 排序合并多个日志

参考资料:

日志分析统计工具:

directory.google.com/Top/Computers/Software/

Internet/Site_Management/Log_Analysis/

Apche的日志设置:

httpd.apache.org/docs/mod/mod_log_config.html

apache的日志轮循:

httpd.apache.org/docs/misc/FAQ.html#rotate

日志服务器建设和应用 篇3

日志是设备对于每天发生的事件的文件记录。服务器、网络设备、安全设备每天都在产生大量的日志,这些日志记录了设备的运行情况、用户对设备的访问操作和通过设备流转的数据的简要信息,根据这些日志能够监控网络运行,发现异常事件,还可以总结设备运行规律,进行优化设计。日志文件默认分布于大量设备自身的日志缓存或者日志文件中,信息比较庞杂,一个个设备查看日志有很大的盲目性,工作量也不是日常维护管理可以承担的,这就导致了通常日志文件仅仅存在一段时间后被新的日志所覆盖,从来没有得到有效的利用。要利用日志信息,就要对日志进行有效的管理,建立日志服务器能够胜任这一工作。

1 日志服务器

1.1 建立日志服务器

日志服务器是一套软硬件结合的系统,见图1。为了日志数据的安全,需要一台专门的服务器来承担,服务器的性能没有特殊要求,性能较高日志处理速度更快。日志服务器必须有足够的存储空间,空间大小根据需要记录日志的设备数量、设备类型、和要存储日志的时间长短来确定。在当前技术条件下,日志服务器的硬件要求比较容易满足,投入并不大。

日志服务器还需要软件系统来完成日志的传输和管理。Linux环境下的syslog是比较有效的日志服务器软件,在Windows下也有syslog的兼容版本可以使用,比如kiwi syslog server,该软件可以在其官方网站(www.kiwisyslog.com)上免费下载使用,如果需要更多功能,可以注册该软件来获得。日志服务器软件按照约定的传输类型收集从设备发送过来的日志信息,集中进行管理,这种传输类型在大多数网络设备上被支持,只需要简单设置。

1.2 日志服务器的重要作用

日志服务器实现了大量设备日志信息的集中存储管理,根据这些信息可以对网络状况、网络安全进行监管,通过分析日志可以掌握信息发布等服务的应用情况,方便改进服务质量。

1.2.1 网络运行情况监管

日常的维护管理中,可以根据实际情况定义一些检索关键词,根据检索结果就能实时监控网路情况。网络设备中的端口、接口、路由等如果出现异常,会导致网络断开,或者网络服务无法实现,同时产生日志信息。若这些信息分散于设备自身的缓存,那么一个节点的网络出现问题,你需要延全程路由对所有关联的设备进行排查;而日志信息集中存放,只要检索集中日志中的相关信息就可以找出故障点。

1.2.2 网络安全防护

服务器是信息、数据主要保存地,也是网络攻击的主要目标,一旦攻击成功,成为超级用户以后,整个计算机系统完全在其掌握之中,正常情况下黑客在系统中所有的动作会被日志系统所记录。网络设备的日志能够记录登录该设备的用户信息和执行的所有命令,攻击者对网络设备的所有篡改都将被记录在案。为了隐藏自己的痕迹,大多数黑客会删除日志文件中自己操作的指纹,甚至删除所有的日志文件,这对于攻击者是轻而易举的。

把日志信息集中发送到日志服务器保存,攻击者要想篡改或删除日志,就要攻破日志服务器,而专门的日志服务器,只开专门的端口,只和内部设备交互,很难攻破;单独一个日志服务器,网络管理员也有精力长期从控制台监控,被攻击能及时发现。

通过查看日志文件中攻击者留下的痕迹,系统管理员可以发现黑客攻击的手段及特点,从而能够采取相关措施,为抵御下一次攻击做好准备;日志文件也是攻击活动最重要的证据,完好的保存有利于找出攻击者,给予惩治。

1.3 日志服务器安全

日志服务器要能达到预期的效果,必须保证要非常安全,以下几个方面就应注意:

使用一个单独的服务器,关闭多余的所有服务,禁止网络访问;服务器的用户严格控制,用户名和密码专人掌握,密码强度要足够,并强制过期更换;有条件的建议使用linux系统。

保证UDP 514口没有对外连接,这样可以保护你的LOG服务器不接受从外界来的不好的或者未认证的LOG信息。

日志服务器安装在内部服务器群中,受到边界防火墙和服务防火墙的保护,定制严格的访问策略,充分利用防火墙的功能对接受日志的服务器进行保护。

对安全要求更高的可以设定密钥,为每次传输的日志记录生成一个有动态特性的鉴别码,然后采用加密技术对日志内容进行加密,最后把加密的信息传输到日志服务器保存。

2 日志采集

理想的日志服务器要采集网络中全部设备的日志信息,至少也要包括网络设备、安全设备和应用服务器。对于不同的设备,日志采集方法不太一样,同类设备不同型号只有一些具体命令上的差异。下面阐述几种重要设备的日志采集方法。

2.1 交换机日志的采集

交换机的型号很多,基本都提供了日志处理程序。交换机的信息分为三类:日志信息、调试信息和告警信息。按信息的严重等级或紧急程度,交换机把每类信息划分为八个等级,见表1。严重性越高的信息,其严重等级数值越小,emergencies表示的等级数值为1,debugging为8。在按等级进行信息过滤时,采用的规则是:禁止严重等级数值大于所设置阈值的信息输出。因此,当设置严重等级阈值为debugging时,所有的信息都会输出。

交换机支持信息向6个方向进行输出,见表2,系统对每个输出方向缺省分配一个信息通道。

交换机的日志信息还包含产生该条日志信息的模块信息,缺省设置一般是default,表示所有模块,具体的模块信息可以参考交换机的手册。

配置日志发送命令很简单,以Cisco交换机为例,在全局配置模式下执行如下命令:

Logging trap debugging

第一条命令设置日志信息级别为debugging,即数值8,后面一条是把日志信息输出到日志服务器上,“1.2.3.4”是日志服务器的IP地址。

对于H3C交换机,日志输出利用信息中心系统实现。在全局配置模式下,逐条执行以下命令:

第一条命令开启信息中心系统,第二条设置日志服务器地址为1.2.3.4,第三条命令设置信息源为default,表示所有模块,通道为2号日志主机。

2.2 防火墙日志的采集

防火墙日志采集方法和交换机非常类似,防火墙系统提供了发送日志到日志服务器的设置,如图2示。

2.3 网站服务器日志的采集

网站服务器很多是用Windows server 2000/2003系统建立,系统日志文件包括:应用程序日志、安全日志、系统日志,以及FTP连接日志和HTTPD日志等。日志保存的默认的位置如下:

安全日志文件:%systemroot%system32configSecEvent.EVT

系统日志文件:%systemroot%system32configSysEvent EVT

应用程序日志文件:%systemroot%system32configApp Event.EVT

FTP连接日志和HTTPD事务日志:%systemroot%system32LogFiles下面还有子文件夹,分别对应该FTP和Web服务的日志,其对应的后缀名为.Log。

evtsys是一个把服务器的.evt日志转换成syslog日志,并发送给日志服务器的软件。下载该软件,把文件都复制到系统盘的“windowssystem32”目录下,然后在命令行下执行以下代码:

其中-i参数表示安装,x.x.x.x是日志服务器的IP地址,-f参数设定发送日志的模块,分为24个层次,小于设定值的模块的日志都将发送,上例中我选的是local7,所以所有日志都会发送到日志服务器。

3 日志服务器应用

集中存储到日志服务器的日志数据,既可以在日常维护管理中人工查阅,也可以对其进行挖掘分析,开发程序进行处理,应用于网络的自动化管理。

3.1 日常维护管理使用

查看日志服务器上的综合日志信息,全面监控网络运行情况,及时发现可能发生的安全事件,做出响应。只在重大事件之后才审查日志,只能获得事后分析的好处,而不能获得事前预防的好处;主动查看日志有助于用户更好地实现安全设施的价值,了解攻击行为将在何时发生并及时采取措施。

面对海量的日志信息,首先需要根据事件的影响程度和网管人员的关心程度,区分日志的先后次序,对信息进行首次筛选;然后对不同设备的日志信息进行全面关联分析,得到综合的结果。查阅过程中,不能先入为主的只对已定义的不良信息进行研究,而忽略未定义的信息,往往这些新的蛛丝马迹中可以发现新的攻击、新的异常,提高发现潜在攻击行为的几率。

3.2 日志数据分析

即使在日常查阅中使采取上述的一些策略,人工分析日志信息的效率仍很低,并且不能完全发挥日志的作用。借助数据库存储日志数据,进行统计分析,能够更高效的处理信息,提高网络管理的自动化程度。

3.2.1 日志数据处理

根据图3所示的几条kiwi syslog服务器软件收集的日志信息,可以看出每条记录都是一个5元组:

其中Date、Time、Hostname、Priority表示的信息很明确,分别是日期、时间、主机名或IP地址以及产生日志的模块名,Message信息集中表示了该条日志的主要内容,主要包括来源、目的、动作、完成状态等信息,这些信息可以使用正则表达式从日志记录中筛选出来,存储在数据库中,用于后续的分析。

3.2.2 日志数据分析

经过预处理的日志数据,表现为数据库中的时间序列数据,可以很方便的进行统计分析,也能方便的检索出孤立点,分析异常事件。

统计分析:根据一定的时间段进行统计,能够很好的反映数据延时间变化的规律,总结出网络设备负载、网络流量的时间分布;可以看到网络信息利用的人员分布,资源利用率高低分布;可以反映网络攻击的时间、来源分布,网络攻击目标的集中方向。根据这些统计信息,可以有效的整改网络,预防攻击;平衡网络流量,充分利用网络带宽;可以优化信息资源配置,多建设广泛应用的有效信息资源。

异常事件分析:异常事件应是log数据中的孤立点,可以很方便的监测出来,达到快速从大量正常记录中找出异常事件记录的目的。对多个异常事件点进行联合对比,可以总结规律,预测异常事件的发生。

4 结束语

本文分析了日志服务器的建设方法,安全防护手段,数据采集方法和日志数据的分析应用,旨在提醒网络管理人员对日志数据的重视,提供一种日志数据集中存储管理并加以利用的思路。

参考文献

[1]建立基于Windows平台的日志服务器.微电脑世界.2009.

[2]张英鹏.浅析网站服务器日志文件的保护.现代农业.2009.

[3]H3C交换机电子手册.2009.

[4]王小奎.防火墙日志系统的分析和研究.2009.

日志分析服务器 篇4

用来在日志文件里搜索特定活动事件的工具不下几十种,本文将介绍搜索日志文件时应该采取的策略,然后,通过几个具体示例介绍一些使用grep命令手动搜索日志文件的办法。接下来,我们将看到logwatch工具和logsurfer工具的用法。最后,将看到需要自行下载和安装的工具,如swatch等。 1、查找日志文件简单方法 一般来说,系统日志文件几乎都保存在/var/子目录(该路径由syslog.conf文件定义)。如果想让所有的应用程序都把日志文件集中存放到/var/子目录下,需要依次对每一个应用程序的配置文件进行编辑。把日志集中到/var/子目录下是个很好的主意。首先,当需要查看它们、修改它们的权限或者对它们进行备份的时候,只要到一个地方就可以找到所有的日志文件。 其次,/var/子目录通常是在一个独立于根目录(/)的文件系统里,这有助于防止日志文件迅速变大并占满可用空间,避免操作系统和应用程序受到影响。可以利用find命令把你不知道的日志文件查找出来具体做法是:先切换到根目录下,然后以根用户(root)身份执行下面这条命令把最近被修改过的文件全部找出来: find . -type f -mtime -5 Cprint | grep -v proc | grep -v lock 2、搜索日志文件时的策略 日志文件分析工作中的第一个挑战是把异常活动从正常活动中识别出来。完成这项挑战的前提是你必须知道系统和网络上的正常活动在日志文件里是什么样子。如果没有事先积累的经验,很难知道按规律发生的事件在日志文件里的表现。熟悉正常的日志文件活动要有一个时间过程,要求大家一上来就把日志文件看明白显然不现实,这是一个需要时间积累的过程。 要知道,随着网络上的应用程序和用户的数量不断增减和变化,日志文件的内容肯定会发生相应的改变。把异常情况孤立出来之后,接下来的步骤是正确地判断这种异常情况是否属于警报条件。要想正确地做出判断,只能通过加深对公司日常活动的了解才能做到。往往需要在系统的可用性与防范风险之间把握一种平衡。 3、以手动方式搜索日志文件 grep是Unix系统上功能最强大的shell命令之一。利用grep命令在日志文件里搜索各种可疑线索是这个文本文件搜索命令的绝佳用途。grep命令的用法很简单――在命令行上输入: grep failed /var/log/messages 上面这条grep命令将把/var/log/messages文件里包含单词“failed”的文本行全部找出来。在默认情况下,grep命令是大小写敏感的,你可能需要根据具体情况使用grep命令和它的“-i”选项来进行对大小写不敏感的搜索。搜索日志文件的挑战之一是你必须先知道自己想找什么东西,然后才可以把可能存在的这个东西找出来。有几种办法可以帮助解决这一问题。 如果你知道自己想找的事件或活动――比如,用户试图使用su命令切换为根用户――可以先自己进行一次这样的活动,然后去日志文件里看看它是什么样子。比如,在SUSE Linux系统上,执行失败的su命令将在日志文件里留下这样一条记录: Apr 1 11:15:54 chim su: FAILED SU (to root) rreck on /dev/pts/1 于是,如果想把所有这类活动都查出来,应该使用下面这样的命令: grep FAILED SU /var/log/messages 上面示例里的活动是 攻击的一种标志。如果grep命令只在日志文件里零零散散地找到了几个这样的失败事件,那很可能是有人忘记了口令字或者是打字时出现了错误。反之,如果grep命令在日志文件里找到几十个这样的失败事件,很可能是有人在试图闯入你的系统,应该立刻采取措施在网络级拒绝他们的访问。 4、使用logsurfer工具搜索日志文件 logsurfer是一个日志文件搜索工具。与swatch等日志搜索工具相比,logsurfer允许人们做出更细致的决定。与其他日志搜索程序相似,logsurfer工具也是把日志文件里的每一行与一些规则表达式进行匹配,每找到一个匹配就相应地执行某个动作,而那些动作被表达为“规则”。logsurfer工具在某些方面比swatch工具做得还要好。 首先,logsurfer工具使用两组规则表达式匹配文本行;日志文件中的文本行必须匹配第一组表达式,但不需要匹配可选的第二组表达式。这种安排在某些场合非常有用,它可以让人们方便地排除异常情况。logsurfer工具的另外一个突出优点是它可以结合上下文进行检查而不是只检查单个的文本行。这很方便,因为日志文件里的单独一行文本往往不足以包含做出某个决定所需要的信息。 要说不足,不少人认为logsurfer工具比较难以配置,因为对它进行配置必须精通规则表达式,而且它本身提供的配置示例不够多。如果想了解更多关于logsurfer工具的信息,它的man文档是最好的地方。列在表1里的细节都可以在这个工具的man文档里查到。logsurfer配置文件里的每 一行可以是以下三种情况之一:如果第一个字符是“#”,它是一个注释行;如果第一个字符是空格,它是上一行的继续;如果第一个字符既不是“#”也不是空格,它是一条新规则的开始。每条新规则由六个必要字段(第1、2、3、4、5、7字段)和一个可选字段(第6字段)组成,对这七个字段的详细解释见表1。1 必要 match_regex “字段1”被解释为一个规则表达式。如果文本行匹配“字段1”(match_regex),按后续各项定义依次处理;如果不匹配,logsurfer将用下一条规则匹配这个文本行,本规则后续各项定义不起作用 2 必要或- not_match_regex 这个字段将被解释为一个规则表达式。用“字段1”(match_regex)匹配到的文本行只有在不匹配“字段2”(not_match_regex)的情况下才继续按后续各项定义依次处理 3 必要或- stop_regex 如果不是减号(-)字符,本字段将被解释为一个规则表达式。如果这个表达式得到匹配,本规则将从活跃规则表里被删除 4 必要或- not_stop_regex 如果不是减号(-)字符,本字段将被解释为一个规则表达式。只有在“字段3”(stop_regex)存在且已得到匹配和“字段4”(not_stop_regex)不匹配的情况下才删除这个规则 5 必要或0 timeout 以秒计算logsurfer规则的寿命,把“字段5”设置为0表示规则永远有效 6 可选 Continue 如果这个字段被设置为“continue”,logsurfer将继续使用下一条规则来匹配文本行;如果没有“continue”,后续的规则将全部被跳过 7 必要 Action 以下几种动作之一:ignore、exec、pipe、open、delete、report、rule 表2 logsurfer动作解释 动作名称 解释 Ignore 什么都不做,忽略被匹配到的文本行。有时候,虽然用logsurfer工具找到了一些日志文本行,但如果知道它们并不重要,可以用这个动作不让logsurfer发出警报 exec 这个动作的参数被解释为一个程序,规则得到匹配时logsurfer将调用该程序 pipe 类似于exec动作,但被调用的程序将从stdin设备读入一个日志文本行 open 增加(打开)一个新的上下文,但在匹配match_regex(“字段1”)时已经存在的上下文就不必再次打开了 Delete 如果一个现已存在的match_regex被用做这个动作的参数,指定的上下文将被关闭并删除,而且不采取“default_action”选项定义的默认动作 report 这个动作的第1个参数是一个将被调用执行的程序(及其命令行选项)。随后的参数是一些将被用做该程序的标准输入的上下文定义 Rule 这个动作将创建一条新规则。关键字“rule”的后面必须有一个告诉logsurfer按什么顺序使用新规则的指示符:before(在本规则之前使用)、behind(在本规则之后使用)、top(在本配置文件所有规则之前使用)、bottom(在本配置文件所有规则之后使用) 5、使用swatch工具搜索日志文件 swatch工具不是Red Hat Enterprise Linux发行版本的标准组成部分,但因为swatch工具很容易安装、配置和使用,所以你应该考虑下载并安装它,

在开始使用它之前,还需要一个配置文件。在默认情况下,swatch工具将在启动它的那个用户的登录子目录里寻找.swatchrc文件(例如/home/rreck/.swatchrc),但你可以用“-f”选项为它另外指定一个配置文件,如下所示: swatch Cf /etc/.swatchrc 接下来,看看如何使用swatch工具从日志文件里发现 活动的踪迹以及发现之后该做些什么。 ◆修改swatch配置以监测针对Apache的攻击 下面这个例子里的攻击手段是一种真实存在的攻击手段,我们来看看它会在日志文件里留下怎样的踪迹以及在发现这些踪迹后如何修改系统配置加以防御。在过去,因为mod_userdir模块(一个默认的Apache模块)的缺陷和它的默认配置,Apache的HTTP服务器经常受到攻击,攻击者可以用一种能扫描远程主机的程序获得远程主机上的某些用户账户信息。 该工具先检查是不是Apache,再检查它是不是有安防漏洞的那个版本,如果是,它将自动地使用很多常见的用户账户去试探目标系统。这种扫描非常快,根据网络连接和服务器的速度,扫描一个账户有时候不用一秒钟。扫描出来的用户信息将被 用来攻击FTP等其他系统服务,因为 已经确切地知道那些用户账户是存在的。这种攻击将在Apache的access_log日志里留下大量的事件记录。如果 试测的用户账户不存在,会在日志里留下404出错信息。 如果 试测的用户账户存在但不允许访问,会在日志里留下403出错信息。除了进入日志文件,这些出错信息还将返回到攻击者那里,这正是攻击者希望的。攻击者只对403出错信息感兴趣――导致403出错信息的账户在目标系统上是存在的, 可以针对这些账户发动下一步攻击。把下面几行代码添加到用swatch工具检查Apache日志文件时使用的.swatchrc文件里,就可以通过电子邮件知道哪些账户最有可能成为上述攻击手段的受害者: #Apache403errors watchfor/403/ echo bell mail 偶尔出现一条403出错信息没有关系,但如果在几秒之内连续出现许多403出错信息,就应该知道必须采取行动了。因为403出错不是一种经常发生的事情,定期进行搜索就可以。比如,如果打算安排swatch工具在每晚0点5分对Apache日志文件进行一次检查,可以在根用户的crontab文件里增加一项如下所示的计划任务: 5 0 * * * --config-file=swatchrc.apache swatch --examine-file=/var/log/httpd/access_log 最保险的做法是把swatch运行为一个守护进程或让它运行在“tail”模式下,这可以让你在事情发生的时候立刻收到swatch发来的警报。可以用下面这条命令达到这个目的: swatch --config-file=swatchrc.apache --tail-file=/var/log/httpd/access_log 一旦确认攻击正在发生,应该立刻采取补救措施:在Apache的配置文件/etc/httpd/httpd.conf文件里增加和修改几条配置指令,然后用命令重新启动Apache守护进程。修改Apache配置文件的具体办法有两种。第一种办法是先全局禁用UserDir指令,再把需要激活的用户账户激活,如下所示: UserDir disabled UserDirenabled user1 user2 user3 第二种是先全局激活UserDir指令,再把不想让外界知道的用户账户禁用掉,如下所示: UserDir enabled UserDir disabled user4 user5 user6 ◆修改swatch配置以监测针对SSH守护进程的攻击 通过扫描日志文件及时掌握系统安全状况有重要意义。日志的作用只有通过人们对日志信息的运用才能真正体现出来。在设法弄到系统上的一个用户名后, 就可以发动“暴力”攻击了,这是一种通过SSH服务试测几千个口令字以期获得远程系统shell访问权限的攻击手段。这种暴力攻击会在系统(Red Hat)的日志里留下记录类似下面这样: Jun 6 13:01:56 chim sshd(pam_unix)[17331]: authentication failure; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=192.168.1.199 user=rreck Jun 6 13:02:01 chim sshd[17331]: Failed password for rreck from 192.168.1.199 port 33181 ssh2 Jun 6 13:02:03 chim sshd[17331]: Failed password for rreck from 192.168.1.199 port 33181 ssh2 Jun 6 13:02:03 chim sshd(pam_unix)[17331]: 2 more authentication failures; logname= uid=0 euid=0 tty=NODEVssh ruser= rhost=192.168.1.199 user=rreck 让自己尽早获知这些事情正在发生是防范这类攻击最有效的策略。为了做到这一点,需要把一段下面这样的swatch配置代码添加到系统的swatchrc文件里: # Failed password watchfor / Failed password for / echo bell mail 此后,当swatch以cron计划任务或以“tail”模式运行时,如果在日志文件里发现这种攻击的特征,就会立刻通过电子邮件向你发出警报。这种电子邮件警报是有行动信号。根据你的具体情况,你或许需要允许rreck用户从多个主机登录。编辑/etc/ssh/sshd_config文件,下面给出的配置代码将明确地拒绝rreck用户从已发生多次试测口令字失败活动的主机进行登录,但同时允许rreck从其他主机登录: # Prevent access for hacker even if they guess the password ! DenyUsers rreck@192.168.1.99 AllowUsers rreck@* 接下来,向sshd发出一个SIGHUP信号或者用下面这条命令重新启动它: /etc/rc.d/sshd restart 当你在/var/log/messages文件里看到sshd发来的如下消息时,就可以知道你做的修改已经生效,攻击者的登录企图已经被sshd拒绝了: Apr 1 17:42:55 linux sshd[5864]: User rreck not allowed because listed in DenyUsers 这条日志消息表示,即使猜到了正确的口令字,rreck用户也不能登录。从 那边看,没有任何东西可以让他知道你已经改变了配置,他们怎么努力也不可能得逞。 总结:笔者想通过这个例子告诉大家,信息安全工作没有尽头;它需要长期持久的努力。降低或者消除风险的最佳办法是保持勤奋和警惕。一定要密切留意日志,一定要不断总结系统上各种正常活动的规律。必须时刻保持警惕并认真解读日志消息的含义,只有常备不懈,才能保证安全。对日志进行监控可以帮助你及时发现问题并指导你对有关配置做出针对性的修改。 说到最后,最好的安全防御措施就是采取行动。在事情发生之前把一切可以采取的措施都考虑周全会对今后产生极大的帮助,这将保证你在采取行动前不会浪费任何时间。提前做好安排还有助于避免在事情发生时的情绪化因素干扰你的判断和思考,保证你对事件做出的反应是在力所能及的范围内最合理有效的。 『关闭该页』 『打印该页』

日志分析服务器 篇5

集中式日志服务器在对黑客入侵进行记录、跟踪和追溯, 对各种操作系统和网络设备的帐号进行审计 (1) ;留存系统运行状况和设备故障信息等方面都发挥非常重要的作用 (2) 。如果不能解决采集各种操作系统和网络设备日志客户端的配置方法问题, 就不能系统而全面地保留各种操作系统和网络设备产生的日志, 同时如何在基本不对系统运行造成影响的情况下, 能对操作系统的帐号操作行为进行记录也没有现成的解决方案。

2 日志服务器架构设置

日志服务器中采用syslog-ng作为日志接收和记录的工具便于进行各种设备操作系统日志的分拣和管理。而在日志系统客户端, 对使用syslog-ng作为日志工具的系统, 每个系统分配不同的udp端口;对只使用udp 514端口的设备, 不分配专用端口。这样, 服务器生成按照设备文件-->年文件夹-->月文件夹-->auth.log、user.log和cron.log等日志文件。

3 日志服务器的配置

文章在suse10操作系统日志服务器端配置如下:

(1) 在syslog.conf中添加:

SYSLOGD_PARAMS="-r-s 0"

(2) 在/etc/syslog-ng/syslog-ng.conf中加入

options{sync (0) ;time_reopen (10) ;log_fifo_size (1000) ;long_hostnames (off) ;

use_fqdn (yes) ;chain_hostnames (off) ;keep_hostname (yes) ;

stats (43200) ;create_dirs (yes) ;};

(3) 对客户端使用syslog-ng日志工具的系统, 根据端口号进行相关配置;如配置一个属主帐号test, 用户组loggroup, 系统日志文件夹名称为loggercaiji1, 使用udp6514端口号接受日志信息的配置方式如下:

该配置会在home目录的test目录中产生2中所述的日志文件样式。

(4) 对客户端只能使用udp514端口的系统, 统一采用一个文件夹存放采集到的日志。配置方式如下:

source s_514{udp (ip ("0.0.0.0") port (514) ) ;}; (destination的配置与3.3相似。)

4 客户端设备配置

4.1 AIX系统日志客户端配置方法

(1) 在/etc/profile配置如下数据

(2) 编写用户操作命令传送shell脚本其相关脚本的流程图如图1:

(3) 发送到日志服务器的历史命令格式如下:

登录帐号执行命令时的帐号命令编号执行时间操作命令;如:

test root 511 2011/07/21 16:14:14::ls

(4) 修改配置文件syslog.conf, 在其上加上如下配置语句:auth.info@日志服务器ip地址

*.emerg;*.alert;*.crit;*warning;*.notice;*.err;*.debug@日志服务器ip地址

4.2 solaris操作系统客户端配置

(1) 在/etc/syslog.conf配置:

auth.info@服务器ip地址 (用tabs键形成空格)

*.err;kern.notice;auth.notice;daemon.notice;*.emerg@日志服务器ip地址

(2) 重启syslog服务:

svcadm restart system/system-log

4.3 linux操作系统日志客户端配置方法

在/etc/syslog.conf配置:

authpriv.info@日志服务器ip地址

daemon.info@日志服务器ip地址

*.emerg;*.alert;*.crit@日志服务器ip地址

4.4 在客户端使用syslog-ng日志工具 (包括F5负载均衡器) 日志客户端配置方法

(1) 修改配置文件, 在/etc/syslog-ng/syslog-ng.conf在最后面增加:

destination d_loghost{udp ("日志IP"port (端口号) ) ;};

log{source (src) ;destination (d_loghost) ;}; (使用设备上的日志数据源)

(2) 重启日志服务

4.5 linux操作系统 (包括F5) , 用户操作命令发送到日志服务器shell脚本命令和方法 (3)

(1) 在/etc/profile下的配置如下shell命令

export USER_IP=`who-u am i 2>/dev/null|awk'{print$NF}'|sed-e's/[ () ]//g'`

export Date Time=`date+%Y-%m-%d-%H:%M:%S`

export USER=`who-u am i 2>/dev/null|awk'{print$1}'`

export HISTTIMEFORMAT="%F-%T${USER_IP}${USER}${LOGNAME}${tty}"

export HISTSIZE=100

(2) 在/etc/bash.bashrc下加入如下脚本命令:

command_history () {export infohis=`history 1`

logger"$infohis"}

export PROMPT_COMMAND=command_history

发送到日志服务器的历史命令格式如下:

命令编号执行时间登录ip登录帐号执行命令时的帐号登录端口号操作命令;如:

101 2011-07-22-11:05:47 172.31.32.169 test root/dev/pts/4 ls

4.6 winodws日志客户端配置 (4)

在C:windowssystem32目录下拷贝入日志转换作用的软件evtsys.dll和evtsys.exe。然后在DOS环境下运行:C:>evtsysi h日志服务器ip p端口号并启动服务:C:>net start evtsys;日志服务器会在daemon.log文件中留存在“本地策略”配置的各种日志信息。

4.7 华为交换机配置样例

info-center loghost日志服务器ip地址

info-center timestamp loghost no-year-date

4.8 cisco交换机配置样例

service timestamps log datetime localtime

logging on (或enable)

logging facility local7

logging日志服务器ip地址

5 结语

文章实现的集中式日志服务器及各种日志客户端配置方法在及时发现黑客入侵、分析系统运行状况和进行帐号各种行为的记录及审计等方面有非常重要的作用。编写shell脚本能记录类linux和aix各帐号在设备上的操作命令;该日志服务器和客户端配置方法已成功应用, 对IT系统日志数据的留存、查看、审计、分析和管理, 提供了一个良好的平台。

参考文献

[1]王春璞, 卢宁.搭建集中管理日志服务器技术及应用[J].科技风, 2011 (21) :130-131.

[2]陈庭平, 沈丽娟, 曾鹏.日志服务器的建设和应用[J].网络安全技术与应用2010/09:67-68.

[3]杨宁.LINUX用户登录后精确命令记录:中国[OL]2009-06-09http://blog.csdn.net/cnbird2008/article/details/4253473.

日志分析服务器 篇6

IEC 61850 标准是智能变电站网络通信的基础,已在国内变电站中获得广泛应用。由于IEC 61850 本身不能够制造报文,因此站控层采用了MMS( Manufacturing Message Specification) 即制造报文规范[1],将通信采用抽象通信服务接口ACSI ( Abstract Communication Service Interface ) 映射到MMS的方式实现[2]。MMS客户端调试工具是基于站控层的调试工具,通过建立客户端与装置之间的通信连接[3],获取装置中的ICD模型信息,实现数据集查看、遥控、定值修改、录波下载、报告查看等功能。

日志服务是IEC 61850 服务中的重要内容[4],装置中的一般内部事件都以日志记录的方式存储,与报告相比,日志数据的记录与存储是相互独立的,不依赖于外部客户端的连接和检索[5],在装置断电等突发情况下仍然能够保持原来记录,对装置的历史故障追忆与定位有着指导意义。本文在分析日志相关标准及关键技术的基础上,采用客户端/服务器模式,从日志解析、日志查询、日志处理应用等方面阐述了客户端日志服务的实现,并对其进一步封装处理,在提高日志检索效率的同时实现了日志的离线脱机查询功能。

1 客户端日志服务的实现

客户端主要实现日志的解析、查询等功能,包括以下三个模块: 日志状态管理、日志解析、日志查询。日志查询模块主要实现获取符合条件的日志信息并保持到本地内存中,因此需要调用日志解析模块对日志进行解析; 同时日志状态信息的修改影响日志的检索结果。

1. 1 日志模型

日志模型包括日志数据集及日志控制块两部分[6],其中两者以相对应的方式进行配置,即一个数据集对应一个控制块。本文日志控制块LCB采用以lcb为前缀,以逻辑设备名为尾缀作为控制块名称,日志控制块配置及属性如图1 所示。

1. 2 日志数据结构设计

日志属性包括Log Name( 日志名称) 、LogRef( 日志路径名) 、Old Entr Tm( 旧入口时间) 、New Entr Tm( 新入口时间) 、Old Entr ( 旧日志条目ID) 、New Entr( 新日志条目ID)[7]。因此客户端将日志定义为以下数据结构,以方便对日志的操作。

日志参数数据结构如下所示。

1. 3 日志状态管理模块

日志状态管理模块主要是获取日志状态值,同时可以修改相关状态值并下装到装置中,实现对日志的修改。根据日志属性及配置信息,客户端通过调用函数read_logstate( void) 获取日志状态并显示。

首先,在建立客户端与装置的通信连接后,从获取到的装置模型信息中得到日志数据结构LOG_INFO,根据选择需要查看的日志块名称检索日志数据结构获得Log Name、LogRef、Log Dat Set属性值及其余状态信息的名称lnRef,根据各名称lnRef调用ACSI函数Acsi_Get Data Value( int ld,char * sz DataRef,Acsi Variant* var) 获取对应的值,从而得到所有的日志状态信息,如图2所示。

用户可以根据需要,通过调用ACSI函数Acsi_Set Data Value( int ld,char * sz DataRef,Acsi Variant * var) 修改日志触发选项与完整性周期,同时下装到装置中,实现对日志状态信息的修改。

1. 4 日志解析模块

日志解析模块主要实现对日志信息的解析并将其显示到客户端界面中。模块首先将返回的日志信息保存到本地内存数据结构Acsi Entry中,如下所示。

其中id为日志唯一标识号,time为日志记录时间,ref为日志名称,日志内的数据val以树MTree数据结构形式存储,结构不直观,无法直接得到日志的具体数据,因此需要进行解析处理。

日志解析模块将每一条日志内容val转换为树CMTree结构,CMTree是对MTree的进一步封装。采用深度遍历的方式遍历树中的所有数据,并根据其结构组成判定各数据的含义,同时将叶子数值保存到相应的日志结构中( 如上1. 2 所示) ,如日志名称、描述、记录时间、ID、品质等。

1. 5 日志查询模块

日志查询模块主要实现根据查询条件检索符合条件的日志数据,日志查询具有两种方式: 按时间方式查询、按条目方式查询,两种查询方式的区别在于输入条件的不同,前者查询条件为日志的起始时间、终止时间,后者为日志的起始时间、起始条目号。

首先,在客户端界面根据查询方式获取查询条件,调用客户端查询日志函数asklog( void) 获取日志信息,并根据参数采用消息响应的方式,调用ACSI中相应函数,若为按时间方式查询调用Acsi _ Query Log By Time ( int ld,char * sz LogRef,Time Stamp *start,Time Stamp * stop) ,否则调用Acsi _ Query Log After ( int ld,char * sz LogRef,Time Stamp * sa _ time,Entry Id * entry _ id) ,ACSI通过底层与MMS的映射关系,产生查询日志发送报文。按时间方式查询发送报文部分内容如下所示。

当服务器端收到发送报文消息后,根据报文中的日志检索条件调用服务器端的日志检索模块对日志进行查询,并将符合条件的日志信息按照报文格式打包并发送响应消息,同时,客户端自动调用日志消息响应函数On Log( BOOL b Morefollow,Acsi Entry ** entry,int i Entry Num) ,将ACSI中的日志内容entry、是否有后续日志信息标识变量b Morefollow及日志条目传送给日志解析模块进行解析处理,并将解析数据保存到本地日志数据结构中。按时间查询日志响应报文部分内容如下所示。

2 客户端日志服务的应用

在客户端实现日志服务的基础上,本文对日志信息进行了进一步的处理,实现日志服务的高级应用。按照实现功能,将其分为客户端日志本地存储与客户端日志应用处理两个模块。

2. 1 客户端日志本地存储

为了提高日志的检索效率,实现日志的脱机离线查询功能,本文采用将日志以文件的方式存储到客户端本地内存中,避免每次查询都要建立与服务器端的连接与查询请求,以及重复性的报文解析工作。

IEC 61850 报告与日志处理方式不同,IEC 61850 报告采用主动上送方式,即当有触发事件产生报文时,服务器端会主动将其上送至客户端进行处理。而日志是不主动上送的,当有触发事件产生时,服务器端将日志信息进行记录存储,只有当客户端主动查询才能得到历史记录。因此由于日志上送方式的特殊性导致了日志本地存储的困难。

通过对日志服务实现方式的分析,本文采用主动查询的方式获取日志记录。客户端日志本地存储分为两个子模块: 日志控制模块、日志文件存储模块。

日志控制模块实现了当日志为使能状态时,定时查询日志,将所有的日志历史记录保存到本地内存数据结构中。具体流程如图3 所示。

日志文件存储模块实现日志的离线保存功能。通过比较与分析,XML为轻量级的数据储存文件,存在互操作性强、可扩展性好等优点,同时XML的解析与查询效率高,因此本文采用XML文件存储的方式对日志历史记录进行存储。在建立客户端与装置连接的同时解析日志存储文件,并将日志信息保存到本地内存数据结构中,同时从服务器端获取日志起始条目号及结束条目号,判断日志数据结构中的条目号是否与服务器端相同,如不同,更新数据结构,同步本地日志与服务器端日志数据,如相同,启动日志控制模块对日志进行控制处理。当客户端与装置断链时,自动将本地内存的日志信息保存到日志文件中进行存储。

2. 2 客户端日志应用处理

客户端日志应用处理模块主要实现日志应用操作的一些辅助功能,如日志显示、日志关键字检索、日志导出、日志清除等。

客户端日志显示可分为通用显示与分组显示两种。通用显示将查询结果逐条直接显示到客户端界面中,分组显示则将日志查询结果按照分组的形式进行显示。为了实现报文结果显示清晰,103 规约提出了“分组显示”的概念,即将某些信息以组别的形式进行显示,以方便调试人员的查看与分析,而IEC 61850 报文采用逐条主动上送的方式,因此目前还没有分组显示的概念。本文在分析日志特点的基础上,结合客户端日志服务的实现,将分组的概念引用到日志显示上,提高日志历史记录显示的清晰性,方便调试人员的定位与调试。日志处理模块采用增加日志触发选项标志位,在解析日志报文的同时,跟据日志产生原因设置其标志位,在对日志查询时,通过对标志位的过滤处理实现日志查询结果的分组,从而实现日志分组显示的效果。

日志关键字检索是客户端日志应用的另一个重要功能,对具体错误信息的定位有着重要作用。通过设置检索关键字与显示条目N,客户端在已保存的日志记录中对所有的日志信息进行关键字完全匹配检索,当检索到匹配信息时对其进行标识,并将该条日志记录的前后N条记录进行保存,通过处理以通用显示的方式显示到日志界面中。日志关键字检索在工程应用中有着重要作用,特别是对于查询定位特定信息,如装置断链等,能够方便快速的调取相关日志记录,避免了逐条查看分析的过程,对于装置调试有着重要指导意义。

日志导出将查询获取到的日志信息按照文本的方式导出的外部文件中,以方便调试人员外部的使用。

日志清除将客户端界面日志显示信息进行清理,提高显示的清晰度。

3 结束语

日志服务是IEC 61850 中的一项重要通信服务,对装置的调试及电能质量后台数据持续性保证等方面都有指导意义。本文通过对日志模型及控制块的分析,在服务器端实现日志服务的基础上,在客户端实现日志的解析、查询、日志的本地存储及离线查询功能,同时,首次将关键字检索和103 规约中分组显示的概念引入到日志服务中,实现日志的精确查询和分组显示功能,对故障追溯与定位分析有着指导意义。现MMS客户端日志服务功能已在实际的工程中投入应用并取得了良好的效果。

参考文献

[1]董科,关彬,王巍.IEC61850与MMS的映射的研究[J].电力系统保护与控制,2010,38(10):92-95.

[2]中华人民共和国国家经济贸易委员会.IEC 61850,Communication networks and systems in substations-Part 8-1(First edition)[S].中华人民共和国,2004.

[3]任希广.基于IEC61850的MMS客户端软件设计[J].华北电力技术,2013,43(11):44-48.

[4]韩明峰,郑永志,唐永建,等.IEC 61850日志服务的实现策略[J].电力系统自动化,2007,31(18):54-56.

[5]中华人民共和国国家经济贸易委员会.IEC 61850,Communication networks and systems in substations-Part 6(First edition)[S].中华人民共和国,2004.

[6]韩法玲,黄润长,张华,等.基于IEC61850标准的IED建模分析[J].电力系统保护与控制,2010,36(10):87-90.

日志分析服务器 篇7

日志文件是Windows系统中一个比较特殊的文件, 它记录着Windows系统中所发生的一切, 如各种系统服务的启动、运行、关闭等信息。Windows日志包括应用程序、安全、系统等几个部分, 应用程序日志、安全日志和系统日志对应的文件名为AppEvent.evt、SecEvent.evt和SysEvent.evt。这些文件受到“Event Log (事件记录) ”服务的保护只能被清空, 但是不能删除某一条记录。

应用程序日志、安全日志、系统日志、DNS日志等默认存放位置:%systemroot%system32 config, 默认文件大小512KB。

安全日志:%systemroot%system32 config SecEvent.EVT

系统日志:%systemroot%system32 config SysEvent.EVT

应用程序日志:%systemroot%system32 config AppEvent.EVT

可以在注册表中修改这些LOG文件的默认存放位置:

HKEY LOCAL MACHINE System CurrentControlSet Services Eventlog

2 日志文件的数据结构

2.1 日志文件头结构分析

Windows MSDN中日志文件头的结构体数据类型如下:

为了更为直观地展现出日志文件头的储存结构我们用winhex打开一个日志记录为空的日志文件, 没有事件记录, 只有文件头和文件尾。如图1所示。

可以看到前三行共48个字节是文件头部分, 接下来的40个字节是文件尾部分, 之间没有事件记录。文件头部分其内容和日志文件头结构体相一致。在这里由于日志文件的内容是空的, 所以StartOffset (第一条 (最早) 日志记录的文件内偏移量) 和EndOffset (文件尾的文件内偏移量) 相同都是0x30。这是一个空日志文件, 由于没有事件记录所以OldestRecordNumber (第一条 (最早) 日志记录的记录号) 为00 00 00 00。

2.2 日志文件尾结构分析

Windows MSDN中日志文件尾的结构体数据类型如下:

在图1中所示的日志文件, 是把日志里的事件记录清空后得到的空日志文件, 所以文件尾中的OldestRecordNumber值是1而不是0, EndRecord值0x f4 71 05 00和CurrentRecordNumber值0x 74 06 00 00都是日志事件记录清空前的值, 系统并没有将其立即更新, 而是等到再写入新事件记录时再更新。如果清空日志之前再产生一条记录的话, 那么它的文件内偏移量将是0x f4 71 05 00记录号将是0x 74 06 00 00, 即第1652个记录 (0x674=1652) 。

2.3 日志事件记录结构分析

Windows MSDN中日志事件记录的结构体数据类型如下:

现在我们用winhex打开AppEvent.Evt文件, 以其中一个事件记录为例来分析事件记录的存储结构。

由文件头部分的内容可以看出这个日志文件有3条事件记录, 因为CurrentRecordNumber值为4 (0018H 0400 00 00) 。文件的总大小为 (0020H 00 00 01 00) 0x10000即64K, 第一条事件记录从0030H处开始, 大小为对212 (0xd4) 个字节, 我们就以这条记录为例来分析。

0030H D4 00 00 00 Length该记录的长度为212个字节

0034H 4C 66 4C 65 Reserved保留值

0038H 01 00 00 00 RecordNumber记录号, 当前是第1条记录

003CH D4 44 9D 4C TimeGenerated时间代码

0040H D5 44 9D 4C TimeWritten时间代码

0044H FB 43 00 40 EventID事件ID号为17403 (0x43fb)

0048H 04 00 01 00 EventType事件类型的代码有1表示错误, 2表示警告, 4表示信息, 8成功审核等, 这里的代码为4, 表示信息。高位字是消息量NumStrings

004CH 02 00 00 00 EventCategory事件类别为2, 高位字是ReservedFlags事件的保留标记

0050H 00 00 00 00 ClosingRecordNumber事件的结束记录数其值为0

0054H 7A 00 00 00 StringOffset事件消息的偏移量 (指本事件记录内的偏移量, 本记录开始于30H, 所以事件消息的文件内偏移量应为AA)

0058H 00 00 00 00 UserSidLength用户安全标识符的大小, 如果没有则为0

005CH 7A 00 00 00 UserSidOffset用户安全标识符的偏移量

0060H 46 00 00 00 DataLength对事件进行描述的数据长度

0064H 86 00 00 00 DataOffset对事件描述的数据偏移量

0068H—0087H的内容是信息来源, 每个字母占用两个字节空间

0088H—00A7H的内容是计算机名

00A8H—00B5H服务闲置时间45856秒

00B6H—00FBH事件的描述数据大小为0x46字节

00FCH 00 00 00 00描述数据结束

0100H D4 00 00 00事件记录的长度, 事件记录内容结束。

3 手工删除修改事件记录方法实现

对windowsXP日志的文件头, 文件尾和单条事件记录的结构和存储方式都已经了解透彻了, 根据日志文件的结构来删除记录。在事件服务 (EventLog) 已启动的情况下, 由于系统对日志文件进行了保护, 一般情况下是无法修改这些文件的, 我们先把日志文件备份出来对某些记录进行删除, 然后用修改后的日志文件覆盖原有的日志文件来达到日志内容修改的目的。了解了日志文件的结构及系统的检查验证机制后理论上是可以随便更改事件记录内容的, 但是由于涉及到很多的偏移量值, 有的东西修改起来比较麻烦。

4 结束语

本文详尽描述了Windows XP日志文件的结构, 日志查看器在打开日志文件时的文件完整性验证机制, 在掌握了日志文件结构及验证机制的基础上, 借助winhex对日志事件记录进行删除及修改的具体方法。该方法能够自由删除某一条或者几条系统日志记录, 而且不留下痕迹, 但是该方法仍然不能绕过系统对当前日志文件的保护。

参考文献

[1]吴昊, 鲁海军.Windows 2000下的系统日志修改[J].网络安全技术与应用, 2005 (10) .

[2]林辉, 窦旻.系统日志的安全保护[J].计算机工程, 2003 (17) .

英文航海日志语言特点分析 篇8

航海日志 (Logbook) , 顾名思义, 就是把船舶营运生产过程中的事情都记录下来的一本日志, 内容杂而多, 但是由于航海日志 (Logbook) 上提供给每个驾驶员用于记录内容的空间就几行字的高度, 所以船长及每个驾驶员都要充分了解英文航海日志 (Logbook) 的语言特点, 其特点如下:

1.书面化用语

英文航海日志是英文写作的一种形式, 因此在记录时应尽可能用书面语进行记载。有些词汇在日常生活口语中是可以的, 但是如果出现在英文航海日志里就显得不恰当。比如:“结束”一词在英文中有end, finish, over, complete等, 前三个都是口头语, 只有complete是书面语, 因此像“消防演习结束”这类短语只能用Firefighting drill completed来表示。

2.不产生歧义

航海日志是一本记录船舶营运过程中发生的事实的海事文书, 里面不允许有任何评论和推断性的语言出现。但英文航海日志记录过程中有时省略了很多句子成分, 而且大量使用缩略词和专用术语, 由于句子省略成分可能会造成句子本身产生歧义, 所以对于那些可能产生歧义的句子要完整记载, 避免产生歧义。比如:Cargo gear failure due to improper use.此句在航海日志中容易产生歧义, 因为由于使用不当导致装卸货设备故障有两种可能, 一种是由于船员使用装卸货设备不当导致其故障, 另外一种是由于码头工人使用装卸货设备不当导致其故障, 两种情况下责任划分结果明显不同, 如果是船员过失船方要负责, 如果是码头工人过失则码头装卸公司负责, 这两种情况都有可能出现, 容易产生误解, 因此在记载时要明确而具体。

3.语言简明

由于航海日志版面留给每个驾驶员填写的空间较小, 所以填写语言要简明, 但不能产生歧义, 语言准确, 据实填写。

比如:0938 Brought up, hoist anchor ball and G flag.意为:9点38分, 锚抓底牢固, 升起锚球和字母G旗。此句语言简明, 记述事实, 用词准确, 在航海业内, brought up意为锚抓底牢固。又如:R/up M/E.完整句子应该是:Ring up main engine.意为:主机定速。

4.时态简明

在日常生活英语中有很多时态, 时态不同表达的意思也有不同, 但是在英文航海日志里, 时态主要有两种, 即一般过去时态和一般现在时态, 一般过去时态表示过去发生的事情和过去正在进行的事情, 一般现在时态表示当时正在发生的事情, 不用现在进行时态。英文航海日志中之所以不出现进行时态, 原因就是航海日志记录的都是事实, 不存在任何评论和推断, 如果一件事情用进行时态记录, 那么事情进行结束时是什么状态, 我们无从得知, 所以英文航海日志很少用进行时态。

比如:1502 Crew mustered at poop deck, check each crew’s outfit and equipment, OK.此句意为:15点02分, 船员在尾楼甲板集合完毕, 检查船员的穿戴和设备, 合格。这里用一般过去时态陈述船员集合完毕, 用一般现在时表示当时正在检查船员装备, 但最后用OK来说明检查的结果是合格的。

5.大量采用省略结构

英文航海日志记录时经常省略一些句子结构, 并尽可能采用缩略词和专业词汇用以简明而准确的记录航海事件。

(1) 省略主语

在船上工作中, 每位船员都有自己的明确的岗位职责, 而且大多数船员需要值班, 也就是在规定的时间里工作, 且航海日志是由值班驾驶员在自己值班期间记录的, 而且驾驶员值班有固定的时间表, 所以大家对每个事件的执行人一目了然, 因此在记录英文航海日志时, 经常省略句子主语, 如果每句话都完整的加上句子主语, 反而显得冗余。

比如:1130 notify engine room standby main engine.此句意为:11点30分, 通知机舱备车。那么是谁通知机舱被车呢?11点30分是三副在驾驶台值班, 所以是三副通知机舱备车。又如:Stationed fore and aft for dry dock.完整句子应该是:Crew stationed fore and aft for dry dock.句意为:船员前后就位, 准备进坞。此句省略了主语crew, 但是不会引起歧义。

(2) 省略系动词

Provision truck coming, intake provision as per ordered.此句完整应该是Provision truck was coming, intake provision as per ordered.意为:补给 (食品) 车辆到达, 按照订单装载补给用品 (食品) 。又如:Round patrol, all normal.完整句子应该是:Round patrol, all are normal.意为:巡视全船, 一切正常。这里省略了系动词are, 但不会引起歧义。

(3) 大量采用缩略词和专用术语

航海是一个特别的专业, 从业人员人数少, 专业特色强, 里面有很多专用术语, 只有熟知航海专业的人才能理解, 这些专用术语在使用过程中经过长时间的积累慢慢形成了很多固定的缩略词, 比如:DOC (Document of Compliance符合证明) , SSP (Ship Security Plan船舶保安计划) , SSO (Ship Security Officer船舶保安员) , COW (Crude Oil Washing原油洗舱) 等, 在记录英文航海日志时, 为了省时、省空间经常使用缩略词和专用术语。

比如:N/F E/R to S/B M/E.此句完整句子应该是:Notify engine room to standby main engine.意为:通知机舱准备主机。又如:POB (Pilot on board, 引航员登船) , ALL FAST (All lines were made fast to the berth, 所有缆绳已经在泊位上挽牢) , 再比如:Single up F&A (单绑艏缆和艉缆) 因为在航海专业里single up意为“单绑”, single up在这里就是一个专用术语。

(4) 将长单词省略为极少数的字母组合

在英文航海日志记载时, 有时候会将一些字母比较多的英文单词省略为由两个或几个字母组成的字母组合, 中间加上分隔符。比如:Took tug T1 on port bow, T2 on starb’d q’ter.完整句子应该是:Took tug T1 on port bow, T2 on starboard quarter.意为:让T1拖轮在左舷船头操作, T2拖轮在右舷船尾操作。又如:Com’ced loading with ship’s crane.此处将commenced省略为com’ced, 意为:使用船上的克令吊开始装货。

英文航海日志的规范记载是保证船舶正常运营的一个重要方面, 也是广大船员英文写作能力的重要体现, 广大海员应参考英文航海日志语言特点尽可能规范记载英文航海日志, 提高自身英文写作水平, 成为一名合格的国际化海员。

参考文献

[1]沈江, 丁自华, 姜朝妍, 航海英语[M].大连海事大学出版社, 2012.

[2]王建平.航海英语写作[M].大连海事大学出版社, 1998.

基于查询日志的消费意图挖掘分析 篇9

关键词:消费意图识别,二元分类模型,SVM

引言

在网络上投放广告已经成为了一种十分普遍,十分重要,收益简单高效的广告投放方式。在我们点击网页的时候,不经意间就能看到各种各样的广告。随着在线广告的不断普及,越来越多的销售商希望通过在线广告来提升自己产品的知名度,提高自己产品的销量。这样一来,搜索引擎便成为了销售商进行产品推销的一个重要媒介。一些搜索引擎,如百度,搜狗等都会记录用户的访问信息,例如,百度的查询日志就由用户搜索语句、用户点击标题、用户点击URL三部分组成。其中,有些信息显示了用户意图是期望购买某类产品的内容。消费对象能更好地反映出用户的消费兴趣,真实的消费需求和消费类别。

1.构建消费意图二元分类系统

第一步需要准确确定有意图或者无意图一个标准,这样才能判断最终得到的系统给出的结果是不是正确的。首先,需要得到用户的真实查询语句,在大量的,真实的语料上进行分析。准确的判断出用户的一条查询究竟是有意图的还是无意图的。

在确定了标准之后,需要根据这些数据抽取特征。所谓特征,也就是一个规则,这个规则可以较为有效的分辨出用户的查询是有意图或者无意图。在多个特征的基础上,下一步就是确定如何利用这多个特征进行分类,因而就需要找到一个合适的分类模型,然后利用抽取出的多维特征,在数据上将每一条语句表示成一个由多个特征组成的向量,然后把这个向量交给分类器去处理。分类器则会计算每一个特征对这条语句是否是有意图查询的影响程度。进而计算出每一个特征影响的权重,当一个新的查询到来的时候,可以利用分类器训练出来的模型进行测试,进而得出结果,判断出该条查询是否具有消费意图。

Lib Svm是台湾大学林智仁(Lin Chih-Jen教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;该软件对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数可以解决很多问题;并提供了交互检验(Cross Validation)的功能。该软件可以解决C-SVM、ν-SVM、ε-SVR和ν-SVR等问题,包括基于一对一算法的多类模式识别问题。

SVM是最常用的二元分类器之一。支持向量机SVM作为一种可训练的机器学习方法,依靠小样本学习后的模型参数进行导航星提取,可以得到分布均匀且恒星数量大为减少的导航星表。

SVM分类器即可以解决线性分类问题,也可以解决非线性分类问题。在解决非线性分类问题上,SVM采用了核函数的方法,可以将低维空间的非线性问题映射为高维空间的线性问题,并且几乎不增加计算复杂度,在一定程度上避免了其他机器学习算法的“维度灾难”的问题。SVM分类器中常用的几种核函数包括:(1)线性核函数,如公式(1-1)所示;(2)多项式核函数,如公式(1-2)所示;(3)径向基函数,如公式(1-3)所示;(4)二层神经网络核函数,如公式(1-4)所示。

如果想对消费意图进行准确的分类,首先就要有一个高质量的初始语料库。本数据来源于百度2012年3月份的部分用户查询数据。数据由用户查询语句、用户点击标题、用户点击URL三部分组成。

用户查询语句:用户在搜索框中输入的内容

用户点击标题:用户点击的网页对应的title

用户点击URL:用户点击的网页对应的URL

由于人们对消费意图这一概念比较模糊,而且对于不同的人,会有不同的理解,所以在这里严格定义消费意图的概念如下:

(1)用户搜索语句或点击标题中有明确的购买意向,如“求推荐一部性价比高的手机”这条语料都很明确的具有消费意图,指出了消费对象,并出现了购买触发词,如“推荐”“求”等。

(2)明确的指出了购买意向,但没有触发词“水货智能机,1000元以内”这类数据虽然没有出现购买意愿词,但是仍然可以认为这些语料具有显式消费意图。

(3)用户点击网站的标题具有消费意图倾向“三星Galaxy S6报价_中关村在线”

这类数据可能用户只搜索了“三星Galaxy s6”,单单从这个搜索中,我们并不能确定该查询具有消费意图,但是从用户的点击上可知其应当具有消费倾向。

(4)用户点击的URL中包含电商网站

如用户搜索“手机”后,点击淘宝网,仅仅通过搜索词并不能看出用户具有消费意图,但是通过用户点击的URL:http://www.taobao.com/,可以判定用户的点击行为具有消费意图。

2.结语

一个消费意图二元分类系统,主要针对用户的搜索数据,对数据进行预处理,进而在数据上进行特征的分析和抽取,最终利用特征选择模块,获得了最优特征。

参考文献

[1]张鸿,庄越挺,吴飞.一种基于内容相关性的跨媒体检索方法.计算机学报.2010,31(5):820-826.

[2]H.K.Dai,L.Zhao,Z.Nie,J.-R.Wen,L.Wang,and Y.Li.Detecting online commercial intention(oci).In Proc.of WWW'06,pages 829-837,2006.

[3]赵妍妍,秦兵,刘挺.文本情感分析.软件学报.2010,21(8):1834-1848.

上一篇:财务报表的分析体系下一篇:智能化医保监管