精华内容
下载资源
问答
  • 日志分析

    千次阅读 2013-07-28 20:18:59
    日志分析方法概述 (2011-4-27 02:04:57) 标签: 数据挖掘 , 统计 分类:数据挖掘 日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核、各种应用服务器等等。日志的内容...


    日志分析方法概述    (2011-4-27 02:04:57)
    标签: 数据挖掘 , 统计    分类:数据挖掘

    日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核、各种应用服务器等等。日志的内容、规模和用途也各不相同,很难一概而论。

    本文讨论的日志处理方法中的日志,仅指Web日志。其实并没有精确的定义,可能包括但不限于各种前端Web服务器——apache、lighttpd、tomcat等产生的用户访问日志,以及各种Web应用程序自己输出的日志。

    在Web日志中,每条日志通常代表着用户的一次访问行为,例如下面就是一条典型的apache日志:

    211.87.152.44 – - [18/Mar/2005:12:21:42 +0800] “GET / HTTP/1.1″ 200 899 “http://www.baidu.com/” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon)”

    从上面这条日志中,我们可以得到很多有用的信息,例如访问者的IP、访问的时间、访问的目标网页、来源的地址以及访问者所使用的客户端的UserAgent信息等。如果需要更多的信息,则要用其它手段去获取:例如想得到用户屏幕的分辨率,一般需要使用js代码单独发送请求;而如果想得到诸如用户访问的具体新闻标题等信息,则可能需要Web应用程序在自己的代码里输出。

    为什么要分析日志

    毫无疑问,Web日志中包含了大量人们——主要是产品分析人员会感兴趣的信息,最简单的,我们可以从中获取网站每类页面的PV值(PageView,页面访问量)、独立IP数(即去重之后的IP数量)等;稍微复杂一些的,可以计算得出用户所检索的关键词排行榜、用户停留时间最高的页面等;更复杂的,构建广告点击模型、分析用户行为特征等等。

    既然这些数据是如此的有用,那么当然已经有无数现成的工具可以帮助我们来分析它们,例如awstats、Webalizer,都是专门用于统计分析Web服务器日志的免费程序。

    另外还有一类产品,它们不分析直接日志,而是通过让用户在页面中嵌入js代码的方式来直接进行数据统计,或者说我们可以认为它是直接让日志输出到了它们的服务器。典型的代表产品——大名鼎鼎的Google Analytics,另外还有国内的cnzz、百度统计等。

    很多人可能会说,既然如此,我们为什么还需要自己来分析日志,有必要吗?当然有。我们的用户(产品分析人员)需求是无穷尽的,上面说的这几类工具虽然很好很强大,但显然没办法满足全部的需求。

    无论是本地分析的工具,还是在线的分析服务,它们虽然提很丰富的的统计分析功能,可以做一定程度的配置,但是依然很有限的。要进行稍复杂点的分析,或者要做基于日志的数据挖掘,依然需要自己来完成。

    另外绝大多数日志分析工具都是只能用于单机的,数据量稍大就没辙了。同时那些提供在线分析的服务对于单个站点通常也都有最大流量的限制——这是很容易理解的,他们也需要考虑服务器的负载。

    所以,很多时候还是得靠自己。

    怎么进行日志分析

    这并不是一个简单的问题。即使我们把“日志”限定为Web日志,依然包含了成千上万种可能的格式和数据,而是“分析”更是难以定义,也许是简单的统计值的计算,也许是复杂的数据挖掘算法。

    下面并不打算讨论这些复杂的问题,而只是笼统的讨论如何构建进行日志分析工作的基础。有了这些基础会让基于日志的简单统计分析变得很简单,并让复杂的分析挖掘等变得可行。

    少量数据的情况

    先考虑最简单的情况,在数据规模比较小的时候,也许是几十MB、几百MB或者几十GB,总之就是在单机处理尚能忍受的时候。一切都很好办,现成的各种Unix/Linux工具——awk、grep、sort、join等都是日志分析的利器,如果仅仅是想知道某个页面的PV,一个wc+grep就能搞定。如果有稍复杂的逻辑,那就使用各种脚本语言,尤其是perl,配合伟大的正则表达式,基本就可以解决所有的问题。

    例如,我们想从上面提到的apache日志中得到访问量最高前100个IP,实现很简单:

    cat logfile | awk ‘{a[$1]++} END {for(b in a) print b”\t”a[b]}’|sort -k2 -r|head -n 100

    不过当我们需要频繁去分析日志的时候,上面的做法在一段时间之后可能就会让我们头疼如何进行各种日志文件、用于分析的脚本文件、crontab文件等等的维护,并且可能会存在大量重复的代码来做数据格式的解析和清洗,这个时候也许就需要更合适的东西,比如——数据库。

    当然,要使用数据库来进行日志分析还是需要一些代价的,最主要的就是如何将各种异构的日志文件导入的数据库中——这个过程通常称为ETL(Extraction-Transformation-Loading)。幸好依然有各种现成的开源、免费的工具来帮助我们做这件事情,并且在日志种类不太多的时候,自己写几个简单的脚本来完成这项工作也并不困难。例如可以将上面的日志去掉不必要的字段,然后导入如下的数据库中:

    现在需要考虑一下用什么数据库来存储这些数据。MySQL是一个很经典的开源数据库,它的传统引擎(MyISAM或者InnoDB,行存储)也许并不非常的适合日志数据的存储,但是在小数据量的时候还是很够用的。而且,在这方面现在已经有了更好的选择,例如开源且免费的Infobright、Infinidb,都是专门为数据仓库应用而进行了优化的数据引擎,采用列存储,有良好的数据压缩,处理几百GB的数据基本上不是问题。

    使用数据库的好处之一就是,伟大的SQL可以帮我们很简单的完成绝大部分的统计分析工作——PV只需要SELECT+COUNT,计算搜索词排行只需要SELECT+COUNT+GROUP+ORDER+LIMIT。此外,数据库本身的结构化存储模式也让日志数据的管理变的更简单,减少运维代价。

    同样还是上面的那个例子,简单的一个SQL就可以搞定:

    SELECT * FROM (SELECT ip, COUNT(*) AS ip_count FROM apache_log GROUP BY ip) a ORDER BY ip_count DESC LIMIT 100

    至于性能问题,数据库的索引和各种优化机制通常会让我们的统计分析工作变得更快,并且上面提到的Infobright和Infinidb都专门为类似SUM、COUNt之类的聚集应用做了优化。当然也不是绝对的会快,例如在数据库中进行LIKE操作,通常会比grep一个文件还要慢很多。

    更进一步的,使用基于数据库的存储,可以很容易的进行OLAP(联机分析处理)应用,从日志中挖掘价值会变的更加简单。

    更多的数据怎么办

    一个好的数据库似乎会让事情变的很简单,但是别忘了前面提到的都是单机数据库。一台单机在存储容量、并发性上毫无疑问都是有很大限制的。而日志数据的特点之一就是随时间持续增长,并且由于很多分析过程往往需要历史数据。短时间内的增长也许可以通过分库、分表或者数据压缩等来解决,不过很显然并不是长久之计。

    想要彻底解决数据规模增长带来的问题,很自然的会想到使用分布式技术,结合上面的结论,也许使用某个分布式数据库是一个好选择,那么对最终用户就可以完全透明了。这个的确是很理想的情况,不过现实往往是残酷的。

    首先,实现比较完美的分布式数据库(受限于CAP原则)是一个非常复杂的问题,因此在这里并不像单机数据库那样,有那么多开源的好东西可以用,甚至于商用的也并不是太多。当然,也并非绝对,如果有钱,还是可以考虑一下Oracle RAC、Greenplum之类东西。

    其次,绝大多数分布式数据库都是NoSQL的,所以想继续用上SQL的那些优点基本上是没指望,取而代之的都是一些简单、难以使用的接口。单从这点看来,使用这些数据库的价值已经降低很多了。

    所以,还是先现实一点,先退一步考虑如何解决的超大规模的日志的分析问题,而不是想如何让它变的像在小数据规模时那样简单。单单想做到这点,目前看来并不是太难,并且依然有免费的午餐可以吃。

    Hadoop是伟大的Apache基金会下面的一套分布式系统,包括分布式文件系统(HDFS)、MapReduce计算框架、HBase等很多组件——这些基本都是Google的GFS/MapReduce/BigTable的克隆产品。

    Hadoop经过数年的发展,目前已经很成熟了,尤其是其中的HDFS和MapReduce计算框架组件。数百台机器的集群已经被证明可以使用,可以承担PB级别的数据。

    Hadoop项目中的HBase是一个按列存储的NoSQL分布式数据库,它提供的功能和接口都非常简单,只能进行简单的K-V查询,因此并不直接适用于大多数日志分析应用。所以一般使用Hadoop来做日志分析,首先还是需要将日志存储在HDFS中,然后再使用它提供的MapReduce API编写日志分析程序。

    MapReduce是一种分布式编程模型,并不难学习,但是很显然使用它来处理日志的代价依然远大于单机脚本或者SQL。一个简单的词频统计计算可能都需要上百代码——SQL只需要一行,另外还有复杂的环境准备和启动脚本。

    例如同样还是上面的例子,实现就要复杂的多,通常需要两轮MapReduce来完成。首先要在第一轮的mapper中计算部分ip的访问次数之和,并以ip为key输出:

    //遍历输入,并聚合结果

    foreach(record in input) {

    ip = record.ip;

    dict[ip]++;

    }

    //用emit输出,第一个参数为key,用于reduce的分发

    foreach(<ip, count> in dict) {

    emit(ip, count);

    }

    然后在第一轮的reduce中就可以得到每个ip完整的计数,可以顺便排个序,并且只保留前100个。

    count = 0;

    //对于每个key(ip),遍历所有的values(count),并累加

    while(input.values.hasNext()) {

    count += input.values.next();

    }

    //插入到大小为100的堆中

    heap_insert(input.key, count);

    在reduce结束的时候输出:

    //输出当前reduce中count最高的100个ip

    foreach(<ip, count> in dict) {

    emit(ip, count);

    }

    由于reduce一般会有很多个,所以最后还需要将所有reduce的输出进行合并、再排序,并得到最终的前100个IP以及对应的访问量。

    所以,使用Hadoop来做日志分析很显然不是一件简单事情,它带来了很多的额外的学习和运维成本,但是至少,它让超大规模的日志分析变成了可能。

    怎样变得更简单

    在超大规模的数据上做任何事情都不是一件容易的事情,包括日志分析,但也并不是说分布式的日志分析就一定要去写MapReduce代码,总是可以去做进一步的抽象,在特定的应用下让事情变得更简单。

    也许有人会很自然的想到如果能用SQL来操作Hadoop上的数据该有多好。事实上,不仅仅只有你一个人会这么想,很多人都这么想,并且他们实现了这个想法,于是就有了Hive。

    Hive现在也是Hadoop项目下面的一个子项目,它可以让我们用SQL的接口来执行MapReduce,甚至提供了JDBC和ODBC的接口。有了这个之后,Hadoop基本上被包装成一个数据库。当然实际上Hive的SQL最终还是被翻译成了MapReduce代码来执行,因此即使最简单的SQL可能也要执行好几十秒。幸好在通常的离线日志分析中,这个时间还是可以接受的。更重要的是,对于上面提到的例子,我们又可以用一样的SQL来完成分析任务了。

    当然Hive并不是完全的兼容SQL语法,而且也不能做到完全的对用户屏蔽细节。很多时候为了执行性能的优化,依然需要用户去了解一些MapReduce的基本知识,根据自己的应用模式来设置一些参数,否则我们可能会发现一个查询执行很慢,或者压根执行不出来。

    另外,很显然Hive也并不能覆盖所有的需求,所以它依然保留插入原始MapReduce代码的接口,以便扩展。

    更多的问题

    即使有了Hive这样一个类似于数据库的东西,我们依然还有很多事情需要做。例如时间久了,可能会有越来越多的需要例行执行的SQL,而这些SQL中,也许有一些是做了重复的事情;也许有一些的执行效率非常低下,一个复杂的SQL就占满了所有的计算资源。这样的系统会变得越来越难以维护的,直到有一天例行的SQL终于跑不完了。而最终用户往往不会去关心这些事情,他们只关心自己提交的查询是不是能即时得到响应,怎么样才能尽快的拿到结果。

    举个简单的例子,如果发现在使用apache_log的所有查询中,几乎没有人用其中的user_agent字段,那么我们完全可以把这个字段去除掉,或者拆分成两张表,以减少多数查询的IO时间,提高执行的效率。

    为了系统化的解决这些问题,我们可能需要引入例行任务的调度机制,可能需要去分析所有的SQL来发现哪些是可以合并的、哪些的性能需要优化,使用的数据表是不是需要做水平或者垂直分表等等。根据实际情况的不同,这时事情可能是人工来完成,也可能是写程序来自动分析并调整。

    再者随着日志类型、分析需求的不断增长。用户会越来越多的抱怨很难找到想要的数据在哪份日志里,或者跑的好好的查询因为日志格式的变化而突然不能用了。另外上面提到的ETL过程也会变得复杂,简单的转换导入脚本很可能已经解决不了问题。这时候可能需要构建一个数据管理系统,或者干脆考虑建立一个所谓的数据仓库。

    总之,随着日志数据量、日志类型、用户数量、分析需求等等的不断增长,越来越多的问题会逐渐浮现出来,日志分析这件事情可能就不再像我们最初想的那么简单,会变得越来越有价值,也越来越有挑战。




    Web日志挖掘分析的方法

    日志文件的格式及其包含的信息
    ①2006-10-17 00:00:00②202.200.44.43 ③218.77.130.24 80 ④GET ⑤/favicon.ico 
    ⑥Mozilla/5.0+(Windows;+U;+Windows+NT+5.1;+zh-CN;+rv:1.8.0.3)+Gecko/20060426
    +Firefox/1.5.0.3。
    ①访问时间;②用户IP地址;③访问的URL,端口;④请求方法(“GET”、“POST”等);
    ⑤访问模式;⑥agent,即用户使用的操作系统类型和浏览器软件。

    一、日志的简单分析
    1、注意那些被频繁访问的资源
    2、注意那些你网站上不存在资源的请求。常见的扫描式攻击还包括传递恶意参数等:
    3、观察搜索引擎蜘蛛的来访情况
    4、观察访客行为
    应敌之策:
    1、封杀某个IP
    2、封杀某个浏览器类型(Agent)
    3、封杀某个来源(Referer)
    4、防盗链
    5、文件重命名
    作用:
    1.对访问时间进行统计,可以得到服务器在某些时间段的访问情况。
    2.对IP进行统计,可以得到用户的分布情况。
    3.对请求URL的统计,可以得到网站页面关注情况。
    4.对错误请求的统计,可以更正有问题的页面。

    二、Web挖掘
    根据所挖掘的Web 数据的类型,可以将Web 数据挖掘分为以下三类:Web 内容挖掘(Web Content Mining)、Web 结构挖掘(Web Structure Mining)、Web 使用挖掘(Web Usage Mining)(也称为Web日志挖掘)。
    ①Web内容挖掘。Web内容挖掘是指从文档的内容中提取知识。Web内容挖掘又分为文本挖掘和多媒体挖掘。目前多媒体数据的挖掘研究还处于探索阶段,Web文本挖掘已经有了比较实用的功能。Web文本挖掘可以对Web上大量文档集合的内容进行总结、分类、聚类、关联分析,以及利用Web文档进行趋势预测等。Web文档中的标记,例如<Title>和<Heading>等蕴含了额外的信息,可以利用这些信息来加强Web文本挖掘的作用。 
    ②Web结构挖掘。Web结构挖掘是从Web的组织结构和链接关系中推导知识。它不仅仅局限于文档之间的超链接结构,还包括文档内部的结构。文档中的URL目录路径的结构等。Web结构挖掘能够利用网页间的超链接信息对搜索引擎的检索结果进行相关度排序,寻找个人主页和相似网页,提高Web搜索蜘蛛在网上的爬行效率,沿着超链接优先爬行。Web结构挖掘还可以用于对Web页进行分类、预测用户的Web链接使用及Web链接属性的可视化。对各个商业搜索引擎索引用的页数量进行统计分析等。 
    ③Web使用记录挖掘。Web使用记录挖掘是指从Web的使用记录中提取感兴趣的模式,目前Web使用记录挖掘方面的研究较多,WWW中的每个服务器都保留了访问日志,记录了关于用户访问和交互的信息,可以通过分析和研究Web日志记录中的规律,来识别网站的潜在用户;可以用基于扩展有向树模型来识别用户浏览序列模式,从而进行Web日志挖掘;可以根据用户访问的Web记录挖掘用户的兴趣关联规则,存放在兴趣关联知识库中,作为对用户行为进行预测的依据,从而为用户预取一些Web页面,加快用户获取页面的速度,分析这些数据还可以帮助理解用户的行为,从而改进站点的结构,或为用户提供个性化的服务。
    通过对Web服务器日志中大量的用户访问记录深入分析,发现用户的访问模式和兴趣爱好等有趣、新颖、潜在有用的以及可理解的未知信息和知识,用于分析站点的使用情况,从而辅助管理和支持决策。当前,web日志挖掘主要被用于个性化服务与定制、改进系统性能和结构、站点修改、商业智能以及web特征描述等诸多领域。

    三、Web日志挖掘的方法
    (一)首先,进行数据的预处理。
    从学习者的访问日志中得到的原始日志记录并不适于挖掘,必须进行适当的处理才能进行挖掘。因此,需要通过日志清理,去除无用的记录;对于某些记录,我们还需要通过站点结构信息,把URL路径补充成完整的访问序列;然后划分学习者,并把学习者的会话划分成多个事务。
    (二)其次,进行模式发现
    一旦学习者会话和事务识别完成,就可以采用下面的技术进行模式发现。模式发现, 是对预处理后的数据用数据挖掘算法来分析数据。分有统计、分类、聚类、关等多种方法。
    ① 路径分析。它可以被用于判定在一个站点中最频繁访问的路径,还有一些其它的有关路径的信息通过路径分析可以得出。路径分析可以用来确定网站上的频繁访问路径, 从而调整和优化网站结构, 使得用户访问所需网页更加简单快捷, 还可以根据用户典型的浏览模式用于智能推荐和有针对性的电子商务活动。例如:70% 的学习者在访问/ E-Business /M2时,是从/EB开始,经过/ E-Business /SimpleDescription,/ E-Business /M1;65%的学习者在浏览4个或更少的页面内容后就离开了。利用这些信息就可以改进站点的设计结构。
    ② 关联规则。 使用关联规则发现方法,可以从Web的访问事务中找到的相关性。关联规则是寻找在同一个事件中出现的不同项的相关性,用数学模型来描述关联规则发现的问题:x=>y的蕴含式,其中x,y为属性——值对集(或称为项目集),且X∩Y空集。在数据库中若S%的包含属性——值对集X的事务也包含属性——值集Y,则关联规则X=>Y的置信度为C%。
    ③ 序列模式。在时间戳有序的事务集中,序列模式的发现就是指那些如“一些项跟随另一个项”这样的内部事务模式。它能发现数据库中如“在某一段时间内,客户购买商品A,接着会购买商品B,尔后又购买商品C,即序列A→B→C出现的频率高”之类的信息。序列模式描述的问题是:在给定的交易序列数据库中,每个序列按照交易的时间排列的一组交易集,挖掘序列函数作用是返回该数据库中高频率出现有序列。
    ④ 分类分析。发现分类规则可以给出识别一个特殊群体的公共属性的描述,这种描述可以用于分类学习者。分类包括的挖掘技术将找出定义了一个项或事件是否属于数据中某特定子集或类的规则。该类技术是最广泛应用于各类业务问题的一类挖掘技术。分类算法最知名的是决策树方法,此外还有神经元网络、Bayesian分类等。例如:在/ E-Business /M4学习过的学习者中有40%是20左右的女大学生。
    ⑤聚类分析。可以从Web访问信息数据中聚类出具有相似特性的学习者。在Web事务日志中,聚类学习者信息或数据项能够便于开发和设计未来的教学模式和学习群体。聚类是将数据集划分为多个类,使得在同一类中的数据之间有较高的相似度,而在不同类中的数据差别尽可能大。在聚类技术中,没有预先定义好的类别和训练样本存在,所有记录都根据彼此相似程度来加以归类。主要算法有k—means、DBSCAN等。聚类分析是把具有相似特征的用户或数据项归类,在网站管理中通过聚类具有相似浏览行为的用户。基于模糊理论的Web页面聚类算法与客户群体聚类算法的模糊聚类定义相同,客户访问情况可用URL(Uj)表示。有Suj={(Ci,fSuj(Ci))|Ci∈C},其中fSuj(Ci)→[0,1]是客户Ci和URL(Uj)间的关联度:式中m为客户的数量,hits(Ci)表示客户Ci访问URL(Uj)的次数。利用Suj和模糊理论中的相似度度量Sfij定义建立模糊相似矩阵,再根据相似类[Xi]R的定义构造相似类,合并相似类中的公共元素得到的等价类即为相关Web页面。
    ⑥统计。统计方法是从Web 站点中抽取知识的最常用方法, 它通过分析会话文件, 对浏览时间、浏览路径等进行频度、平均值等统计分析。虽然缺乏深度, 但仍可用于改进网站结构, 增强系统安全性, 提高网站访问的效率等。
    ⑦协同过滤。协同过滤技术采用最近邻技术,利用客户的历史、喜好信息计算用户之间的距离,目标客户对特点商品的喜好程度由最近邻居对商品的评价的加权平均值来计算。
    (三)最后,进行模式分析。
    模式分析。基于以上的所有过程,对原始数据进行进一步分析,找出用户的浏览模式规律,即用户的兴趣爱好及习惯,并使其可视化,为网页的规划及网站建设的决策提供具体理论依据。其主要方法有:采用SQL查询语句进行分析;将数据导入多维数据立方体中,用OLAP工具进行分析并给出可视化的结果输出。(分类模式挖掘、聚类模式挖掘、时间序列模式挖掘、序列模式挖掘、关联规则等)

    四、关联规则
    (一)关联规则
    顾名思义,关联规则(association rule)挖掘技术用于于发现数据库中属性之间的有趣联系。一般使用支持度(support)和置信度(confidence)两个参数来描述关联规则的属性。 
    (二)Apriori方法简介
    Apriori算法最先是由Agrawal等人于1993年提出的,它的基本思想是:首先找出所有具有超出最小支持度的支持度项集,用频繁的(k—1)-项集生成候选的频繁k-项集;其次利用大项集产生所需的规则;任何频繁项集的所有子集一定是频繁项集是其核心。
    Apriori算法需要两个步骤:第一个是生成条目集;第二个是使用生成的条目集创建一组关联规则。当我们把最小置信度设为85%,通过关联规则的形成以及对应置信度的计算,我们可以从中得到以下有用的信息:
    1.置信度大于最小置信度时:我们可以这样认为,用户群体在浏览相关网页时,所呈列的链接之间是有很大关联的,他们是用户群的共同爱好,通过网页布局的调整,从某种意义上,可以带来更高的点击率及潜在客户;
    2.置信度小于最小置信度时:我们可以这样认为,用户群体对所呈列链接之间没太多的关联,亦或关联规则中的链接在争夺用户。

    五、网站中Web日志挖掘内容
      (1)网站的概要统计。网站的概要统计包括分析覆盖的时间、总的页面数、访问数、会话数、惟一访问者、以及平均访问、最高访问、上周访问、昨日访问等结果集。
      (2)内容访问分析。内容访问分析包括最多及最少被访问的页面、最多访问路径、最多访问的新闻、最高访问的时间等。
      (3)客户信息分析。客户信息分析包括访问者的来源省份统计、访问者使用的浏览器及操作系统分析、访问来自的页面或者网站、来自的IP地址以及访问者使用的搜索引擎。
      (4)访问者活动周期行为分析。访问者活动周期行为分析包括一周7天的访问行为、一天24小时的访问行为、每周的最多的访问日、每天的最多访问时段等。
      (5)主要访问错误分析。主要访问错误分析包括服务端错误、页面找不到错误等。
      (6)网站栏目分析。网站栏目分析包括定制的频道和栏目设定,统计出各个栏目的访问情况,并进行分析。
    (7)商务网站扩展分析。商务网站扩展分析是专门针对专题或多媒体文件或下载等内容的访问分析。
    (8)有4个方向可以选择:①对用户点击行为的追踪,click stream研究;②对网页之间的关联规则的研究;③对网站中各个频道的浏览模式的研究;④根据用户浏览行为,对用户进行聚类,细分研究;(如果你能够结合现有的互联网产品和应用提出一些自己的建议和意见,那就更有价值了。)
    (9)发现用户访问模式。通过分析和探究Web日志记录中的规律,可以识别电子商务的潜在客户,提高对最终用户的服务质量,并改进Web服务器系统的性能。 
    (10)反竞争情报活动。反竞争情报是企业竞争情报活动的重要组成部分。

    六、相关软件及算法
    (一)相关软件:
    1.数据挖掘的专用软件wake。
    2.用OLAP工具
    3.已经有部分公司开发出了商用的网站用户访问分析系统,如WebTrends公司的CommerceTrends 3.0,它能够让电子商务网站更好地理解其网站访问者的行为,帮助网站采取一些行动来将这些访问者变为顾客。CommerceTrends主要由3部分组成:Report Generation Server、Campain Analyzer和Webhouse Builder。
    4.Accrue公司的Accrue Insight,它是一个综合性的Web分析工具,它能够对网站的运行状况有个深入、细致和准确的分析,通过分析顾客的行为模式,帮助网站采取措施来提高顾客对于网站的忠诚度,从而建立长期的顾客关系。
    (二)相关算法:
    1.运用各种算法进行数据挖掘:GSP算法, Prefixspana算法,
    2.关联规则分析:Apriori、FP-growth算法等。
    3.Apriori算法及其变种算法
    4.基于数据库投影的序列模式生长技术(database project based sequential pattern growth)
    5. Wake算法、MLC++等
    6. PageRank算法和HITS算法利用Web页面间的超链接信息计算“权威型”(Authorities)网页和“目录型”(Hubs)网页的权值。Web结构挖掘通常需要整个Web的全局数据,因此在个性化搜索引擎或主题搜索引擎研究领域得到了广泛的应用。
    7.参考检索引擎的挖掘算法,比如Apache的lucene等。

    七、日志分析的价值或应用
    ①在自己的网站上安装了网站统计的代码,如Google analytics、量子统计、百度统计、cnzz、51.la等,这些工具可以统计网站的流量,也就是网站上访客可看到的所有页面的访问量,但是这些统计工具都不能统计你主机上资源的原始访问信息,例如某个图片被谁下载了。
    ②如果你的网站遭到了攻击、非法盗链和不良请求等,通过分析原始访问日志能大概分析出端倪来,例如:往主机上传了一个mp3,不幸被百度mp3收录,引来大量的盗链,导致我的主机流量猛增!通过分析日志,可以找出问题根源,删除了那个mp3,主机流量也降下来了。
    ③分析访客来源(Referer)。这一段是告诉我们访客是从哪里来到这一个网页。有可能是网站其他页,有可能是来自搜索引擎的搜索页等。通过这条来源信息,你可以揪出盗链者的网页。
    ④网站日志分析软件都能提供关于服务器的浏览量、统计网站所有页面和相关文件被显示的次数、访问最多的网页、客户端访问最频繁的文件、访问者的IP分布、每日访问统计、每周每月等的统计结果。1.访问者访问时段分析。结合IP地址和时段之间的关系可以将来访者大致的身份作一个基本的判断。如按上班前、工作期间、下班后、节假日等,可以针对访客的初步性质安排合适的内容,如产品信息和广告;2.访问者地区分布。分析通过将访问者的IP地址转换为地理区间可以分析出来访者的大致地理分布范围。
    ⑤相关产品推荐。通过以上的关联分析,有了用户频繁访问路径和链接之间的兴趣度,可以构建个性化推荐系统模型。对于实证例子,我们可以在置信度高于最低置信度的相关链接之间,建立某种信息快速互联的桥梁,亦或是在网页规划中,充分考虑链接之间的关联关系,从而为更人性化、合理化的网页设计提供决策依据。如:当客户浏览/newimg/num1.gif时,有0.91的概率会浏览/newimg/num4.gif,那么,在两者之间就存在很高的关联性,从而我们有必要对这两个链接建立某种跟紧密的联系。
    ⑥个性挖掘:针对单个用户的使用记录对该用户进行建模,结合该用户基本信息分析他的使用习惯、个人喜好,目的是在电子商务环境下为该用户提供与众不同的个性化服务。
    ⑦系统改进:Web服务(数据库、网络等)的性能和其他服务质量是衡量用户满意度的关键指标,Web 用法挖掘可以通过用户的拥塞记录发现站点的性能瓶颈,以提示站点管理者改进Web缓存策略、网络传输策略、流量负载平衡机制和数据的分布策略。此外,可以通过分析网络的非法入侵数据找到系统弱点,提高站点安全性,这在电子商务环境下尤为重要。
    ⑧站点修改:站点的结构和内容是吸引用户的关键。Web 用法挖掘通过挖掘用户的行为记录和反馈情况为站点设计者提供改进的依,比如页面连接情况应如何组织、那些页面应能够直接访问等。
    ⑨智能商务:用户怎样使用Web站点的信息无疑是电子商务销售商关心的重点,用户一次访问的周期可分为被吸引、驻留、购买和离开四个步骤,Web用法挖掘可以通过分析用户点击流等Web日志信息挖掘用户行为的动机,以帮助销售商合理安排销售策略。
    ⑩Web特征描述:这类研究跟关注这样通过用户对站点的访问情况统计各个用户在页面上的交互情况,对用户访问情况进行特征描述。



    1.

    PHP开源Apache日志分析工具收集与比较

    2.  

    MapReduce 编程模型在日志分析方面的应用

    3. 
    GoAccess is an open source real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems

    4. superseriousstat


    5. 《2010数据库技术大会漆兴海量日志分析系统实践》学习笔记


    展开全文
  • ELK-日志分析系统

    万次阅读 2020-09-23 17:14:47
    为什么要建立日志分析系统: 当我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、...

    微信搜索:“二十同学” 公众号,欢迎关注一条不一样的成长之路

    为什么要建立日志分析系统:

    当我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。

    解决办法是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

    一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

    一个完整的集中式日志系统,需要包含以下几个主要特点:

    • 收集-能够采集多种来源的日志数据
    • 传输-能够稳定的把日志数据传输到中央系统
    • 存储-如何存储日志数据
    • 分析-可以支持 UI 分析
    • 警告-能够提供错误报告,监控机制

    ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

    ELK简介:

    ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

    Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

    Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

    Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

    Kibana示例图

    Filebeat隶属于Beats。目前Beats包含四种工具:

    1. Packetbeat(搜集网络流量数据)
    2. Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
    3. Filebeat(搜集文件数据)
    4. Winlogbeat(搜集 Windows 事件日志数据)

    ELK用途:

    传统意义上,ELK是作为替代Splunk的一个开源解决方案。Splunk 是日志分析领域的领导者。日志分析并不仅仅包括系统产生的错误日志,异常,也包括业务逻辑,或者任何文本类的分析。而基于日志的分析,能够在其上产生非常多的解决方案,譬如:

    1.问题排查。我们常说,运维和开发这一辈子无非就是和问题在战斗,所以这个说起来很朴实的四个字,其实是沉甸甸的。很多公司其实不缺钱,就要稳定,而要稳定,就要运维和开发能够快速的定位问题,甚至防微杜渐,把问题杀死在摇篮里。日志分析技术显然问题排查的基石。基于日志做问题排查,还有一个很帅的技术,叫全链路追踪,比如阿里的eagleeye 或者Google的dapper,也算是日志分析技术里的一种。
    2.监控和预警。 日志,监控,预警是相辅相成的。基于日志的监控,预警使得运维有自己的机械战队,大大节省人力以及延长运维的寿命。
    3.关联事件。多个数据源产生的日志进行联动分析,通过某种分析算法,就能够解决生活中各个问题。比如金融里的风险欺诈等。这个可以可以应用到无数领域了,取决于你的想象力。
    4.数据分析。 这个对于数据分析师,还有算法工程师都是有所裨益的。

    官方文档:

    Filebeat:

    https://www.elastic.co/cn/products/beats/filebeat
    https://www.elastic.co/guide/en/beats/filebeat/5.6/index.html

    Logstash:
    https://www.elastic.co/cn/products/logstash
    https://www.elastic.co/guide/en/logstash/5.6/index.html

    Kibana:

    https://www.elastic.co/cn/products/kibana

    https://www.elastic.co/guide/en/kibana/5.5/index.html

    Elasticsearch:
    https://www.elastic.co/cn/products/elasticsearch
    https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html

    elasticsearch中文社区:
    https://elasticsearch.cn/

    ELK架构图:

    架构图一:

    这是最简单的一种ELK架构方式。优点是搭建简单,易于上手。缺点是Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患。

    此架构由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询,操作。用户亦可以更直观的通过配置Kibana Web方便的对日志查询,并根据数据生成报表。

    架构图二:

    此种架构引入了消息队列机制,位于各个节点上的Logstash Agent先将数据/日志传递给Kafka(或者Redis),并将队列中消息或数据间接传递给Logstash,Logstash过滤、分析后将数据传递给Elasticsearch存储。最后由Kibana将日志和数据呈现给用户。因为引入了Kafka(或者Redis),所以即使远端Logstash server因故障停止运行,数据将会先被存储下来,从而避免数据丢失。

    架构图三:

    此种架构将收集端logstash替换为beats,更灵活,消耗资源更少,扩展性更强。同时可配置Logstash 和Elasticsearch 集群用于支持大集群系统的运维日志数据监控和查询。

    Filebeat工作原理:

    Filebeat由两个主要组件组成:prospectors 和 harvesters。这两个组件协同工作将文件变动发送到指定的输出中。

    Harvester(收割机):负责读取单个文件内容。每个文件会启动一个Harvester,每个Harvester会逐行读取各个文件,并将文件内容发送到制定输出中。Harvester负责打开和关闭文件,意味在Harvester运行的时候,文件描述符处于打开状态,如果文件在收集中被重命名或者被删除,Filebeat会继续读取此文件。所以在Harvester关闭之前,磁盘不会被释放。默认情况filebeat会保持文件打开的状态,直到达到close_inactive(如果此选项开启,filebeat会在指定时间内将不再更新的文件句柄关闭,时间从harvester读取最后一行的时间开始计时。若文件句柄被关闭后,文件发生变化,则会启动一个新的harvester。关闭文件句柄的时间不取决于文件的修改时间,若此参数配置不当,则可能发生日志不实时的情况,由scan_frequency参数决定,默认10s。Harvester使用内部时间戳来记录文件最后被收集的时间。例如:设置5m,则在Harvester读取文件的最后一行之后,开始倒计时5分钟,若5分钟内文件无变化,则关闭文件句柄。默认5m)。

    Prospector(勘测者):负责管理Harvester并找到所有读取源。

    filebeat.prospectors:
    
    - input_type: log
    
      paths:
    
        - /apps/logs/*/info.log

    Prospector会找到/apps/logs/*目录下的所有info.log文件,并为每个文件启动一个Harvester。Prospector会检查每个文件,看Harvester是否已经启动,是否需要启动,或者文件是否可以忽略。若Harvester关闭,只有在文件大小发生变化的时候Prospector才会执行检查。只能检测本地的文件。

    Filebeat如何记录文件状态:

    将文件状态记录在文件中(默认在/var/lib/filebeat/registry)。此状态可以记住Harvester收集文件的偏移量。若连接不上输出设备,如ES等,filebeat会记录发送前的最后一行,并再可以连接的时候继续发送。Filebeat在运行的时候,Prospector状态会被记录在内存中。Filebeat重启的时候,利用registry记录的状态来进行重建,用来还原到重启之前的状态。每个Prospector会为每个找到的文件记录一个状态,对于每个文件,Filebeat存储唯一标识符以检测文件是否先前被收集。

    Filebeat如何保证事件至少被输出一次:

    Filebeat之所以能保证事件至少被传递到配置的输出一次,没有数据丢失,是因为filebeat将每个事件的传递状态保存在文件中。在未得到输出方确认时,filebeat会尝试一直发送,直到得到回应。若filebeat在传输过程中被关闭,则不会再关闭之前确认所有时事件。任何在filebeat关闭之前为确认的时间,都会在filebeat重启之后重新发送。这可确保至少发送一次,但有可能会重复。可通过设置shutdown_timeout参数来设置关闭之前的等待事件回应的时间(默认禁用)。

     

    Logstash工作原理:

    Logstash事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。

     

    Input:输入数据到logstash。

    一些常用的输入为:

    file:从文件系统的文件中读取,类似于tail -f命令

    syslog:在514端口上监听系统日志消息,并根据RFC3164标准进行解析

    redis:从redis service中读取

    beats:从filebeat中读取

    Filters:数据中间处理,对数据进行操作。

    一些常用的过滤器为:

    grok:解析任意文本数据,Grok 是 Logstash 最重要的插件。它的主要作用就是将文本格式的字符串,转换成为具体的结构化的数据,配合正则表达式使用。内置120多个解析语法。

    官方提供的grok表达式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
    grok在线调试:https://grokdebug.herokuapp.com/

    mutate:对字段进行转换。例如对字段进行删除、替换、修改、重命名等。

    drop:丢弃一部分events不进行处理。

    clone:拷贝 event,这个过程中也可以添加或移除字段。

    geoip:添加地理信息(为前台kibana图形化展示使用)

    Outputs:outputs是logstash处理管道的最末端组件。一个event可以在处理过程中经过多重输出,但是一旦所有的outputs都执行结束,这个event也就完成生命周期。

    一些常见的outputs为:

    elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。

    file:将event数据保存到文件中。

    graphite:将event数据发送到图形化组件中,一个很流行的开源存储图形化展示的组件。

    Codecs:codecs 是基于数据流的过滤器,它可以作为input,output的一部分配置。Codecs可以帮助你轻松的分割发送过来已经被序列化的数据。

    一些常见的codecs:

    json:使用json格式对数据进行编码/解码。

    multiline:将汇多个事件中数据汇总为一个单一的行。比如:java异常信息和堆栈信息。

    展开全文
  • python日志分析

    千次阅读 2019-05-14 09:57:51
    日志分析 生产中会出现大量的系统日志、应用程序日志,安全日志等,通过贵日志的分析可以了解服务器的负载,健康状况,可以分析客户的分布情况、客户的行为,甚至基于这些分析可以做出预测。 一般采集流程: ...
    日志分析

    生产中会出现大量的系统日志、应用程序日志,安全日志等,通过贵日志的分析可以了解服务器的负载,健康状况,可以分析客户的分布情况、客户的行为,甚至基于这些分析可以做出预测。
    一般采集流程:

    • 日志产出->采集(logstash、Flumen、Scribe)->存储->分析->存储(数据库、NoSQL)->可视化

    开源实时日志分析ELK平台
    Logstash收集日志,并存放到ElasticSearch集群中,Kibana则从ES集群中查询数据生成图表,返回游览器端

    数据提取

    半结构化数据
    日志是半结构化数据,是有组织的、有格式的数据。可以分割成行和列,就可以当作表理解和处理了,当然也可以分析里面的数据。
    文本分析
    日志是文本文件,需要依赖文件IO、字符串操作、正则表达式等技术
    通过这些技术就可以将日志需要的数据提取出来了
    使用正则表达式

    import re
    s='''123.125.71.36 - - [06/Apr/2017:18:09:25 +0800] \
    "GET / HTTP/1.1" 200 8642 "-" "|Mozilla/5.0 (compatible; \
    Baiduspider/2.0; +http://www.baidu.com/search/spider.html)\"'''
    pattern='''([\d.]{3,}) - - \[(.*)\] "(\w+) (\S+) (.*)" (\d+ \d+) "-" "(.*)"'''
    regex=re.compile(pattern)
    def extract(log:str):
        m=regex.match(log)
        if m:
            print(m.groups())
    extract(s)
    

    在这里插入图片描述
    使用命名分组

    import re
    s='''123.125.71.36 - - [06/Apr/2017:18:09:25 +0800] \
    "GET / HTTP/1.1" 200 8642 "-" "|Mozilla/5.0 (compatible; \
    Baiduspider/2.0; +http://www.baidu.com/search/spider.html)\"'''
    pattern='''(?P<ip>[\d.]{3,}) - - \[(?P<time>.*)\] "(\w+) (\S+) (.*)" (\d+ \d+) "-" "(?P<useragent>.*)"'''
    regex=re.compile(pattern)
    def extract(log:str):
        m=regex.match(log)
        if m:
            print(m.groups())
            print('ip :{}'.format(m.group('ip')),'time :{}'.format(m.group('time')),'useragent :{}'.format(m.group('useragent')),sep='    ')
    extract(s)
    

    在这里插入图片描述
    使用上面的分组就能提取想要的所有的组,也就是我们想要的数据,为了方便可以使用命名分组
    映射
    对每一个字段命名,然后与值和类型转换的方法对应
    最简单的方式,就是使用正则表达式分组

    import re
    s='''123.125.71.36 - - [06/Apr/2017:18:09:25 +0800] \
    "GET / HTTP/1.1" 200 8642 "-" "|Mozilla/5.0 (compatible; \
    Baiduspider/2.0; +http://www.baidu.com/search/spider.html)\"'''
    pattern='''(?P<ip>[\d.]{3,}) - - \[(?P<time>.*)\] "(\w+) (\S+) (.*)" (\d+ \d+) "-" "(?P<useragent>.*)"'''
    regex=re.compile(pattern)
    #使用映射将得到的结果转换成需要的类型
    con={
        'datetime':lambda time:datetime.datetime.strptime(time,"%d/%b/%Y:%H:%M:%S %z"),
    }#这里举例只转换了时间
    def c(long:str):
        m=regex.match(long)
        if m:
            return {k:con.get(k,lambda x: x)(v) for k,v in m.groupdict().items()}
    print(c(s))
    

    在这里插入图片描述

    异常处理
    日志中不免出现一些不匹配的行,需要处理,这里使用re.match方法,有可能匹配不上,需要加一个判断,采用抛出异常的方式,让调用者活的异常并自行处理

    import re
    s='''123.125.71.36 - - [06/Apr/2017:18:09:25 +0800] \
    "GET / HTTP/1.1" 200 8642 "-" "|Mozilla/5.0 (compatible; \
    Baiduspider/2.0; +http://www.baidu.com/search/spider.html)\"'''
    pattern='''(?P<ip>[\d.]{3,}) - - \[(?P<time>.*)\] "(\w+) (\S+) (.*)" (\d+ \d+) "-" "(?P<useragent>.*)"'''
    regex=re.compile(pattern)
    con={
        'time':lambda time:datetime.datetime.strptime(time,"%d/%b/%Y:%H:%M:%S %z"),
    }
    def c(long:str):
        m=regex.match(long)
        if m:
            return {k:con.get(k,lambda x: x)(v) for k,v in m.groupdict().items()}
        #考虑匹配不到的情况
        else:
            #采用报错
            #raise Exception('No match. {}'.format(s))
            #采用返回特殊值
            return None
    print(c(s))
    def load(path):
        with open(path) as f:
            for line in f:
    

    数据载入
    对于本项目来说,数据就是日志的一行行记录,载入数据就是文件IO的读取,将获取的数据的防范封装成函数

    def load(path):
        with open(path) as f:
            for line in f:
                fields=extract(line)
                if fields:
                    yield fields
                else:
                    continue
    

    日志文件的加载
    目前实现的代码中,只能接受一个路径,修改为接受一批路径。
    可以约定一个路径下文件的存放形式:

    • 如果送来的是一批路径,就迭代其中路径。
    • 如果路径是一个普通的文件,就直接加载这个文件。
    • 如果路径是一个目录,就便利路径下所有指定类型的文件,每一个我呢见按照行处理,可以提供参数处理是否递归子目录
    from pathlib import Path
    def load(*paths,encoding='utf-8',ext='*.log',recursive=False):
        for x in paths:
            p=Path(x)
            #目录处理
            if p.is_dir():
                if isinstance(ext,str):
                    ext=[ext]
                else:
                    ext=list(ext)
            for e in ext:
            files=p.rglob(e)if recursiversive else p.glob(e)
                yield from loadfile(str(file.absolute()),encoding=encodingoding)
            elif p.is_file():
                yield from loadfile(str(file.absolute()),encoding=encodingoding)
    

    完整代码

    from pathlib import Path
    import datetime
    import re
    pattern='''(?P<ip>[\d.]{3,}) - - \[(?P<time>.*)\] "(\w+) (\S+) (.*)" (\d+ \d+) "-" "(?P<useragent>.*)"'''
    regex=re.compile(pattern)
    conversion={
        "datetime":lambda timestr:datetime.datetime.strptime(timestr,'%d%b%Y:%H:%M:%S %z')
    }
    def extract(logline:str)->dict:
        """返回字段的字典,如果返回None说明匹配失败"""
        m=regex.match(logline)
        if m:
            return {k:conversion.get(k,lambda x :x)(v)for k,v in m.groupdict().items()}
        else:
            return None #或输出日志记录
    def loadfile(filename:str,encoding='utf-8'):
        """装载日志文件"""
        with open(filename,encoding=encoding) as f :
            for line in f:
                fields=extract(lien)
                if fields:
                    yield fields
                else:
                    continue
    from pathlib import Path
    def load(*paths,encoding='utf-8',ext='*.log',recursive=False):
        """装载日志文件"""
        for x in paths:
            p=Path(x)
            #目录处理
            if p.is_dir(): #处理目录
                if isinstance(ext,str):
                    ext=[ext]
                else:
                    ext=list(ext)
            for e in ext:
            files=p.rglob(e)if recursiversive else p.glob(e)
                yield from loadfile(str(file.absolute()),encoding=encodingoding)
            elif p.is_file():
                yield from loadfile(str(file.absolute()),encoding=encodingoding)
    
    
    展开全文
  • ELK日志分析系统

    万次阅读 2019-07-08 10:17:39
    ELK日志分析系统 介绍: 顾名思义ELK是由ElasticsearchLogstash Kibana三大组件构成的一个基于web页面的日志分析工具。 日志分析是运维工程师解决系统故障,发现问题的主要手段。日志包含多种类型,包括程序日志...

    ELK日志分析系统

    介绍:

    顾名思义ELK是由Elasticsearch Logstash Kibana三大组件构成的一个基于web页面的日志分析工具。

    日志分析是运维工程师解决系统故障,发现问题的主要手段。日志包含多种类型,包括程序日志,系统日志以及安全日志等。通过对日志分析,预发故障的发生,又可以在故障发生时,寻找到蛛丝马迹,快速定位故障点。及时解决。

    组件结构:

    Elasticsearch:是一个开源分布式时实分析搜索引擎,建立在全文搜索引擎库Apache Lucene基础上,同时隐藏了Apache Lucene的复杂性。Elasticsearch将所有的功能打包成一个独立的动画片,索引副本机制,RESTful风格接口,多数据源。自动搜索等特点。

    Logstash :是一个完全开的工具,主要用于日志收集同时可以对数据处理,输出给Elasticarch

    Kibana:也是一个完全开的工具,kibana可以为Logstash和Elasticsearch提供图形化日志分析Web界面,可以汇总,分析和搜索重要数据日志。

    组件介绍:

    Elasticsearch介绍

    Elasticsearch:是基于Lucene的搜索服务器,它稳定、可靠快速,而且具有比较好的水平扩展能力,为分布式环境设计,在云计算应用很广泛。

    Elasticsearch的基础核心概念

    接近实时(NRT):Elasticsearch是一个搜索速度接近实时的搜索平台,响应速度非常的快,从索引一个文档直到能够被搜索到只有一个轻微的延迟(通常1s)

    群集(cluster):群集就是一个多个节点组织在一起,所有的节点上存放用户数据,并一起提供索引和搜索功能。通过选举产生节点,并提供节点的联合索引和搜索的功能。每个群集都有一个唯一的表示名称,默认是Elasticsearch,每个节点是基于群集名字加入群集中的。一个群集可以只有一台节点,为了具备更好的容错性,通常配置多个节点,在配置群集时建议配置成群集模式

    节点(node)是指一台单一的服务器,多个节点组织为一个群集,每个节点都存储数据并参与群集的索引和搜索功能。和群集一样,节点也是通过名字来标识。默认情况下,节点名字是随机的,也可以自定义。

    索引(index):类似于关系型数据库中的“库”,当索引一个文档后,就可以使用elasticsearch搜索到该文档,也可以简单地将索引理解为存储数据库的地方,可以方便地进行全文索引。

    分片和副本(shards&replicas):elasticsearch将索引分成若干个部分,每个部分称为一个分片,每个分片就是一个功能的独立索引。分片的数量一般在索引创建前指定,且创建索引后不能更改。

    Logstash介绍:

    Logstash由JRuby语言编写,运行在Java虚拟机上,是一款强大的数据库处理工具,可以实施数据传输,格式处理,格式化输出。Logstash具有强大的插件功能,常用于日志处理。Logstash可配置单一的代理端,与其他开源软件结合,以实现不同的功能。

    Logstash的理念很简单,它只做三件事:数据输入;数据输出;数据加工(如加工、更改等)

    Logstash的主要组件都有:

    Shipper:日志收集者。负责监控本地日志文件的变化,及时收集最新的日志文件内容。

    Indexer:日志存储者。负责接收日志并写入到本地文件。

    Broker:日志Hub。负责连接多个Shipper和多个Indexer。

    Search and Storage:允许对事件进行搜索和存储。

    Web Interface:基于Web的展示界面。

    注:标红色字体的是用于远程代理端时,需要的组件。

    正是由于组件在Logstash架构中可独立部署,才能提供更好的群集扩展性。

    在Logstash中包含三个阶段,分别是输入(Input)、处理(Filter非必要)和输出(Output)

    Kibana介绍:

    Kibana是一个针对Elasticsearch的开源分析及可视化平台,主要设计用来和Elasticsearch一起工作,可以搜索,查看存储在Elasticsearch搜索中的数据,并通过各种表进行高级数据分析及展示。

    Kibana可以让数据看起来一目了然。他操作简单,基于浏览器的用户界面管理方式,用户可以在任何地点任何时间都可以实时监控。

    Kibana的主要功能:

    Elasticsearch无缝之集成,kibana架构是为Elasticsearch定制的,可以将任何(结构化和非结构化)数据加入Elasticsearch索引。

    整合数据:Kibana可以让海量数据变得更容易理解,根据数据内容可以创建形象的柱形图,折线图、散点图、直方图等以便用户查看。

    复杂数据分析:Kibana提升了Elasticsearch的分析能力,能够更加智能地分析数据,执行数学转换并根据要求对数据切割分块。

    接口灵活:使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流。

    配置简单、可视化多数据源等

    实施案列:

    准备环境:

    准备三台虚拟机,关闭selinux和防火墙。其中nide1节点和nide2节点内存条需要4G(>2G)以上内存。内存小了怕运行不起节点。

    配置主机名并配置host文件以便DNS解析:

    注:node2节点上的配置也和上面一样。

    检查本机是否存在Java环境:

    注:两台节点上都需要检查。

    1. 部署Elasticsearch软件。

    在node1和node2节点上都需要部署Elasticsearch软件。Elasticsearch软件可以通过rpm安装、YUM安装或源码安装。生产环境中,根据实际需要,选择安装方式。这里我使用的是rpm

    加载系统服务并设置开机自启动:

    修改配置文件:

    群集发现通过单薄实

    创建数据存放路径并授权:

    启动服务并检查端口号:

    通过以上的方式产看群集的状态并不友好。可以通过安装Elasticsearch插件,可以更方便的管理群集:

    1. 安装Elasticsearch-head插件:

    Elasticsearch在5.0版本过后,Elasticsearch-head插件需要做独立服务进行安装,需要npm命令。安装Elasticsearch-head需要提前把node和phantomjs软件包安装好。Node是一个基于Chrome V8引擎的JavaScript运行环境,而phantomjs是一个基于webkit的JavaScriptAPI。可以理解为一个隐形的浏览器,任何基于webkit浏览器做的事情,它都可以做到。

    编译安装node耗时比较长,一般在50分钟左右。

    安装phantomjs

    安装Elasticsearch-head插件:

    修改Elasticsearch主配置文件

    启动服务:必须在解压后的Elasticsearch-head目录下启动服务。进程会读取该目录下的gruntfile.js文件,否则可能启动失败

    检查端口:

    最后打开网页浏览Elasticsearch信息:(健康值为绿色)

    安装Logstash:

    Logstash一般部署在需要监控其他日志的服务器中,在部署之前,先在node1节点上部署一遍,已熟悉Logstash的使用方法。

    启动服务并做优化链接:

    Logstash的配置文件:主要由三部分组成:input、output以及filter。根据需要进行配置。配置文件格式为:

    下面配置通过修改Logstash配置文件,让收集系统日志/var/log/messages,并将其输出到Elasticsearch中。

    安装Kibana:

    在node1节点上安装部署。

    修改配置Kibana文件:

    重启服务打开浏览器访问:

    展开全文
  • 日志分析方法

    万次阅读 2018-06-03 21:32:52
    日志分析方法 日志分析方法 分析方法: 1.特征字符分析(Signature-based): 2.访问频率分析(Frequency analysis) 1.漏洞扫描检测: 2.暴力破解检测: 3.webshell 检测 难点: 风险评估模型: 参考: ...
  • 使用Spark进行CDN日志分析

    千人学习 2018-03-05 18:46:32
    本节主要讲解【CDN日志分析】这个实例,讲解2018大数据行业发展趋势,重点领域应用。同时以【CDN日志分析】为案例出发讲解了Spark开发流程及实践。从多角度完善分享大数据开发露流程。
  • ELK日志分析方案

    千次阅读 2018-11-01 16:40:30
    针对公司项目微服务化,随着项目及服务器的不断增多,决定采用ELK(Elasticsearch+Logstash+Kibana)日志分析平台进行微服务日志分析。 1.ELK整体方案 1.1 ELK架构图 1.2 ELK工作流程 1.在微服务服务器上部署...
  • Tomcat日志分析

    千次阅读 2015-10-17 21:25:44
    tomcat日志分析
  • iis日志分析和tomcat日志分析(python)demo,请去http://download.csdn.net/detail/wyazyf/9844906页面中下载
  • Awstart日志分析

    千次阅读 2019-10-25 08:42:36
    Awstart日志分析 1、配置Apache基本网站 安装DNS和Apache服务 [root@localhost ~]# yum install bind httpd -y 1.1、配置DNS服务 配置主配置文件 [root@localhost ~]# vim /etc/named.conf 配置区域配置文件 ...
  • tomcat异常日志分析及处理 日志信息如下: 2015-10-2918:39:49org.apache.coyote.http11.Http11Protocolpause 信息:PausingCoyoteHTTP/1.1onhttp-8088 2015-10-2918:39:50org.apache.catalina.core....
  • 网站日志分析技巧

    千次阅读 2019-02-05 22:57:23
    分析日志是菜鸟到高手的进阶必经阶段   做SEO为什么要分析网站日志? 1,找到网站不收录的真正原因; 2,为网站优化提供可靠的数据(如何发外链,更新哪个栏目);...3,分析百度蜘蛛提供可靠...日志分析的步骤:...
  • 日志分析工具、日志管理系统、syslog分析  系统日志(Syslog)管理是几乎所有企业的重要需求。系统管理员将syslog看作是解决网络上系统日志支持的系统和设备性能问题的关键资源。人们往往低估了对完整的sys­log...
  • monkey日志分析

    千次阅读 2019-02-12 18:06:36
    monkey日志分析 app在功能测试基本完成之后,会通过monkey专项测试,验证程序的稳定性 首先在拿到一个monkey报告时可以从文首看到 ①该次monkey的seed值 ②执行次数(count) ③执行的对应包名(AllowPackage)...
  • 【日志审计】Apache日志分析

    千次阅读 2019-06-04 12:50:34
    日志分析是我们进行网站维护的重要技能,下面我们就以Apache日志为例分析一下攻击者是如何入侵网站的 通过分析Apache日志了解到了攻击者在入侵网站时的主要步骤 攻击者在27/May/2019:15:46:42利用payload注出后台...
  • 互联网日志分析技术及分析指标

    千次阅读 2017-03-23 23:49:39
    日志分析必要性 日志格式 传统单机日志数据分析 大规模分布式日志分析 日志分析指标 网站运营日志分析常用指标 PV Page View UV Unique Visitor PVUV Page View Per User 漏斗模型与转化率 留存率 用户属性...
  • JVM进阶(七)——从GC日志分析堆内存

    万次阅读 2017-01-21 17:22:23
    JVM进阶(七)——从GC日志分析堆内存  在前面的文章中,我们只设置了整个堆的内存大小。但是我们知道,堆又分为了新生代,年老代。他们之间的内存怎么分配呢?新生代又分为Eden和Survivor,他们的比例大小能改变吗...
  • es 日志分析

    千次阅读 2018-04-24 14:37:30
    Es 日志分析 首先要有个kibana 再者要有电脑和手。然后在config里面配置好需要连接的es的ip地址。先启动bin/kibana.bat。如果没报错,且集群状态为黄色或者绿色即可。 再打开http://localhost:5601。如下图所示...
  • gc日志分析

    千次阅读 2017-08-15 19:28:40
    经过日志分析,我找到两个突破点,重点关注红色字体部分的日志,分析过程如下:  1)FULL GC前后Java堆大小有变化;经研究发现是由于Java应用JVM参数XMS设置为默认值,在我们的系统环境下,Hotspot的Xms默认值为...
  • Monkey 日志分析

    千次阅读 2016-10-24 16:14:29
    Monkey 日志分析: REM 方法一:手动设置Monkey日志路径 SET monkeyLogFile=F:\Monkey\20140808\FindyouV1.0.0\20140825181801_monkey.log REM 方法二:直接将Monkey日志拖到此bat文件上 ...
  • 日志审计-apache攻击日志分析

    千次阅读 2016-06-01 16:21:16
    其中如果使用人工审阅这些消息,工作量实在太大了,另外还需要攥写日志分析报告和风险分析。故如果室纯粹人工完成这项工作,工作量实在非常大。 0x01 前期准备工作 我们可以用两种方式进行日志方式:一种是本地...
  • hadoop日志分析

    万次阅读 2014-11-17 23:07:11
    Web日志包含着网站最重要的信息,通过日志分析,我们可以知道网站的访问量,哪个网页访问人数最多,哪个网页最有价值等。一般中型的网站(10W的PV以上),每天会产生1G以上Web日志文件。大型或超大型的网站,可能每...
  • 超详细 ELK 日志分析系统

    千次阅读 2021-01-07 10:53:45
    文章目录一、ELK日志分析系统简介1:ELK日志分析系统组成2:日志处理步骤二:三款软件简介1:Elasticsearch(1)Elasticsearch的概述(2)Elasticsearch核心概念2:Logstash(1)Logstash介绍(2)Logstash的主要...
  • MOOC网站日志分析

    千次阅读 2017-11-30 13:42:24
    网站日志分析是针对万网云虚拟主机存储的日志数据提供的一站式多维度、可视化的一系列数据分析报表,虚机客户可以通过这些分析报表来查看近期站点的流量趋势、洞察站点用户行为、用户地域属性等。 MOOC网站...
  • mongo 慢日志分析

    千次阅读 2019-05-18 22:34:50
    说到mongo的慢日志分析,就不得不提到profile分析器,profile分析器将记录的慢日志写到system.profile集合下,这个集合是一个固定的集合。我们可以通过这个集合的查询,来了解当前的慢日志,进而对数据库进行优化 ...
  • spark 日志分析

    千次阅读 2015-10-03 09:31:37
    spark 运行日志分析 1.问题:一直在运行的spark 运行时,发现数据应该690多万,而只有610多万,控制台日志正常。异常出现异常时,在控制台中日志正常。怎样查找这个错误异常日志 2.处理:由于数据量比较大计算一次...
  • CTO讲堂:海量日志分析与智能运维

    千人学习 2017-03-09 15:30:56
    大数据分析正在被广泛应用,大数据里90%都是非结构化数据。日志是重要的非结构化数据,日志无处不在,...拥有19年IT经验的日志易创始人兼CEO陈军为大家分享当前海量日志分析的相关应用场景、技术难点以及趋势发展等。
  • nginx日志与监控,日志分析

    千次阅读 2017-12-29 15:18:09
    在分析服务器运行情况和业务数据时,nginx日志是非常可靠的数据来源,而掌握常用的nginx日志分析命令的应用技巧则有着事半功倍的作用,可以快速进行定位和统计。下面是自己在分析nginx日志时常用命令的一些总结。 ...
  • 理论+实验:ELK日志分析系统

    千次阅读 2020-10-28 16:28:48
    目录一、ELK日志分析系统简介1.1 ELK日志分析系统简介-11.2 ELK日志分析系统简介-2二、Elasticesarch介绍三、Logstash介绍四、Kibana介绍五、部署ELK日志分析系统 一、ELK日志分析系统简介 1.1 ELK日志分析系统简介-...
  • ELK 是 Elasticsearch、 Logstash 和 Kibana 这三个软件集合的简称,ELK 搭建实时日志分析平台视频教程,本次课程,青云QingCloud 工程师彭科、东升将会从技术角度来分享如果搭建 ELK 实时日志分析平台。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,460
精华内容 26,584
关键字:

日志分析